SetWindowCallback und Hintergrundfarbe von TextGadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
Ara
Beiträge: 32
Registriert: 29.08.2004 13:40

SetWindowCallback und Hintergrundfarbe von TextGadget

Beitrag von Ara »

Ich habe ein kleines Problem,
wenn ich SetWindowCallback verwende und ein TextGadget aus und wieder einblende, verschwindet die Hintergrundfarbe des Textes.

Vielleicht kann mir jemand helfen, wie man es besser macht.
Hier ein kleines sinnloses Beispiel, in den man es sieht.

Code: Alles auswählen

EnableExplicit

Enumeration Window
	#TestFenster
EndEnumeration

Enumeration Gadgets
	#TestFenster_Cont_links
	#TestFenster_Txt_links
	#TestFenster_ScrlBar_links
	#TestFenster_Check_links
	#TestFenster_Cont_rechts
	#TestFenster_Txt_rechts
	#TestFenster_ScrlBar_rechts
	#TestFenster_Check_rechts
	#TestFenster_Btn_verstecke_links
	#TestFenster_Btn_vestecke_rechts
EndEnumeration

Enumeration Font
	#TestFenster_Font_0
	#TestFenster_Font_1
EndEnumeration

LoadFont(#TestFenster_Font_0, "Arial", 14)
LoadFont(#TestFenster_Font_1, "Arial", 22)


Procedure myCallback(hWnd, uMsg, wParam, lParam)
	Select uMsg   
		Case #WM_CTLCOLORSTATIC
			If hWnd = GadgetID(#TestFenster_Cont_links)
				ProcedureReturn CreateSolidBrush_(RGB(153, 217, 201))
			ElseIf hWnd = GadgetID(#TestFenster_Cont_rechts)
				ProcedureReturn CreateSolidBrush_(RGB(224, 188, 133))
			EndIf
			
		Case #WM_CTLCOLORSCROLLBAR
			ProcedureReturn CreateSolidBrush_(RGB(240, 130, 50))
			
	EndSelect
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure Open_TestFenster(X = 0, Y = 0, Width = 800, Height = 600)
	If OpenWindow(#TestFenster, X, Y, Width, Height, "Hintergrundfarbe vom TextGadget verschwindet", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_WindowCentered)
		SetWindowColor(#TestFenster, RGB(137, 162, 224))
		ContainerGadget(#TestFenster_Cont_links, 60, 60, 330, 330, #PB_Container_Raised)
			SetGadgetColor(#TestFenster_Cont_links, #PB_Gadget_BackColor, RGB(153, 217, 201))
			TextGadget(#TestFenster_Txt_links, 55, 35, 220, 50, "linke Fenster", #PB_Text_Center)
			SetGadgetColor(#TestFenster_Txt_links, #PB_Gadget_BackColor, RGB(153, 217, 201))
			SetGadgetFont(#TestFenster_Txt_links, FontID(#TestFenster_Font_1))
			ScrollBarGadget(#TestFenster_ScrlBar_links, 10, 120, 300, 45, 0, 100, 10)
			SetGadgetState(#TestFenster_ScrlBar_links, 25)
			CheckBoxGadget(#TestFenster_Check_links, 10, 195, 100, 35, "links")
			SetGadgetFont(#TestFenster_Check_links, FontID(#TestFenster_Font_0))
		CloseGadgetList()
		ContainerGadget(#TestFenster_Cont_rechts, 410, 60, 330, 330, #PB_Container_Raised)
			SetGadgetColor(#TestFenster_Cont_rechts, #PB_Gadget_BackColor, RGB(224, 188, 133))
			TextGadget(#TestFenster_Txt_rechts, 55, 35, 220, 56, "rechte Fenster", #PB_Text_Center)
			SetGadgetColor(#TestFenster_Txt_rechts, #PB_Gadget_BackColor, RGB(224, 188, 133))
			SetGadgetFont(#TestFenster_Txt_rechts, FontID(#TestFenster_Font_1))
			ScrollBarGadget(#TestFenster_ScrlBar_rechts, 10, 120, 300, 45, 0, 100, 10)
			SetGadgetState(#TestFenster_ScrlBar_rechts, 75)
			CheckBoxGadget(#TestFenster_Check_rechts, 10, 195, 100, 40, "rechts")
			SetGadgetFont(#TestFenster_Check_rechts, FontID(#TestFenster_Font_0))
		CloseGadgetList()
		ButtonGadget(#TestFenster_Btn_verstecke_links, 135, 440, 180, 75, "verstecke links")
		SetGadgetFont(#TestFenster_Btn_verstecke_links, FontID(#TestFenster_Font_0))
		ButtonGadget(#TestFenster_Btn_vestecke_rechts, 485, 440, 180, 75, "vestecke rechts")
		SetGadgetFont(#TestFenster_Btn_vestecke_rechts, FontID(#TestFenster_Font_0))
		
		SetWindowCallback(@myCallback())
	EndIf
EndProcedure

Open_TestFenster()

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
			
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #TestFenster_Btn_verstecke_links
					HideGadget(#TestFenster_Cont_links, #True)
					HideGadget(#TestFenster_Cont_rechts, #False)
				Case #TestFenster_Btn_vestecke_rechts
					HideGadget(#TestFenster_Cont_links, #False)
					HideGadget(#TestFenster_Cont_rechts, #True)
					
			EndSelect
			
	EndSelect
ForEver
Falls irgend jemand helfen kann, schon einmal Danke.
Ich benutze Windows 11 und PureBasic 6.00 LTS (Windows - x64)

Viele Grüße
Thomas
Win10 Pro
PureBasic 6.01 LTS
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: SetWindowCallback und Hintergrundfarbe von TextGadget

Beitrag von mk-soft »

Die Windows Hilfe sieht etwas anders aus.
Link: https://learn.microsoft.com/en-us/windo ... olorstatic

Obwohl du es auch weg lassen kannst, da PB diese intern erledigt.

Code: Alles auswählen

EnableExplicit

Enumeration Window
	#TestFenster
EndEnumeration

Enumeration Gadgets
	#TestFenster_Cont_links
	#TestFenster_Txt_links
	#TestFenster_ScrlBar_links
	#TestFenster_Check_links
	#TestFenster_Cont_rechts
	#TestFenster_Txt_rechts
	#TestFenster_ScrlBar_rechts
	#TestFenster_Check_rechts
	#TestFenster_Btn_verstecke_links
	#TestFenster_Btn_vestecke_rechts
EndEnumeration

Enumeration Font
	#TestFenster_Font_0
	#TestFenster_Font_1
EndEnumeration

LoadFont(#TestFenster_Font_0, "Arial", 14)
LoadFont(#TestFenster_Font_1, "Arial", 22)

Global BackgroundLeft = CreateSolidBrush_(RGB(153, 217, 201))
Global BackgroundRight = CreateSolidBrush_(RGB(224, 188, 133))
Global BackgroundScroll = CreateSolidBrush_(RGB(240, 130, 50))

Procedure myCallback(hWnd, uMsg, wParam, lParam)
	Select uMsg   
		Case #WM_CTLCOLORSTATIC
			If hWnd = GadgetID(#TestFenster_Cont_links)
			  SetBkColor_(wParam, BackgroundLeft)
			  ;ProcedureReturn BackgroundLeft
			ElseIf hWnd = GadgetID(#TestFenster_Cont_rechts)
				SetBkColor_(wParam, BackgroundRight)
			  ;ProcedureReturn BackgroundRight
			EndIf
			
		Case #WM_CTLCOLORSCROLLBAR
			ProcedureReturn BackgroundScroll
			
	EndSelect
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure Open_TestFenster(X = 0, Y = 0, Width = 800, Height = 600)
	If OpenWindow(#TestFenster, X, Y, Width, Height, "Hintergrundfarbe vom TextGadget verschwindet", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_WindowCentered)
		SetWindowColor(#TestFenster, RGB(137, 162, 224))
		ContainerGadget(#TestFenster_Cont_links, 60, 60, 330, 330, #PB_Container_Raised)
			SetGadgetColor(#TestFenster_Cont_links, #PB_Gadget_BackColor, RGB(153, 217, 201))
			TextGadget(#TestFenster_Txt_links, 55, 35, 220, 50, "linke Fenster", #PB_Text_Center)
			SetGadgetColor(#TestFenster_Txt_links, #PB_Gadget_BackColor, RGB(153, 217, 201))
			SetGadgetFont(#TestFenster_Txt_links, FontID(#TestFenster_Font_1))
			ScrollBarGadget(#TestFenster_ScrlBar_links, 10, 120, 300, 45, 0, 100, 10)
			SetGadgetState(#TestFenster_ScrlBar_links, 25)
			CheckBoxGadget(#TestFenster_Check_links, 10, 195, 100, 35, "links")
			SetGadgetFont(#TestFenster_Check_links, FontID(#TestFenster_Font_0))
		CloseGadgetList()
		ContainerGadget(#TestFenster_Cont_rechts, 410, 60, 330, 330, #PB_Container_Raised)
			SetGadgetColor(#TestFenster_Cont_rechts, #PB_Gadget_BackColor, RGB(224, 188, 133))
			TextGadget(#TestFenster_Txt_rechts, 55, 35, 220, 56, "rechte Fenster", #PB_Text_Center)
			SetGadgetColor(#TestFenster_Txt_rechts, #PB_Gadget_BackColor, RGB(224, 188, 133))
			SetGadgetFont(#TestFenster_Txt_rechts, FontID(#TestFenster_Font_1))
			ScrollBarGadget(#TestFenster_ScrlBar_rechts, 10, 120, 300, 45, 0, 100, 10)
			SetGadgetState(#TestFenster_ScrlBar_rechts, 75)
			CheckBoxGadget(#TestFenster_Check_rechts, 10, 195, 100, 40, "rechts")
			SetGadgetFont(#TestFenster_Check_rechts, FontID(#TestFenster_Font_0))
		CloseGadgetList()
		ButtonGadget(#TestFenster_Btn_verstecke_links, 135, 440, 180, 75, "verstecke links")
		SetGadgetFont(#TestFenster_Btn_verstecke_links, FontID(#TestFenster_Font_0))
		ButtonGadget(#TestFenster_Btn_vestecke_rechts, 485, 440, 180, 75, "vestecke rechts")
		SetGadgetFont(#TestFenster_Btn_vestecke_rechts, FontID(#TestFenster_Font_0))
		
		SetWindowCallback(@myCallback())
	EndIf
EndProcedure

Open_TestFenster()

Repeat
	Select WaitWindowEvent()
		Case #PB_Event_CloseWindow
			Break
			
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #TestFenster_Btn_verstecke_links
					HideGadget(#TestFenster_Cont_links, #True)
					HideGadget(#TestFenster_Cont_rechts, #False)
					
				Case #TestFenster_Btn_vestecke_rechts
					HideGadget(#TestFenster_Cont_links, #False)
					HideGadget(#TestFenster_Cont_rechts, #True)
					
			EndSelect
			
	EndSelect
ForEver
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Ara
Beiträge: 32
Registriert: 29.08.2004 13:40

Re: SetWindowCallback und Hintergrundfarbe von TextGadget

Beitrag von Ara »

Danke für die schnelle Antwort.
Leider verschwindet jetzt von den CheckBoxGadget der Hintergrund.

Viele Grüße
Thomas
Win10 Pro
PureBasic 6.01 LTS
Ara
Beiträge: 32
Registriert: 29.08.2004 13:40

Re: SetWindowCallback und Hintergrundfarbe von TextGadget

Beitrag von Ara »

Ich habe noch etwas abgeändert, jetzt geht es.
Den Rest muß ich umsetzen, wie ich es brauche.

Vielen Dank noch einmal.

Code: Alles auswählen

Procedure myCallback(hWnd, uMsg, wParam, lParam)
	Select uMsg   
		Case #WM_CTLCOLORSTATIC
			If hWnd = GadgetID(#TestFenster_Cont_links)
				SetBkColor_(wParam, BackgroundLeft)
				If lParam <>GadgetID(#TestFenster_Txt_links)
					ProcedureReturn BackgroundLeft
				EndIf
				
			ElseIf hWnd = GadgetID(#TestFenster_Cont_rechts)
				SetBkColor_(wParam, BackgroundRight)
				If lParam <>GadgetID(#TestFenster_Txt_rechts)
					ProcedureReturn BackgroundRight
				EndIf
			EndIf
			
		Case #WM_CTLCOLORSCROLLBAR
			ProcedureReturn BackgroundScroll
			
	EndSelect
	ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure[code]
Win10 Pro
PureBasic 6.01 LTS
Antworten