Seite 1 von 1
Redraw Problem bei HideGadget?
Verfasst: 13.12.2004 01:10
von Skywalker
Ist schön spät, deshalb fasse ich mich kurz.
Mir ist aber heute folgendes aufgefallen:
Habe ein PanelGadget auf welchem sich einige DateGadgets befinden.
Je nach Zustand sollen diese sichtbar, bzw. unsichtbar sein.
Zu Anfang des Programmes ist ein DategGadget nicht sichtbar, durch einen Klick soll es sichtbar werden. Das funktioniert auch.
Ein erneuter Klick soll es unsichtbar machen, aber tut es nicht.
Es ist noch da, aber nicht mehr anwählbar.
Schiebe ich das Fenster ausserhalb des Bildschirmes und wieder zurück, dann ist es wirklich weg.
Scheinbar liegt hier ein Redraw Problem vor. Aber wieso?
Denn wenn ich ohne PanelGadget (und ohne SetParent_) den HideGagdet Befehl benutze, dann funktioniert alles einwandfrei.
Vielleicht hat jemand eine Idee.
Gruß
Thomas
Verfasst: 13.12.2004 02:04
von Laurin
Wir erzwingen einfach ein Window Redraw mittels WinAPI:
Setze das nach der Stelle, wo dein DateGadget auf unsichtbar geschaltet wird. Dann wird duch den API-Befehl das Fenster gezwungen sich neu zu zeichen und der DateGadget sollte dann nicht mehr sichtbar sein.
Greetz Laurin
Verfasst: 14.12.2004 00:57
von Skywalker
Danke für die Antwort, aber leider funktioniert das nicht.
Es scheint auch nicht am DateGadget zu liegen, denn auch bei StringGadget funktioniert das nicht.
Es scheint mir so, das alles was auf einem PanelGadget liegt davon betroffen ist.
Mache ich was falsch, oder liegt es am HideGadget Befehl?
Gruß
Thomas
Verfasst: 14.12.2004 01:04
von Laurin
Merkwürdig, merkwürdig.
...
..
.
Erleuchtung!
Probiere mal folgendes:
1) HideGadget()
2) Schalte das PanelGadget auf eine andere Seite mit SetGadgetState()
3) Schalte wieder zu ursprünglichen Seite
Fertig!
Jetzt müsste alles eigendlich richtig angezeigt werden. Die Lösung ist zwar nicht elegant, aber hoffentlich funktioniert es.
Greetz Laurin
Verfasst: 15.12.2004 01:09
von Skywalker
Ja das funktioniert natürlich, aber sieht nicht so toll aus.
So kann ich das in keinem Fall lassen.
Das mit dem SetParent_ habe ich nun herausgenommen, da es eh nicht mehr benötigt wird.
Aktuell ist es, dass das Gadget bei einem HideGadget(#Gadget,0) zwar erscheint, aber bei einem HideGadget(#Gadget,1) nicht wieder verschwindet)
Ist echt merkwürdig.
Verfasst: 15.12.2004 02:42
von Laurin
Jetzt bin ich mit meinem Latein am Ende.
Hat jemand anderes noch eine Idee?
Verfasst: 15.12.2004 11:10
von Falko
Code: Alles auswählen
;Der Redrawtip kommt von GPI
;http://www.robsite.de/php/pureboard-archiv/viewtopic.php?t=3836&highlight=resize
#DM_REPOSITION = (#WM_USER+2)
If OpenWindow(0,0,0,672,250,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget") And CreateGadgetList(WindowID(0))
PWnd=PanelGadget (0,8,20,646,223)
AddGadgetItem (0,-1,"Panel 1")
ButtonGadget(4,0,0,80, 15, "Button")
CalendarGadget(1, 10, 15, 200, 180)
CalendarGadget(2, 220, 15, 200, 180)
CalendarGadget(3, 430, 15, 200, 180)
CloseGadgetList()
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadgetID()=4
If button = #True ; ButtonGadget wird angezeigt
HideGadget(1,0) ; => verstecke es
button = #False
Else ; ButtonGadget ist versteckt
HideGadget(1,1) ; => zeige es
button = #True
EndIf
EndIf
RedrawWindow_(WindowID(), 0, 0,#RDW_INTERNALPAINT|#RDW_INVALIDATE|#RDW_ALLCHILDREN)
EndIf
Until Event=#PB_Event_CloseWindow
EndIf
Verfasst: 16.12.2004 01:06
von Skywalker
Vielen Dank, so scheint es erstmal zu funktionieren.
Aber sollte PureBasic den Redraw nicht selbständig machen?
Verfasst: 18.12.2004 19:09
von Andre
Skywalker hat geschrieben:Aber sollte PureBasic den Redraw nicht selbständig machen?
Beispiel von Falko habe ich eben an Fred gemeldet.