Registriert seit: 6. Jan 2005
664 Beiträge
|
Beim Programmstart geht es, im Thread nicht?
30. Jan 2011, 11:34
Hallo,
ganz komisches Problem bei dem ich keine Idee habe. Vielleicht könnt Ihr mir helfen:
Ich habe mir eine Laufwerksleiste gebastelt, die eigentlich ganz ausgezeichnet funktioniert.
Die nötigen zusätzlichen Daten (z. Bsp. die Laufwerksiconen) wurden zuerst direkt (seriell im Programmabschnitt) ermittelt. Das ging sowohl beim Programmstart als auch bei Devicechange (Devicearrival) problemlos.
Nun habe ich aber von Microsoft die Empfehlung gelesen, dass man das möglichst per Thread machen sollt, um das Devicechange nicht zu überfrachten.
Also habe ich einen Thread gebastelt.
Der wird auch beim Programmstart für jedes Laufwerk ordentlich aufgerufen und baut alles, auch die richtigen Iconen richtig zusammen.
Aber nicht bei Devicearrival.
Er arbeitet mit (ImageIndex und hint sind vom erweiterten TButton)
ImageListHandle:=SHGetFileInfo(pchar(pidl),0,Finfo ,
sizeof(TSHFILEINFO),
SHGFI_PIDL or SHGFI_SysIconIndex or SHGFI_Icon or SHGFI_Smallicon or
SHGFI_displayname);
ImageIndex:=FInfo.iicon;
hint:=FInfo.szDisplayName;
szDisplayname, Typename funktionieren alle dufte. Nur das Icon kriegt er einfach nicht und wählt da ein Standardicon.
Frage(n):
Warum geht das zwar beim Programmstart richtig, aber nicht in Devicearrival?
Warum geht das beim Programmstart, aber nicht im Thread aus dem Programm?
Warum geht das nur für das Icon nicht, alles andere wird mit der gleichen Funktion im Thread aber ordentlich gesetzt?
Was kann man da tun?
Gruß
Matthias
|