Redraw Problem bei HideGadget?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Redraw Problem bei HideGadget?

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wir erzwingen einfach ein Window Redraw mittels WinAPI:

Code: Alles auswählen

UpdateWindow_(WindowID())
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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag 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.
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Jetzt bin ich mit meinem Latein am Ende.


Hat jemand anderes noch eine Idee?
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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 
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Skywalker
Beiträge: 77
Registriert: 22.09.2004 23:35

Beitrag von Skywalker »

Vielen Dank, so scheint es erstmal zu funktionieren.

Aber sollte PureBasic den Redraw nicht selbständig machen?
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Skywalker hat geschrieben:Aber sollte PureBasic den Redraw nicht selbständig machen?
Beispiel von Falko habe ich eben an Fred gemeldet.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten