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 :wink:

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 :cry: