icons laden [abgeschlossen]

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

icons laden [abgeschlossen]

Beitrag 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!
Zuletzt geändert von Brügge am 28.04.2008 13:55, insgesamt 1-mal geändert.
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Beitrag 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
(hab alles, kann alles, weiß alles!!^^)

Bild
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

jo vielen dank!!!!

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


THX !!
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

hmm :?

wie komme ich denn da nur an das Bild?


ok habs geschafft ^^ THX!!
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Beitrag 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...
Bild Bild
Benutzeravatar
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

Beitrag 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
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.
Bild
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

ok thx!

alles klappt jetzt ^^

vielen Dank!
Benutzeravatar
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

Beitrag 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.
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.
Bild
Antworten