Seite 1 von 1

Fehler bei disable SpinGadget ?

Verfasst: 20.09.2007 10:28
von c4s
Hi!
Also ich habe das treiben hier schon öfters wegen vielen Fragen mitverfolgt und immer Antworten gefunden :allright:

Doch folgenden Fehler kann ich mir nicht erklären:

Code: Alles auswählen

Enumeration 
	#Window
	#Check1
	#Test11
	#Test12
	#Check2
	#Test21
	#Test22
	#OnOff
	#Exit
EndEnumeration


If OpenWindow(#Window, #PB_Ignore, #PB_Ignore, 331, 120, "Refresh Test", #PB_Window_TitleBar | #PB_Window_ScreenCentered)
	If CreateGadgetList(WindowID(#Window))
		CheckBoxGadget(#Check1, 50, 17, 25, 20, "1")
		 SetGadgetState(#Check1, 1)
		SpinGadget(#Test11, 165, 18, 35, 17, 1, 999, #PB_Spin_Numeric)
		 SetGadgetState(#Test11, 11)
		SpinGadget(#Test12, 235, 18, 40, 17, 1, 9999, #PB_Spin_Numeric)
		 SetGadgetState(#Test12, 12)
		CheckBoxGadget(#Check2, 50, 37, 25, 20, "2")
		 SetGadgetState(#Check2, 1)
		SpinGadget(#Test21, 165, 38, 35, 17, 1, 999, #PB_Spin_Numeric)
		 SetGadgetState(#Test21, 21)
		SpinGadget(#Test22, 235, 38, 40, 17, 1, 9999, #PB_Spin_Numeric)
		 SetGadgetState(#Test22, 22)
		CheckBoxGadget(#OnOff, 50, 90, 90, 20, "redraw on / off")
		ButtonGadget(#Exit, 210, 90, 50, 20, "exit")
	EndIf
EndIf



Repeat
	Select WaitWindowEvent()
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Check1, #Check2
					If GetGadgetState(#OnOff)
						RedrawWindow_(WindowID(#Window), #False, #False, #WM_PAINT)
					EndIf
					
					If GetGadgetState(#Check1)
						DisableGadget(#Test11, 0)
						DisableGadget(#Test12, 0)
					Else
						DisableGadget(#Test11, 1)
						DisableGadget(#Test12, 1)
					EndIf
					If GetGadgetState(#Check2)
						DisableGadget(#Test21, 0)
						DisableGadget(#Test22, 0)
					Else
						DisableGadget(#Test21, 1)
						DisableGadget(#Test22, 1)
					EndIf
				Case #Exit
					End
			EndSelect
	EndSelect
ForEver
Wenn ich ein SpinGadget mit DisableGadget 'ergrauen' will, wird nur das Nummernfeld grau. Die Pfeile bleiben in ihrem Zustand bis die Maus über sie kommt.
Bisher hab ich das Problem immer durch ein WindowRedraw gelöst aber mit vielen Gadgets in einem Fenster gibt das nerviges und auffallendes Flimmern.

Ich hoffe einer kann mir helfen...

P.S.
Hätte ich das in den Anfängerbereich tun sollen?

Verfasst: 20.09.2007 13:51
von bobobo
eher in den BugBereich

ohne redraw werden die Pfeilchen bei mir (xp sp2) aber
auch nicht grau sondern bleiben schwarz (was mich aber
eigentlich auch nicht weiter stört)

Verfasst: 20.09.2007 15:29
von c4s
Das Problem ist ja, dass wenn man (ohne redraw) ein SpinGadget disabled, in ihrem jetzigem Zustand bleiben.
Also wenn es deaktiviert ist und ich mit der Maus über ein Pfeil fahre wird er dann auch grau. Aktiviere ichs wieder bleibt es grau und wenn ich dann erst wieder mit der Maus über einem Pfeil bin wird er wieder schwarz!

(Wenn er immer in einer Farbe blieben würde, wäre es ja für mich nicht so schlimm aber so gehts einfach nicht :| )

edit:
ich hab vergessen zu sagen, dass der Bug mit XP-Skin-Unterstützung noch schlimmer ist und das eigenltiche Problem ist!

Verfasst: 20.09.2007 16:09
von Scarabol
Sollte wirklich in den Bug Bereich...

*wink* an Moderator

Gruß
Scarabol

Verfasst: 21.09.2007 15:46
von c4s
Ehrlich gesagt dachte ich, dass irgendwie ein WindowEvent falsch gesetzt oder iwas anderes falsch gemacht habe.
Aber das es ein echter Bug ist - bei dem mir keiner helfen kann - dachte ich eher weniger :shock:

Weiß wenigstens einer wie man nur ein Gadget redrawt?
Irgendeiner meinte ich mal man muss nur bei RedrawWindow die WindowID durch die GadgetID ersetzten. Aber das funktioniert nicht...

Ich freue mich auf jede Antwort :wink:
mfg c4s

Verfasst: 26.09.2007 12:08
von c4s
Mir ist noch was interessantes aufgefallen:
Manchmal, wenn ich redraw deaktiviere, wird das erste PanelGadget korrekt
geupdated nur beim zweiten bleiben dann die Pfeile in ihrem aktiven bzw deaktivierten Status bis man - wie geschrieben - mit der Muas über sie fährt.

Bringt das irgend jemanden auf eine Idee wie man das Problem, ohne das ganze Fenster aktualisieren zu müssen, lösen kann?

Verfasst: 26.09.2007 12:52
von Fluid Byte
Irgendeiner meinte ich mal man muss nur bei RedrawWindow die WindowID durch die GadgetID ersetzten. Aber das funktioniert nicht..
Natürlich funktioniert das. Das SpinGadget setzt sich aber aus mehreren Elementen zusammen. Einmal ein UpDown-Control und ein Edit-Control. Du muss also das handle des UpDown-Controls ermitteln. Zum Beispiel mit GetWindow_().

Verfasst: 26.09.2007 13:59
von c4s
Danke Fluid Byte, danke danke danke :allright:
Anfangs dachte ich: "Was schreibt der fürn zeuch?"

Aber hab es jetzt hinbekommen:
InvalidateRect_(GetWindow_(GadgetID(#SpinGadget), #GW_HWNDNEXT), 0, #True)

edit
wobei eins muss ich jetzt noch verstehen:
Wie man #GW_HWNDPREV, #GW_HWNDNEXT, #GW_HWNDLAST richtig setzt :?
iwie wird gerade nur eins richtig aktualisiert...

edit2
mit #GW_HWNDNEXT scheints richtig zu funktionieren