Entwickler-Ecke
Dateizugriff - ExtractIcon Problem!
DelphiNoob - Mo 24.03.03 18:00
Titel: ExtractIcon Problem!
Hi,
ich bin gerade dabei mittels ExtractIcon() ein Icon aus der eigenen Programmdatei zu extrahieren, und im ListView für Items zu verwenden.
Momentan sieht der Code wie folgt aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| listitem:TListitem; icon: TIcon; anzicon: integer;
...
ExtrFileName = 'F:\Project1.exe';
...
listitem:=ListView1.Items.Add; icon:=TIcon.create; anzicon:=ExtractIcon(hinstance,PChar(ExtrFileName),Cardinal(-1)); icon.handle:=ExtractIcon(hinstance,PChar(ExtrFileName),anzicon); listitem.Imageindex:=ImageList1.AddIcon(icon); icon.Free; |
Leider funktioniert das nicht so wie ich will. Ich hab auch schon verschiedene Varianten ausprobiert. Mal ohne Cardinal() bei "-1", mal mit wie oben beschrieben. Mal anstatt "anzicon" einfach eine Zahl genommen.
Auch mal "anzicon" mit Cardinal().
Im Listview1 ist auch die ImageList1 bei den Icons eingetragen, also da liegt der Fehler auch nicht.
Vielleicht sollte ich noch erwähnen: Das Icon was ich benötige ist nicht das MAINICON! Sondern ein Icon was ich mittels Resource Datei eingespeist habe. Und ich bin auch sicher das dass Icon eingebaut wird beim compilieren, da shabe ich überprüft.
Hoffe auf schnelle Hilfe.
Mfg
DelphiNoob
DelphiNoob - Mo 24.03.03 20:52
*däumchen dreh*
*g*
Aya - Di 25.03.03 00:54
Hi,
wieso so umständlich? :)
Wenn du das Icon doch in einer Resource drin hast.. mach es einfach so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var Icon: TIcon; begin Icon:=TIcon.Create; Icon.LoadFromResourceName(hInstance,'MYICON'); ImageList.AddIcon(Icon); Icon.Free; end; |
Au'revoir,
Aya~
DelphiNoob - Di 25.03.03 11:56
ähm ja... also
nur damit ich das nachvollziehe:
Lade ich das Icon dann immer aus einer *.res file? Die wird doch in die EXE eingebaut, somit brauch ich die im fertigen Programm nicht mehr.
Und "MYICON", ist das jetzt nur ne bezeichnung so für das Beispiel oder was ist das?
DelphiNoob - Di 25.03.03 12:05
Achso, und: LoadFromResourceName kennt er erst garnicht. Obwohl es in der Hilfe steht... ich habs auch nochmal überprüft, aber er rafft es nicht.
Delete - Di 25.03.03 12:59
| DelphiNoob hat folgendes geschrieben: |
| Lade ich das Icon dann immer aus einer *.res file? Die wird doch in die EXE eingebaut, somit brauch ich die im fertigen Programm nicht mehr. |
Du lädtst damit das Symbol aus den Ressourcen deiner Exe, quasi: aus der eingebauten RES-Datei.
| Zitat: |
| Und "MYICON", ist das jetzt nur ne bezeichnung so für das Beispiel oder was ist das? |
Das ist der Name des Icons, den du in der Ressourcendatei angegeben hast. Etwa
Quelltext
1:
| STOPBILD ICON "stop.ico" |
"STOPBILD" wäre hierbei der Name (pchar bzw. String) des Icons. Das gilt auch für Zahlen, sprich: wenn du die Icons in der RES-Datei nummerierst, dann sind das keine echten Zahlen sondern eher mit Strings vergleichbar:
und
nicht
| Zitat: |
| Obwohl es in der Hilfe steht. |
Ist wahrscheinlich nur ein Tippfehler. Guck mal ob du evtl. ein R zuviel drin hast, o.ä.
DelphiNoob - Di 25.03.03 13:10
@MathiasSimmack
Danke für deine Aufklärung! Immer wieder nett!
Und wegen dem Tippfehler: Ich hab es sogar direkt aus der Hilfe rauskopiert, also das "LoadFromResourceName". Hab ich vieleicht ne Unit einzubinden? Also "Graphics" ist unter den "uses", und die ist für Icons ja eigentlich nötig.
Plz help *heul*
Aber ich poste nochmal den momentanen Code:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| icon:=TIcon.create; try icon.LoadFromResourceName(hInstance,'120'); finally listitem.Imageindex:=ImageList1.AddIcon(icon); end; icon.free |
Info: Das Icon in der Res File hat die Nr. 120.
Mfg
DelphiNoob
Delete - Di 25.03.03 15:02
Hm, ich habe gerade mal mein Delphi 5 angeschmissen, und da gibt´s diese Funktion gar nicht. Alternativ mach dies:
Quelltext
1:
| icon.Handle := LoadIcon(hInstance,'120'); |
nach dem Erstellen (icon := TIcon.Create) desselben. Das sollte eigentlich funktionieren, weil "LoadIcon" eine API-Funktion aus der Windows-Unit ist.
DelphiNoob - Di 25.03.03 15:06
Hab ich auch nicht! Ich hab hier Delphi7, da steht mir folgendes mit "Load..." zu verfügung:
LoadFromClipboardFormat
LoadFromStream
LoadFromFile
Das ursprüngliche LoadFronResourceName ist aber in der Hilfe in zusammenhang mit TIcon angegeben! Das MUSS es doch geben!
*FLUCH, GRUMMEL*
DelphiNoob - Di 25.03.03 15:09
Wenn ich allerdings ne Bitmap oder so laden möchte, da existiert "LoadFromResourceName". (Also bei TBitmap)
wulfskin - Di 25.03.03 16:11
| DelphiNoob hat folgendes geschrieben: |
Hab ich auch nicht! Ich hab hier Delphi7, da steht mir folgendes mit "Load..." zu verfügung:
LoadFromClipboardFormat
LoadFromStream
LoadFromFile
Das ursprüngliche LoadFronResourceName ist aber in der Hilfe in zusammenhang mit TIcon angegeben! Das MUSS es doch geben!
*FLUCH, GRUMMEL* |
Versuch es trotzdem mal mit
LoadIcon ;)! Dies ist keine Methode von TIcon sondern eine WinApi-Methode die in der Unit
Windows deklariert ist.
Gruß wulfskin!
DelphiNoob - Di 25.03.03 16:18
Nu hab ich euch alle Lieb ;)
DANKEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE!
Zur vervollständigung:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| icon: TIcon;
...
icon:=TIcon.create; try icon.handle:=(LoadIcon(hInstance,'MYICON')); listitem.Imageindex:=ImageList1.AddIcon(icon); finally icon.Free; end; |
Mfg
DelphiNoob
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!