icons laden [abgeschlossen]
icons laden [abgeschlossen]
hi PureBoard!
wenn ich einen File aussuchen möchte, dann wird das ja mit icon angezeigt...
jetzt möchte ich das Icon laden von einen File wie mache ich das?
also: ich habe den Dateinamen, und den pfad dorthin, und möchte das Bild als image oder sprite oder texture laden wie geht das?
vielen Dank!
wenn ich einen File aussuchen möchte, dann wird das ja mit icon angezeigt...
jetzt möchte ich das Icon laden von einen File wie mache ich das?
also: ich habe den Dateinamen, und den pfad dorthin, und möchte das Bild als image oder sprite oder texture laden wie geht das?
vielen Dank!
Zuletzt geändert von Brügge am 28.04.2008 13:55, insgesamt 1-mal geändert.
- man-in-black
- Beiträge: 362
- Registriert: 21.08.2006 17:39
ich hab mal schnell gesucht und gefunden
(hoffentlich ist es das richtige
):
http://www.purebasic.fr/german/viewtopi ... t=exe+file
MFG,
MIB
(hoffentlich ist es das richtige

http://www.purebasic.fr/german/viewtopi ... t=exe+file
MFG,
MIB
versuch´s mal hiermit:
viel Erfolg...
Code: Alles auswählen
;IconNr=0-basierender Index des Bildchens in der Datei (1. Icon = IconNr 0!!)
; Shell32.dll enthält 176 Icon´s, in Deinem Fall mal mit 0 bis 5 ausprobieren...
;FileName$ = vollständiger DateiName der Datei, die ´n Icon enthält
IconID.l ;AblagePlatz für das IconHandle
ExtractIconEx_(FileName$, IconNr, @IconID, 0, 1) ;grosses Icon (z.Bsp. 16x16)
:ExtractIconEx_(FileName$(), IconNr, 0, @IconID, 1) ;kleines Icon (z. Bsp 32x32)
ButtonImageGadget(i, x, y, b, h, IconID) ;Anwendungs-Beispiel


- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Es reicht auch die LoadIcon_ API (LoadImage_ bietet aber mehr optionen)
Als erstes wird die entsprechende Exe wie eine DLL geladen, um ein handle
zu erhalten (in diesem Beispiel die PureBasic.exe)
Danach wird das Icon mit Namen oder ResourceID (der ist immer eine Raute
voranzustellen) geladen. Der Rest im Beispiel, das ich der PB-Hilfe
entnommen und angepaßt habe.
Als erstes wird die entsprechende Exe wie eine DLL geladen, um ein handle
zu erhalten (in diesem Beispiel die PureBasic.exe)
Danach wird das Icon mit Namen oder ResourceID (der ist immer eine Raute
voranzustellen) geladen. Der Rest im Beispiel, das ich der PB-Hilfe
entnommen und angepaßt habe.
Code: Alles auswählen
EnableExplicit
Define.l EventID, Quit, Icon, hWndPB
hWndPB = OpenLibrary(0, #PB_Compiler_Home + "PureBasic.exe")
If hWndPB
Icon = LoadIcon_(hWndPB, @"#1"); erstes icon!
EndIf
If OpenWindow(0, 100, 200, 195, 260, "ToolBar example", #PB_Window_SystemMenu | #PB_Window_SizeGadget)
If CreateToolBar(0, WindowID(0))
ToolBarStandardButton(0, #PB_ToolBarIcon_New)
ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
ToolBarSeparator()
ToolBarStandardButton(3, #PB_ToolBarIcon_Print)
ToolBarToolTip(0, 3, "Print")
ToolBarStandardButton(4, #PB_ToolBarIcon_Find)
ToolBarToolTip(0, 4, "Find a document")
ToolBarSeparator()
If Icon
ToolBarImageButton(5, Icon)
EndIf
EndIf
If CreateMenu(0, WindowID(0))
MenuTitle("Project")
MenuItem(0, "New")
MenuItem(1, "Open")
MenuItem(2, "Save")
EndIf
;
; Attach our previously created ToolBar to this window
;
DisableToolBarButton(0, 2, 1) ; Disable the button '2'
;
; The event loop. A ToolBar event is like a Menu event (as tools are shortcut for menu the most
; of the time). This is handy, as if the ToolBar buttons and the MenuItem have the same ID, then
; the same operation can be done on both action without any adds..
;
Repeat
EventID = WaitWindowEvent()
;Debug EventID
;Debug EventGadgetID()
Select EventID
Case #PB_Event_Menu
MessageRequester("Information", "ToolBar or Menu ID: "+Str(EventMenu()), 0)
Case #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndSelect
Until Quit = 1
EndIf
End ; All the opened
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Dies liegt daran, daß es das Icon als Ressource #1 nicht in jeder Datei gibt, weil die Nummerierung willkürlich ist. Mit PureBASIC.Exe als Ressource wie in ts-softs Beispiel funktioniert dies, nicht aber z.B. mit der in jeder Windows-Version vorhandenen System-Datei User32.DLL, die mit #100 beginnt.Brügge hat geschrieben:hi so ganz funktioniert das nicht...
bei manchen icons mach der das, bei anderen nicht. woran liegt das?
Die Ressourcen-Nummer kann man entweder mit dem ResourceHacker (http://www.angusj.com/resourcehacker) oder direkt über PureBASIC durch Modifikation meines Code-Beispiels (http://www.purebasic.fr/german/viewtopi ... 01&start=4) ermitteln, das alle Icons einer Datei mitsamt Ressourcen-Nummer anzeigt.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Ein letzter Hinweis noch
ExtractIconEx_ funktioniert im allgemeinen natürlich auch, hat aber den
Nachteil, das gepackte Resourcen (UPX usw.) nicht gefunden werden.
Bei LoadIcon_ sind diese aber bereits im Speicher entpackt.

ExtractIconEx_ funktioniert im allgemeinen natürlich auch, hat aber den
Nachteil, das gepackte Resourcen (UPX usw.) nicht gefunden werden.
Bei LoadIcon_ sind diese aber bereits im Speicher entpackt.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
