SetGadgetColor() warum nicht für ButtonGadget()?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

SetGadgetColor() warum nicht für ButtonGadget()?

Beitrag von Delle »

Hallo,

weiß jemand warum ausgerechnet die Buttons davon ausgeschlossen sind?

Ich verwende zwar alternativ PureCOLOR_SetButtonColor aber das macht die .exe nur unnötig größer :)
PB 6.21 | Win 11
Dare Devil
Beiträge: 237
Registriert: 17.10.2008 18:24
Kontaktdaten:

Beitrag von Dare Devil »

Hey Delle,
Diese Funktion ist in PB nicht grundlos ausgeschaltet - da das collorieren von Buttons auch in der WinAPI AFAIK (!) nicht ohne weiteres moeglich ist.

Ich habe hier zwei Funktionen geschrieben, die das collorieren von Button Gadgets ermoeglicht (durch einen kleinen Trick, siehs dir einfach an :wink: )

Code: Alles auswählen

Procedure CreateColoredButton(Gadget, text$, x, y, width, height, FrontColor, BackColor)
newimage = CreateImage(#PB_Any, width, height)

StartDrawing(ImageOutput(newimage))
Box(0, 0, width, height, BackColor)

If TextWidth(text$) > width Or TextHeight(text$) > height
  ProcedureReturn 0
EndIf

newx = (width - TextWidth(text$)) / 2
newy = (height - TextHeight(text$)) / 2

DrawText(newx, newy, text$, FrontColor, BackColor)
StopDrawing()

ButtonImageGadget(Gadget, x, y, width, height, ImageID(newimage))
EndProcedure

Procedure SetColorAndTextOfAButton(Gadget, text$, FrontColor, BackColor)
width = GadgetWidth(Gadget)
height = GadgetHeight(Gadget)

newimage = CreateImage(#PB_Any, width, height)

StartDrawing(ImageOutput(newimage))
Box(0, 0, ImageWidth(newimage), ImageHeight(newimage), BackColor)

If TextWidth(text$) > width Or TextHeight(text$) > height
  ProcedureReturn 0
EndIf

newx = (width - TextWidth(text$)) / 2
newy = (height - TextHeight(text$)) / 2

DrawText(newx, newy, text$, FrontColor, BackColor)
StopDrawing()

SetGadgetAttribute(Gadget, #PB_Button_Image, ImageID(newimage))
EndProcedure


OpenWindow(0, 0, 0, 200, 200, "Farbige Buttons", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

CreateGadgetList(WindowID(0))

CreateColoredButton(0, "Klick mich!", 20, 20, 100, 30, 0, RGB(255, 0, 0))

Repeat
  EventID = WindowEvent()
  
  If EventID = #PB_Event_CloseWindow
    End
  ElseIf EventID = #PB_Event_Gadget
    If EventGadget() = 0
      SetColorAndTextOfAButton(0, "Werde Gruen!", 0, RGB(0, 255, 0))
    EndIf
  EndIf
ForEver
Der Text im Gadget wird automatisch zentriert. Wenn der Text aber groesser sein sollte, als das Gadget, dann wird das Gadget gar nicht erst erstellt - also immer erst pruefen :wink:

Mit SetColorAndTextOfAButton kannst du Farbe und Text eines Gadgets aendern, welches du zuvor mit CreateColoredButton() (oder auch ButtonImageGadget()) erstellt hast. Mit "normalen" Buttongadgets geht das aber nicht :wink:

Du kannst meine Funktionen natuerlich noch selbst etwas bei Bedarf bearbeiten - Fonts einfuegen, Zeilenumbruch ermoeglichen und und und
Bild + Bild

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

die "Button" class selber besitzt nicht die Möglichkeit.
auch im Visual Studio kannst du einem Button zwar eine andere Farbe zuordnen, es bleibt aber ohne Wirkung.

die Verwendung von PureCOLOR_SetButtonColor macht die exe nicht unnötig größer,
es ist neben der direkten Verwendung eines Images die einzige Möglichkeit.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten