AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi VST: Massenweise verschiedene Icons schnell laden
Thema durchsuchen
Ansicht
Themen-Optionen

VST: Massenweise verschiedene Icons schnell laden

Ein Thema von Nils_13 · begonnen am 7. Jun 2008 · letzter Beitrag vom 8. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 17:16
Hi,

angenommen man möchte alle Dateien der Festplatte in einem Virtual String Tree (VST) darstellen. Dann kämen unglaublich viele verschiedene Icons zusammen. Wie könnte man das ohne den Speicher dauerhaft mit Icons zuzumüllen und mit möglichst kurzer Ladezeit lösen ? Jede Datei besitzt übrigens einen Node - Unternodes existieren also nicht. Mir geht es darum, wie man das am besten löst - die komplette Festplatte will ich nicht einladen, aber es geht mir einfach darum, das Maximum rauszuholen.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 17:30
Moin Nils,

Zitat von Nils_13:
Dann kämen unglaublich viele verschiedene Icons zusammen.
das kann ich mir eigentlich nicht vorstellen.
Je Dateityp kann es nur ein Icon sein.

Ich habe mir die Icons mit Hilfe von SHGetFileInfo ausgelesen.
Das zurückgegebene Handle habe ich dann als "Objekt" in einer TObjectList gespeichert, damit ich per IndexOf schnell prüfen kann, ob ich das Icon schon geladen habe.
War es ein Neues Icon habe ich dieses dann per TIcon in einer ImageList gespeichert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 17:44
Es sind dennoch genug und ich möchte möglichst sparend arbeiten, je weniger Last desto besser.
Ich habe das eigentliche Zuweisen der Icons noch nicht eingebaut, es gibt nämlich den Fehler, es seien die Systemressourcen erschöüft. Warum ?
Delphi-Quellcode:
Icon := TIcon.Create;
GetExtIcon(Ext, Icon, False);
if Icons.IndexOf(Icon) = -1 then
  Icons.Add(Icon);
TreeData.fCaption := ExtractFileName(Directory+SR.Name);
TreeData.fTyp := GetExtDes(Ext, False);
AddVSTStructure(VST, nil, TreeData);
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:05
Moin Nils,

Zitat von Nils_13:
es gibt nämlich den Fehler, es seien die Systemressourcen erschöüft. Warum ?
Weil das hier:

if Icons.IndexOf(Icon) = -1 then immer zutrifft, da Du mit jedem TIcon.Create eine neue Adresse bekommst, also wirklich jedes Icon speicherst.

Deshalb speichere ich auch die Handles, die mir das System zurückliefert für den Vergleich.
Die sind bei gleichem Icon auch gleich
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#5

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:12
unabhängig von Cristians Anmerkungen ist es auch so, dass du die Instanz des Icons nicht wieder frei gibst wenn es schon vorhanden ist.
Delphi-Quellcode:
if Icons.IndexOf(Icon) = -1 then
  Icons.Add(Icon)
else
  FreeAndNil(Icon);
Abers selbst wenn du dies tätest würde es dir nichts bringen, da die neue Instanz eh nicht in der Liste zu finden ist, auch wenn sie gleich aussehen. Aus diesem Grund auch Christians Hinweis auf die Handels.

Gruß oki
42
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#6

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:14
Oh, das hätte ich wissen müssen. Und wie speicherst man Handles in Objektlisten ?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:16
Moin Nils,

Zitat von Nils_13:
Oh, das hätte ich wissen müssen. Und wie speicherst man Handles in Objektlisten ?
mittels TypeCast auf TObject.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:17
Warum soll es eigentlich eine TObjectList und keine TList sein?
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 18:21
Zitat von Apollonius:
Warum soll es eigentlich eine TObjectList und keine TList sein?
Gewohnheit
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#10

Re: VST: Massenweise verschiedene Icons schnell laden

  Alt 7. Jun 2008, 19:04
Ich habe nun eine TList und leider auch noch die oben genannte Fehlermeldung. Die Funktion GetExtIcon existiert nun bei mir in zwei Varianten, die hier genutzte steht im zweiten Kasten. Icon ist daher als HICON deklariert.
Delphi-Quellcode:
GetExtIcon(Ext, Icon, False);
Index := Icons.IndexOf(@Icon);
if Index = -1 then
begin
  Icons.Add(@Icon);
  TreeData.fIcon := Pred(Icons.Count);
end else
  TreeData.fIcon := Index;
Delphi-Quellcode:
function GetExtIcon(const Ext: String; var Icon: HICON; const FileMustExist: Boolean): Boolean;
var FI : TSHFileInfo;
    Attributes : DWORD;
    Flags : Word;
begin
  if FileMustExist then
  begin
    Attributes := 0;
    Flags := SHGFI_ICON or SHGFI_SMALLICON;
  end else
  begin
    Attributes := FILE_ATTRIBUTE_NORMAL;
    Flags := SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SMALLICON;
  end;

  if SHGetFileInfo(PChar(Ext), Attributes, FI, SizeOf(FI), Flags) <> 0 then
  begin
    Icon := FI.hIcon;
    Result := True;
  end else
    Result := False;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz