| |
|
|
| Hallo Frank KompilierenMarkierenSeparieren Das ist die Zeile, mit dem die Image-Liste in mein Programm eingeladen wird. Funktioniert auch bestens. Jetzt hab ich aber auf Grund eines Tipps von J. Sellmeier festgestellt, dass manchmal nicht richtig gezeigt wird. Liegt das an der Systemeinstellung oder kannst Du das noch ein bischen verfeinern ? - Es geht in erster Linie um die LNK-Dateien. Wenn ich mit dem Kurzcode von PRFellow eine LNK-.Datei aufrufe, zeigt mir der Text das Icon der mit der LNK-Datei verknüpften Anwendung. Könnte das in Deiner DLL auch möglich gemacht werden ? Hier der Code: KompilierenMarkierenSeparierenPRFellow-Vorlage
Autor: Thomas Hölzer
Das Handle des mit einer Programm- oder Datendatei verbundenen
Icons ermitteln
Benötigt unbedingt Profan 6.1 (32) wg. Addr-Funktion
Besonders nett: Wenn die Datei nicht existiert oder der
Iconindex (3.Parameter) nicht stimmt, wird ein Standardicon
geliefert. Das Ergebnis der Proc steht in @&(0)
Def w32_ExtractAssociatedIcon(3) !"SHELL32","ExtractAssociatedIconA"
declare x#
Proc ExtractAssociatedIcon
Parameters f$,i&
Declare h&
Dim x#,255
String x#,0=f$
Let i&=1
Let h&=w32_ExtractAssociatedIcon(%hinstance,x#,Addr(i&))
Dispose x#
Return h&
EndProc
Beispiele
Def w32_DrawIcon(4) !"USER32","DrawIcon"
Cls
WindowTitle "Icons von AUTOEXEC.BAT und unbekannter Datei"
ExtractAssociatedIcon "C:\AUTOEXEC.BAT",1
w32_DrawIcon(%hdc,100,100,&(0))
ExtractAssociatedIcon "C:\Mozilla Thunderbird.lnk" Normal ist die Datei im DESKTOP
Hier habe ich sie für Test-Zwecke auf die Festplatte kopiert
w32_DrawIcon(%hdc,150,100,&(0))
WaitInput
...und hier ein Ausschnitt aus meiner DESKTOP-Anzeige mit Der LISTVIEW.DLL |
|
|
| |
|
|
|
Frank Abbing | CreateImageList() mit Flag 1 holt den Handle der System-Imagelist. Also die Liste, mit der das System arbeitet mit den zu diesem Zeitpunkt darin liegenden Icons. Du kannst aber jederzeit eine eigene Imagelist aufbauen, mit allen Icons, die du benötigst. Einige nötigen Definitionen dazu befinden sich bereits in der Datei Listview_Funktionen.inc. Wie man eine eigene Imageliste benutzt, zeigt z.B. das Listview-Demo Gezeichnete_Bitmap_einbauen.prf. Benutzt du hingegen FilelistToCsv() und möchtest du die Linked Icons anzeigen, dann schalte einfach Flag $200 dazu. Das verzögert allerdings die Ausführung um ca. das Doppelte. |
|
|
| |
|
|
|
| @Frank [quote:dc7b1fb0f0]Benutzt du hingegen FilelistToCsv() und möchtest du die Linked Icons anzeigen, dann schalte einfach Flag $200 dazu. Das verzögert allerdings die Ausführung um ca. das Doppelte.[/quote:dc7b1fb0f0] Hier ist ein Auszug aus meinem Text. Original übernommen aus der Anleitung und andere Listview-Variablen eingebaut. Als erstes frage ich mich schon immer, wie die 31 zusammen kommt. Mit den Werten aus der Anleitung komme ich nur bis 25 - ? - Wenn ich jetzt 200 dazugebe, wird die Anzeige total zum Chaos ? - Was läuft da schief ? KompilierenMarkierenSeparierenbytes&=FilelistToCsv(addr(text$),bereich#,0,0,31,icons#)
x&=SetColumnsFromMem(LINKS_VIEW&,bereich#,addr(spalte%))
CsvToListview(LINKS_VIEW&,(bereich#+spalte%),(bytes&-spalte%),x&)
z&=GetLines(LINKS_VIEW&)
SetIconsFromMem(LINKS_VIEW&,0,icons#,z&)
Ein ziehmlich fertiger horst
Nachtrag: Im Explorer-Demo in den Beispieltexten steht an gleicher Stelle $11f und auch hier sind neutrale Icons in der Ansicht ? |
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo Horst, Du mußt nicht 200 sondern $200 dazuaddieren. $200 ist Hex$(512). |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 16.11.2006 ▲ |
|
|
|
|
Frank Abbing | |
|
| |
|
|
|
| @Danke Jörg - aber ich habe einen Umrechner für die Hex-Werte
@Frank - nicht so dreckig grinsen KompilierenMarkierenSeparierenbytes&=FilelistToCsv(addr(text$),bereich#,0,0,($1+$2+$4+$8+$10+$200),icons#)
bytes&=FilelistToCsv(addr(text$),bereich#,0,0,(543),icons#)
Beide Schreibweisen haben keinerlei Auswirkung. Nun meine ich aber, irgendwann hätte mein Programm die Icons angezeigt. Werde heute mittag (muss zum Arzt ) PROFAN-9 einrichten und damit versuchen. Vielleicht gibt es eine Diskrepanz (schönes Wort) zwischen Listview.dll und XProfan-10 ? |
|
|
| |
|
|
|
Jörg Sellmeyer | Hallo Horst, Ich habe jetzt die Filtermöglichkeiten der Dll nicht im Kopf, aber Du kannst vielleicht lnk-Dateien erst mal ausnehmen und dann nachträglich einfügen und die Icons mit dem Code von Prfellow dazupacken. Das verlangsamt den Code natürlich, da Du bei jedem Verzeichniswechsel checken mußt, ob solche Dateien vorhanden sind. Vielleicht löst sich das Problem ja auch noch von allein... |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 17.11.2006 ▲ |
|
|
|
|
Frank Abbing | Der Flag dient in erster Linie Exe-Dateien, damit das Icon der Exe angezeigt wird und nicht das Standarticon. Ich weiss aber, dass es auch mit ähnlichen Dateien funktioniert. Ob es mit Lnk-Dateien auch geht, habe ich nie getestet und hab an diesem Computer auch nicht die Möglichkeit dazu (ist kein Profan und MASM installiert).
...und - ich grinse nie fies... ;D |
|
|
| |
|
|
|
| @Frank [quote:84ccfeb126]...und - ich grinse nie fies... happy[/quote:84ccfeb126] Antwort - siehe Bild.... |
|
|
| |
|
|
|
Frank Abbing | ...meinst du etwa das moralisch unterstützende Zähneblecken?
|
|
|
| |
|
|
|
Jörg Sellmeyer | Wenn hier einer grinst, dann doch wohl ich, oder? |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 17.11.2006 ▲ |
|
|
|
|
Frank Abbing | Hallo,
hab mal ein bischen experimentiert und nachgelesen. Die Sache mit den Lnk-Dateien ist etwas komplizierter als gedacht. Hierbei ist nicht das Problem, an das linked-Icon zu kommen, sondern dieses zu archivieren. Dazu muss man wissen, dass ein Listview (mit Icons) an eine Imagelist gebunden ist und keine freien Icons verwenden kann. Nur Icons, die sich in der Imageliste befinden, können verwendet werden. FilelistToCsc() benutzt hierzu die Systemimageliste. Das Dazufügen, Wegnehmen und Freigeben von Icons ist aber mit einer Dll-Funktion, die alles in einem Rutsch ausliest und erst dann an eine grafische Routine übergibt, zu aufwendig. Dazu muss ich mir erstmal Gedanken machen. Du wirst also zunächst ohne die Link-Icons auskommen müssen.
Der Flag $200 ist in dieser Form auch nur eine Krücke, weil sich die Systemimageliste fortwährend ändern kann und das zu Fehlern führen kann. Das werde ich so noch nicht lassen, sodass ich darum bitte, dieses Flag nicht unbedingt zu benutzen. Da wird sich was ändern.
Und wenn ich schon dabei bin, werde ich auch grosse Icons gleich mit einbeziehen. |
|
|
| |
|
|