AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Funktion ob Dateityp änderbares Symbol hat?
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion ob Dateityp änderbares Symbol hat?

Ein Thema von Popov · begonnen am 16. Mär 2014 · letzter Beitrag vom 17. Mär 2014
Antwort Antwort
Furtbichler
(Gast)

n/a Beiträge
 
#1

AW: Funktion ob Dateityp änderbares Symbol hat?

  Alt 17. Mär 2014, 07:06
...wenn ich das Verzeichniss zum dritten Mal aufrufe:
Delphi-Quellcode:
  ImageList.Clear;
  Icon := TIcon.Create;
  try
    Icon.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Icon_1.ico');
    ImageList.AddIcon(Icon)
  finally
    Icon.Free;
  end;
Was ist eigentlich in der ImageList, wenn Du ständig 'Icon.Free' aufrufst?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Funktion ob Dateityp änderbares Symbol hat?

  Alt 17. Mär 2014, 08:10
@ Furtbichler

Gute Frage. Ich ging bisher davon aus, dass eine Kopie erstellt wird, denn in der OH steht nichts von Übergabe oder Freigabe. Und es funktioniert so wie es ist, bzw. das geladene Icon ist nach der Freigabe immer noch in der ImageListe und wird fröhlich genutzt.

Auf der anderen Seite - Andersherum wird evtl. ein Schuh daraus (ich weiß es aber noch nicht). Wie ich schon sagte wird alles in zwei Schritten gemacht. Zuerst wird ein Platzhalter-Icon zugewiesen, damit der Aufbau schnell geht, im zweiten Durchgang wird dann das richtige Icon ermittelt, bzw. JustInTime. Jedes Mal wird vorher die ImageListe mit Clear leer gemacht.

In der Funktion für den zweiten Durchgang habe ich die Icons nach AddIcon anscheinend nicht freigegeben. Das macht 2700 x 2, also etwa 5400 Icons.

Nun habe ich es anders gemacht und gebe das Icon nach AddIcon frei. Bisherige keine Fehlermeldung.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: Funktion ob Dateityp änderbares Symbol hat?

  Alt 17. Mär 2014, 11:10
Obwohl jetzt keine Fehlermeldung kommt, ganz glücklich bin ich dann doch nicht, denn da scheint immer noch der Wurm drin zu liegen. Mal ein kleines Beispiel. Diesen Code kriege ich keine zwei mal ausgeführt, nur sehe ich keinen Fehler drin. Zwar ist das kein Code aus meinem vorherigen Problem, denn ich nutze nicht alle Icons, aber trotzdem. Wieso ist danach das Programm ausgelastet?
Delphi-Quellcode:
uses
  ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
  SearchPath, FilePath: String;
  sr: TSearchRec;
  sfi: TSHFileInfo;
  Icon: TIcon;
begin
  SearchPath := 'c:\windows\system32\';

  if FindFirst(SearchPath + '*.*', faAnyFile or faDirectory, sr) = 0 then
  try
    repeat
      FilePath := SearchPath + sr.Name;

      if SHGetFileInfo(PChar(FilePath), 0, sfi, SizeOf(sfi), SHGFI_ICON or SHGFI_SMALLICON) <> 0 then
      begin
        Icon := TIcon.Create;
        try
          Icon.Handle := sfi.hIcon; //<<< hinzugefügt
          ImageList1.AddIcon(Icon);
        finally
          Icon.Free;
        end;
      end;
    until FindNext(sr) <> 0;
  finally
    FindClose(sr);
  end;

  ImageList1.Clear;

  ShowMessage('Laden fertig, und schon wieder gelöscht.');
end;
Was mir auffällt ist der Teil SHGetFileInfo(...) <> 0 . Zwar steht das nicht in der MSDN, denn da steht, dass bei Nichtnutzung von SHGFI_EXETYPE oder SHGFI_SYSICONINDEX der Erfolgsfall mit ungleich Null angezeigt wird, laut einer anderen Quelle gilt das auch für SHGFI_ICON und SHGFI_SMALLICON, womit hier ein Fehler vorliegen würde, aber selbst wenn, das dürfte nicht das Problem sein.

//EDIT

Scheint jetzt zu klappen. Anscheinend habe ich vorhin eine Zeile vergessen. Trotzdem, wieso der Unterschied? Mit der Zeile, alles ok, ohne Auslastung.

Geändert von Popov (17. Mär 2014 um 11:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz