Die Idee ButtonImageGadget´s zu verwenden, wurde schon von vielen Foren-Autoren praktiziert und funktioniert ausgezeichnet. Beispiel:
Code: Alles auswählen
;- Beginn
Enumeration
#Window_0 : #Button_0 : #Button_1 : #Button_2 : #Button_3 : #Button_4
#Gadget_5 : #Gadget_6 : #Gadget_7 : #Shortcut_0 : #Shortcut_1
EndEnumeration
#ButtonStart = 99
Enumeration #ButtonStart + 1
#Knopf_0 : #Knopf_1 : #Knopf_2 : #Knopf_3
EndEnumeration
gold = RGB(255,215,0) : forest = RGB(34,139,34) : royal = RGB(60, 150, 200)
kingblue = RGB(60,15,255) : orange = RGB(205,133,0) : pink = RGB(139,10,80)
chartreuse = RGB(127,255,0) : gelb = RGB(253,250,150) : roetlich = RGB(255,48,48)
;- Prozeduren
Procedure.l MyLabeledImage(ImageNumber,width,height,Color,Datei$,Schrift)
ImageID = CreateImage(ImageNumber,width,height)
If StartDrawing(ImageOutput(ImageNumber)) : Box(0,0,width,height,Color)
Select Schrift ; Anzahl der Schriften kann vergrößert werden
Case 0 : FrontColor(RGB(255,215,0))
Case 1 : FrontColor(RGB(255,48,48))
Case 2 : FrontColor(RGB(0,0,51))
Case 3 : FrontColor(RGB(128,0,0))
Case 4 : FrontColor(RGB(34,139,34))
Case 5 : FrontColor(RGB(60,150,200))
Case 6 : FrontColor(RGB(255,255,255))
Case 7 : FrontColor(RGB(139,10,80))
Case 8 : FrontColor(RGB(60,15,255))
EndSelect
DrawingFont(#PB_Default) : DrawingMode(1)
If TextWidth(Datei$) < width : XPos = (width - TextWidth(Datei$)) / 2
Else : XPos = 4
EndIf
If TextWidth("M") < height : YPos = (height - TextWidth("M")) / 2 - 2
Else : YPos = 0
EndIf : DrawText(XPos,YPos,Datei$) : StopDrawing()
EndIf
ProcedureReturn ImageID
EndProcedure
Procedure ColoredButton(Nb,x,y,w,h,Datei$,ImageNumber,Color,i)
ButtonImageGadget(Nb,x,y,w,h,MyLabeledImage(ImageNumber,w,h,Color,Datei$,i))
EndProcedure
;- Main
hwnd = OpenWindow(#Window_0,0,0,200,250,"DefaultButton",#PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If hwnd And CreateGadgetList(hwnd)
brush.l = CreateSolidBrush_(royal)
SetClassLong_(hwnd,#GCL_HBRBACKGROUND,brush)
; ColoredButton(#Gadget, x, y, Breite, Hoehe, ImageID, Hintergrundfarbe, Schriftfarbe)
; ImageID braucht eine eigene ID (!), kann z. B. mit 1,2,3, ... usw.
; oder wie hier mit eigenen Konstanten (!) numeriert werden
ColoredButton(#Button_0,5, 5,190,25,"Button_0",#Knopf_0,orange,7)
ColoredButton(#Button_1,5,32,190,25,"Button_1",#Knopf_1,kingblue,4)
ColoredButton(#Button_2,5,59,190,25,"Button_2",#Knopf_2,forest,2)
ColoredButton(#Button_3,5,86,190,25,"Schließen (3)",4,gold,1)
ColoredButton(#Button_4,45,113,120,25,"Button_4",#Knopf_3,chartreuse,5)
StringGadget(#Gadget_5 ,5,140,190,20," StringGadget 5")
TextGadget(#Gadget_6 ,5,162,190,20," TextGadget 6")
ListViewGadget(#Gadget_7,5,184,190,65)
AddGadgetItem(#Gadget_7, -1, "Das ist ListViewGadget 7")
SetGadgetColor(#Gadget_5, #PB_Gadget_FrontColor, royal)
SetGadgetColor(#Gadget_5, #PB_Gadget_BackColor, gold)
SetGadgetColor(#Gadget_6, #PB_Gadget_FrontColor, pink)
SetGadgetColor(#Gadget_6, #PB_Gadget_BackColor, chartreuse)
SetGadgetColor(#Gadget_7, #PB_Gadget_FrontColor, kingblue)
SetGadgetColor(#Gadget_7, #PB_Gadget_BackColor, gelb)
SetActiveGadget(#Button_0)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Return,#Shortcut_0)
AddKeyboardShortcut(#Window_0,#PB_Shortcut_Escape,#Shortcut_1)
Repeat
event.l = WaitWindowEvent() : EventType.l = EventType()
Tastendr.l = EventGadget()
Select event
Case #PB_Event_Menu
Select EventMenu()
Case #Shortcut_0 ; Return
AddGadgetItem(#Gadget_7,-1,"<Return> gedrückt")
Case #Shortcut_1 : event = #PB_Event_CloseWindow ; Escape
EndSelect
EventType = #PB_EventType_LeftClick
EndSelect
If EventType = #PB_EventType_LeftClick
Select Tastendr
Case #Button_0
SetGadgetText(#Gadget_5,"Konstante "+Str(#Button_0))
SetGadgetText(#Gadget_6,"EventGadget "+Str(Tastendr))
AddGadgetItem(#Gadget_7,-1,"Button 0 gedrückt")
Case #Button_1
SetGadgetText(#Gadget_5,"Konstante "+Str(#Button_1))
SetGadgetText(#Gadget_6,"EventGadget "+Str(Tastendr))
AddGadgetItem(#Gadget_7,-1,"Button 1 gedrückt")
Case #Button_2
SetGadgetText(#Gadget_5,"Konstante "+Str(#Button_2))
SetGadgetText(#Gadget_6,"EventGadget "+Str(Tastendr))
AddGadgetItem(#Gadget_7,-1,"Button 2 gedrückt")
Case #Button_3 : event = #PB_Event_CloseWindow
Case #Button_4
SetGadgetText(#Gadget_5,"Pressed: 4")
SetGadgetText(#Gadget_6,"Gedrückt: 4")
AddGadgetItem(#Gadget_7,-1,"Button 4 gedrückt")
EndSelect
EndIf : Delay(15)
Until event = #PB_Event_CloseWindow
EndIf
;- Ende
End