Icon in ButtonTextGadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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

Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Danke!,
muss ihn aber erst noch ausprobieren :mrgreen:

(Ist aber nicht zufällig ein April-Scherz, oder?! :?)
v6.00
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag 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?
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 »

>> Warum schreibst du extra nen Teil, wo du ImageList_AddIcon einlädst, wo du ImageList_AddIcon_ schreiben kannst?
Weil er Prototypes anzuwenden weiß :wink:
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
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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).
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 »

Achso ist das gemeint, bei mir funzt es auch mit _ :wink:
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
Benutzeravatar
mk-soft
Beiträge: 3846
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

TOP :allright:

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

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
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 »

>> Sehe ich das richtig das es erst mit XP und eingeschaltenden XP-Style funktioniert?
Jetzt hab ich es auch gemerkt :(
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
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Gibts da auch was reguläres?
(egal welche Windows-Version und egal ob XP-Style, oder nicht)
v6.00
Antworten