Seite 4 von 6

Verfasst: 31.03.2007 15:50
von Fluid Byte
Eine Lösung fuer alle Versionen waere dann wohl wirklich selber,
ueber wm_paint, zu malen.
Darauf wirds wohl hinauslaufen. Außerdem habe ich grad' bemerkt das dein Code zwar mit #BS_ICON auf XP funktioniert aber der Button im Classic Look dargestellt wird. Ich kenne dieses Problem noch sehr gut von früheren PB Versionen aber mich würde interessieren wie's Fred gelöst hat.

Verfasst: 01.04.2007 01:48
von Konne
Indem er #BS_BITMAP statt #BS_Icon benutzt.
Ne spaß ka.

Also ich habe hier mal ein wenig API zusammengekodet und bei mir (Windows XP) tut es einwandfrei.

Code: Alles auswählen


#BCM_FIRST = $1600
#BCM_SETIMAGELIST = #BCM_FIRST + 2
#BUTTON_IMAGELIST_ALIGN_LEFT = 0

#Window = 1
#Button = 1
#Icon=1

Structure _BUTTON_IMAGELIST
  himl.l
  margin.RECT
  uAlign.l
EndStructure

;on my Computer the PB Version creates a compiler error.
OpenLibrary(1,"comctl32.dll")
Prototype ImageList_AddIcon(List,Icon)
Global ImageList_AddIcon.ImageList_AddIcon
ImageList_AddIcon=GetFunction(1,"ImageList_AddIcon")

Procedure AddIconToButton(ButtonID,IconID,w=16,h=16)
  Protected buttonImgList._BUTTON_IMAGELIST

  himlIcons = ImageList_Create_(w,h, #ILC_MASK |#ILC_COLOR32, 1, 0)
      
  ImageList_AddIcon(himlIcons, IconID)

  With buttonImgList
    \uAlign = #BUTTON_IMAGELIST_ALIGN_LEFT
    \margin\top = 3
    \margin\bottom = 3
    \margin\left = 3
    \margin\right = 3
    \himl = himlIcons
  EndWith
    
  SendMessage_(ButtonID, #BCM_SETIMAGELIST, 0, buttonImgList)  
EndProcedure

InitCommonControls_()

If OpenWindow(#Window, 100, 100, 250, 200, "Icon Button by Konne", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#Window))
    ButtonGadget(#Button, 75, 50, 120, 42, "Run Program", #PB_Button_Left)
    
    ;LoadImage(#Icon,"Icon.ico")    
    AddIconToButton(GadgetID(#Button),LoadIcon_(0,#IDI_APPLICATION),32,32);ImageID(#Icon),32,32)

  Repeat : Until WaitWindowEvent()= #PB_Event_CloseWindow
EndIf


Verfasst: 01.04.2007 09:35
von Thomas
Danke!,
muss ihn aber erst noch ausprobieren :mrgreen:

(Ist aber nicht zufällig ein April-Scherz, oder?! :?)

Verfasst: 01.04.2007 10:43
von Leonhard
Konne hat geschrieben:

Code: Alles auswählen

[...]

;on my Computer the PB Version creates a compiler error.
OpenLibrary(1,"comctl32.dll")
Prototype ImageList_AddIcon(List,Icon)
Global ImageList_AddIcon.ImageList_AddIcon
ImageList_AddIcon=GetFunction(1,"ImageList_AddIcon")

[...]
Warum schreibst du extra nen Teil, wo du ImageList_AddIcon einlädst, wo du ImageList_AddIcon_ schreiben kannst?

Verfasst: 01.04.2007 11:10
von ts-soft
>> Warum schreibst du extra nen Teil, wo du ImageList_AddIcon einlädst, wo du ImageList_AddIcon_ schreiben kannst?
Weil er Prototypes anzuwenden weiß :wink:

Verfasst: 01.04.2007 12:13
von Konne
Ist der Kommentar so schwer zu verstehen. Ich kriege einen Linker Error bei mir, warscheinlich weil ich komische Libs hab. Und da ich die nicht entfernen wollte etc hab ichs halt kurz selber gekodet.
Wer will (und bei wem es tut kann das gerne entfernen und ein _ einfügen).

Verfasst: 01.04.2007 12:33
von ts-soft
Achso ist das gemeint, bei mir funzt es auch mit _ :wink:

Verfasst: 01.04.2007 16:16
von mk-soft
TOP :allright:

Sehe ich das richtig das es erst mit XP und eingeschaltenden XP-Style funktioniert?

FF :wink:

Verfasst: 01.04.2007 16:23
von ts-soft
>> Sehe ich das richtig das es erst mit XP und eingeschaltenden XP-Style funktioniert?
Jetzt hab ich es auch gemerkt :(

Verfasst: 03.04.2007 19:59
von Thomas
Gibts da auch was reguläres?
(egal welche Windows-Version und egal ob XP-Style, oder nicht)