Seite 1 von 1

ResizeGadget flackert mit Klassiktheme unter Win7 mehr als..

Verfasst: 28.01.2013 17:23
von Kurzer
Als Verfechter des klassischen Designs unter Win 7 ist mir erst heute zufällig aufgefallen, dass ResizeGadget() unter Verwendung des klassischen Designs unter Win7 mehr flackert als unter dem Aero Design.

Da stellt sich mir die Frage: Warum ist das so?
Ich dachte bisher, dass alles was nicht "klassisches Design" ist irgendwie auf das "native" Fensterdesign "aufgepropft" ist und entsprechend mehr Ressourcen und Leistung verbraucht.

Offenbar kommt die Windows 7 Grafikengine aber besser mit dem Aero zurecht, denn die Gadgets des folgenden Code-Schnippsels flackern unter dem Win 7 klassischen Design wie Sau... unter Aero dagegen fast gar nicht. Ändert mal die Größe des Fensters recht schnell. Unter dem klassischen Design kommen die Gadgets und die Textfelder kaum hinterher.

Sollte ich mit meiner Vermutung "klassisch = ressourcenschonend" falsch liegen?

Code: Alles auswählen

Enumeration 
	#Gad_Editor	
	#Gad_Filelist
	#Gad_FileSize
	#Gad_TextSize
	#Gad_Button_ClearFilelist
	#Gad_Button_Convert
	#Gad_Button_CopyTo
EndEnumeration

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 350, 180, "Flickertest", #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
	; Fenster
	WindowBounds(0, 260, 180, #PB_Ignore, #PB_Ignore)
	StickyWindow(0, 1)
	SmartWindowRefresh(0, 1)
	
	; Statusbar
	If CreateStatusBar(0, WindowID(0))
		AddStatusBarField(7)
		StatusBarText(0, 0, "", #PB_StatusBar_BorderLess)
		AddStatusBarField(#PB_Ignore)
		StatusBarText(0, 1, "djfslhrhfuirshnuihgsuigsgeg", #PB_StatusBar_BorderLess)
	EndIf
	
	; Gadgets
	EditorGadget(#Gad_Editor, 10, 10, #PB_Ignore, #PB_Ignore, #PB_Editor_ReadOnly)
	SetGadgetColor(#Gad_Editor, #PB_Gadget_BackColor, $B3B3B3)
	EnableGadgetDrop(#Gad_Editor, #PB_Drop_Files, #PB_Drag_Copy)
	
	ButtonGadget(#Gad_Button_ClearFilelist, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, "1", #PB_Button_MultiLine)
	ButtonGadget(#Gad_Button_Convert, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, "2", #PB_Button_MultiLine)
	ButtonGadget(#Gad_Button_CopyTo, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, "3", #PB_Button_MultiLine)
	
	TextGadget(#Gad_FileSize, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, "lalalalalala")
	TextGadget(#Gad_TextSize, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, "lalalalalala")
	
	; Eventloop
	Repeat
		iEvent = WaitWindowEvent()
		iEventGadget = EventGadget()
		iEventType = EventType() 
		
		Select iEvent
			Case #PB_Event_SizeWindow
				ResizeGadget(#Gad_Editor, 10, 10, WindowWidth(0) - 110, WindowHeight(0) - 30)
				ResizeGadget(#Gad_Button_ClearFilelist, WindowWidth(0) - 90, 10, 80, 20)
				ResizeGadget(#Gad_Button_Convert, WindowWidth(0) - 90, 40, 80, 30)
				ResizeGadget(#Gad_Button_CopyTo, WindowWidth(0) - 90, 75, 80, 30)
				ResizeGadget(#Gad_FileSize, WindowWidth(0) - 90, 110, 80, 15)
				ResizeGadget(#Gad_TextSize, WindowWidth(0) - 90, 125, 80, 15)
			Case #PB_Event_CloseWindow
				iQuit = 1
		EndSelect
	Until iQuit = 1
EndIf
End 

Re: ResizeGadget flackert mit Klassiktheme unter Win7 mehr a

Verfasst: 28.01.2013 17:42
von NicTheQuick
Nur als Hinweis: '#PB_Ignore' ist nicht dafür gedacht bei x, y, width oder height für Gadgets einzusetzen. Der Wert von '#PB_Ignore' ist -65535 und unter Linux bekommt man dann eine schöne "[WARNING] Gtk (CRITICAL): IA_gtk_widget_set_size_request: assertion `width >= -1' failed." und dann funktioniert nichts mehr in dem Fenster.
Es ist also besser einfach alle x- und y-Werte auf 0 zu setzen und width und height auf 1. Sind width und height auch auf 0, schmiert es hier unter Linux bei der Erstellung der Button-Gadgets ab.

Im Übrigen wird hier #PB_Event_SizeWindow wirklich erst aufgerufen, wenn man das Fenster in der Größe ändert. Unter Windows wird es glaube ich mindestens ein mal schon aufgerufen bevor man irgendwas manuell an der Größe ändert. Deswegen wäre es geschickter den Code so zu machen:

Code: Alles auswählen

Enumeration
	#Gad_Editor   
	#Gad_Filelist
	#Gad_FileSize
	#Gad_TextSize
	#Gad_Button_ClearFilelist
	#Gad_Button_Convert
	#Gad_Button_CopyTo
EndEnumeration

Procedure ResizeGadgets()
	ResizeGadget(#Gad_Editor, 10, 10, WindowWidth(0) - 110, WindowHeight(0) - 30)
	ResizeGadget(#Gad_Button_ClearFilelist, WindowWidth(0) - 90, 10, 80, 20)
	ResizeGadget(#Gad_Button_Convert, WindowWidth(0) - 90, 40, 80, 30)
	ResizeGadget(#Gad_Button_CopyTo, WindowWidth(0) - 90, 75, 80, 30)
	ResizeGadget(#Gad_FileSize, WindowWidth(0) - 90, 110, 80, 15)
	ResizeGadget(#Gad_TextSize, WindowWidth(0) - 90, 125, 80, 15)
EndProcedure

If OpenWindow(0, 0, 0, 350, 180, "Flickertest", #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
	; Fenster
	WindowBounds(0, 260, 180, #PB_Ignore, #PB_Ignore)
	StickyWindow(0, 1)
	SmartWindowRefresh(0, 1)
	
	; Statusbar
	If CreateStatusBar(0, WindowID(0))
		AddStatusBarField(7)
		StatusBarText(0, 0, "", #PB_StatusBar_BorderLess)
		AddStatusBarField(#PB_Ignore)
		StatusBarText(0, 1, "djfslhrhfuirshnuihgsuigsgeg", #PB_StatusBar_BorderLess)
	EndIf
	
	; Gadgets
	EditorGadget(#Gad_Editor, 10, 10, 0, 0, #PB_Editor_ReadOnly)
	SetGadgetColor(#Gad_Editor, #PB_Gadget_BackColor, $B3B3B3)
	EnableGadgetDrop(#Gad_Editor, #PB_Drop_Files, #PB_Drag_Copy)
	
	ButtonGadget(#Gad_Button_ClearFilelist, 0, 0, 1, 1, "1", #PB_Button_MultiLine)
	ButtonGadget(#Gad_Button_Convert, 0, 0, 1, 1, "2", #PB_Button_MultiLine)
	ButtonGadget(#Gad_Button_CopyTo, 0, 0, 1, 1, "3", #PB_Button_MultiLine)
	
	TextGadget(#Gad_FileSize, 0, 0, 0, 0, "lalalalalala")
	TextGadget(#Gad_TextSize, 0, 0, 0, 0, "lalalalalala")
	
	ResizeGadgets()
	
	; Eventloop
	Repeat
		iEvent = WaitWindowEvent()
		iEventGadget = EventGadget()
		iEventType = EventType()
		
		Select iEvent
			Case #PB_Event_SizeWindow
				ResizeGadgets()
			Case #PB_Event_CloseWindow
				iQuit = 1
		EndSelect
	Until iQuit = 1
EndIf
End 
Und der Vollständigkeit halber: Hier bei mir flackert nichts. :wink:

Re: ResizeGadget flackert mit Klassiktheme unter Win7 mehr a

Verfasst: 28.01.2013 17:52
von Kurzer
Hallo NicTheQuick,

besten Dank für die wertvollen Hinweise und das Testen. :allright:
Ich habe meinen Code entsprechend angepaßt.