Seite 1 von 1
OptionGadget Hintergrundfarbe
Verfasst: 15.07.2012 22:24
von TKRoth
Ich verwende in einem Programm diverese OptionGadget auf diversen eingefärbten Fenstern. Nun wird bei diesen Gadgets aber immer als Hintergrundfarbe die Standardfarbe von Windows verwendet. Ich bräuchte hier einen Kniff, der auch bei OptionGadgets die H-Farbe ändert.
Auf RSBasic gibt es eine Routine. Aber diese ist ja fest auf eine GadgetID festgelegt. Ich müsste extra eine Tabelle anlegen, wo alle Gadgets durchgeprüft werden. Gibt es da nichts Einfacheres?
Re: OptionGadget Hintergrundfarbe
Verfasst: 16.07.2012 00:12
von Derren
Hast du mal nen Link zu dem Code von RSBasic (bzw. auf seiner Seite)?
Ich denke nicht, dass du irgendwelche Listen erstellen musst.
Versuch mal BefehlX(GadgetID(#OptionGadget), color etc...)
Re: OptionGadget Hintergrundfarbe
Verfasst: 16.07.2012 00:42
von TKRoth
Hier der Code von RSBasic:
Code: Alles auswählen
EnableExplicit
Define EventID
Global color = CreateSolidBrush_(RGB(255,0,0))
Procedure myCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_CTLCOLORSTATIC
If lparam = GadgetID(1)
ProcedureReturn color
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OptionGadget(1,10,10,200,20,"Link")
SetWindowCallback(@myCallback())
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
DeleteObject_(color)
End
EndIf
ForEver
EndIf
Re: OptionGadget Hintergrundfarbe
Verfasst: 16.07.2012 03:56
von Derren
Ok, also diese Zeile ist die entscheidende:
If lparam = GadgetID(1)
Anstatt 1 müssen dort alle GadgetIDs von deien OptionGadgets rein.
Ich habe das jetzt mit
Enumeration gelöst.
Für den Fall, dass du deine OptionGadgets dynamisch erstellst, musst du die ID tatsächlich in einer Liste speichern. Aber das muss du dann so oder so. Sonst kommst du ja nicht an die Daten ran.
Code: Alles auswählen
EnableExplicit
Enumeration
#Option1
#Option2
#Option3
EndEnumeration
Define EventID
Global color = CreateSolidBrush_(RGB(255,0,0))
Procedure myCallback(hWnd, uMsg, wParam, lParam)
Protected n.i ;LaufVariable
Select uMsg
Case #WM_CTLCOLORSTATIC
For n = #Option1 To #Option3
If lparam = GadgetID(n)
ProcedureReturn color
EndIf
Next
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OptionGadget(#Option1,10,10,200,20,"Link 1")
OptionGadget(#Option2,10,40,200,20,"Link 2")
OptionGadget(#Option3,10,70,200,20,"Link 3")
SetWindowCallback(@myCallback())
Repeat
EventID=WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
DeleteObject_(color)
End
EndIf
ForEver
EndIf
Re: OptionGadget Hintergrundfarbe
Verfasst: 16.07.2012 11:29
von ts-soft
Code: Alles auswählen
Global color = CreateSolidBrush_(RGB(255,0,0))
Procedure myCallback(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_CTLCOLORSTATIC
If GadgetType(GetDlgCtrlID_(lParam)) = #PB_GadgetType_Option
ProcedureReturn color
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
reicht auch

Re: OptionGadget Hintergrundfarbe
Verfasst: 16.07.2012 13:59
von TKRoth
@TS-Soft:
1 Mio x Danke. Das war der Kniff nachdem ich gesucht habe. Aber nu muss ich leider noch etwas arbeiten und kann nicht weiter proggen
