Seite 1 von 1

icons laden [abgeschlossen]

Verfasst: 25.04.2008 22:09
von Brügge
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!

Verfasst: 25.04.2008 22:43
von man-in-black
ich hab mal schnell gesucht und gefunden
(hoffentlich ist es das richtige :D ):

http://www.purebasic.fr/german/viewtopi ... t=exe+file

MFG,
MIB

Verfasst: 25.04.2008 22:47
von Brügge
jo vielen dank!!!!

wieso findet ihr das immer und ich nicht? :lol:


THX !!

Verfasst: 25.04.2008 22:53
von Brügge
hmm :?

wie komme ich denn da nur an das Bild?


ok habs geschafft ^^ THX!!

Verfasst: 26.04.2008 11:00
von sibru
versuch´s mal hiermit:

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

viel Erfolg...

Verfasst: 26.04.2008 12:01
von ts-soft
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.

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

Verfasst: 27.04.2008 16:51
von Brügge
hi so ganz funktioniert das nicht...

bei manchen icons mach der das, bei anderen nicht. woran liegt das?
ich gebe den genauen pfad an aber der kann das Icon nicht laden

Verfasst: 28.04.2008 11:29
von Shardik
Brügge hat geschrieben:hi so ganz funktioniert das nicht...

bei manchen icons mach der das, bei anderen nicht. woran liegt das?
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.

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.

Verfasst: 28.04.2008 13:54
von Brügge
ok thx!

alles klappt jetzt ^^

vielen Dank!

Verfasst: 28.04.2008 14:07
von ts-soft
Ein letzter Hinweis noch :wink:
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.