Seite 1 von 1

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

Verfasst: 05.12.2008 04:19
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 :)

Verfasst: 05.12.2008 08:03
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

Verfasst: 05.12.2008 13:52
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.