Seite 1 von 2

Textgadget resize - Text falsch dargestellt (kein Bug)

Verfasst: 05.05.2006 22:02
von mar
Hi hier mal etwas Code zum Resizen. Ab und zu
fehlt etwas Text im Textgadget. zB. "GUI-" von GUI-Abschnitt.

habe auch zwei Snapshots davon für alle Fälle.

Code: Alles auswählen

 #Window=0
 #Rand=5
 #HeightStart=195
 #WidhtStart=230
 #TextGadgetHight = 25
 If OpenWindow(#Window, 0, 0,#WidhtStart, #HeightStart, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
    If CreateGadgetList(WindowID(#Window))
      
      #Button1  = 0 
      #Button2  = 1
      #Button3  = 2
      #Button4  = 3
      #Splitter1 = 10
      #Splitter2 = 11
      #Splitter3 = 12
      
      #TextGadget = 20
      
      ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; es besteht keine Notwendigkeit, die Größe oder Position
      ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; festzulegen, da sie automatisch in der Größe angepasst werden
      SplitterGadget(#Splitter1, 0, 0, 0, 0, #Button1, #Button2, #PB_Splitter_Separator)

      ButtonGadget(#Button3,0, 0, 0, 0, "Button 3") ; es besteht keine Notwendigkeit, die Größe oder Position
      ButtonGadget(#Button4,0, 0, 0, 0, "Button 4") ; festzulegen, da sie automatisch in der Größe angepasst werden
      SplitterGadget(#Splitter2, 0, 0, 0, 0, #Button3, #Button4, #PB_Splitter_Separator)

      SplitterGadget(#Splitter3, #Rand, #Rand, #WidhtStart-2*#Rand, #HeightStart-2*#Rand, #Splitter1, #Splitter2, #PB_Splitter_Vertical|#PB_Splitter_Separator)
      
      TextGadget(#TextGadget, #Rand, 135, #WidhtStart-2*#Rand, #TextGadgetHight-2*#Rand, "Obiger GUI-Abschnitt zeigt vier sich automatisch in der Größe anpassende Schalter. Auch beim Resize vom gesamten Window passen sich alle Gadgets an.",#PB_Text_Center )
      
      Repeat 
        event=WaitWindowEvent() 
        
          ResizeGadget(#Splitter3,#PB_Ignore, #PB_Ignore , WindowWidth(#Window)-2*#Rand, WindowHeight(#Window)-#TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
          ResizeGadget(#TextGadget,#PB_Ignore, WindowHeight(#Window)-#TextGadgetHight+#Rand , WindowWidth(#Window)-2*#Rand, #TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
      
      Until event = #PB_Event_CloseWindow
      
    EndIf
  EndIf
[/img]

Verfasst: 05.05.2006 22:17
von mar
wenn man nur die Breite des Fensters ändert bleibt der Fehler erhalten.
Aber wenn man das Fenster mal minimiert und dann wieder normal
auf den Bildschirm holt wird es wieder richtig dargestellt.

Irgendwie als ob das Programm beim Schreiben des Textes in den "Imagespeicher"
manchmal unterbrochen wird. Aber das ist nur eine Vermutung.
Man könnte nach einem Resize ja auch zur Not einen Fensterrefresh aufrufen
- nur um sicherzugehen.

mar

Verfasst: 05.05.2006 22:18
von Kiffi
yepp, tritt auch hier auf.

Kleiner Workaround:

Code: Alles auswählen

SetGadgetText(#TextGadget, GetGadgetText(#TextGadget))
Ist zwar nicht sehr elegant, aber effektiv ;-)

Grüße ... Kiffi

P.S.: ResizeGadget() solltest Du nur dann aufrufen, wenn auch wirklich ein
#PB_Event_SizeWindow aufgetreten ist.

P.P.S.: Width, nicht Widht ;-)

Code: Alles auswählen

 #Window=0
 #Rand=5
 #HeightStart=195
 #WidthStart=230
 #TextGadgetHight = 25
 If OpenWindow(#Window, 0, 0,#WidthStart, #HeightStart, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
  If CreateGadgetList(WindowID(#Window))
    
    #Button1  = 0
    #Button2  = 1
    #Button3  = 2
    #Button4  = 3
    #Splitter1 = 10
    #Splitter2 = 11
    #Splitter3 = 12
    
    #TextGadget = 20
    
    ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; es besteht keine Notwendigkeit, die Größe oder Position
    ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; festzulegen, da sie automatisch in der Größe angepasst werden
    SplitterGadget(#Splitter1, 0, 0, 0, 0, #Button1, #Button2, #PB_Splitter_Separator)
    
    ButtonGadget(#Button3,0, 0, 0, 0, "Button 3") ; es besteht keine Notwendigkeit, die Größe oder Position
    ButtonGadget(#Button4,0, 0, 0, 0, "Button 4") ; festzulegen, da sie automatisch in der Größe angepasst werden
    SplitterGadget(#Splitter2, 0, 0, 0, 0, #Button3, #Button4, #PB_Splitter_Separator)
    
    SplitterGadget(#Splitter3, #Rand, #Rand, #WidthStart-2*#Rand, #HeightStart-2*#Rand, #Splitter1, #Splitter2, #PB_Splitter_Vertical|#PB_Splitter_Separator)
    
    TextGadget(#TextGadget, #Rand, 135, #WidthStart-2*#Rand, #TextGadgetHight-2*#Rand, "Obiger GUI-Abschnitt zeigt vier sich automatisch in der Größe anpassende Schalter. Auch beim Resize vom gesamten Window passen sich alle Gadgets an.",#PB_Text_Center )
    
    Repeat
      event=WaitWindowEvent()
      
      Select event
        
        Case #PB_Event_SizeWindow
          ResizeGadget(#Splitter3,#PB_Ignore, #PB_Ignore , WindowWidth(#Window)-2*#Rand, WindowHeight(#Window)-#TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
          ResizeGadget(#TextGadget,#PB_Ignore, WindowHeight(#Window)-#TextGadgetHight+#Rand , WindowWidth(#Window)-2*#Rand, #TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
          SetGadgetText(#TextGadget, GetGadgetText(#TextGadget))
          
      EndSelect
      
    Until event = #PB_Event_CloseWindow
    
  EndIf
EndIf

Verfasst: 05.05.2006 22:37
von mar
@kiffi danke - na vielleicht lern ich's ja noch mit dem Inglish <)

Verfasst: 05.05.2006 22:58
von mar
Habe das von Kiffi in die #PB_Event_Repaint Routine gepackt.
+einen kleinen Schönheitsfehler beseitigt+width korrigiert.
Jetzt gehts auch.

Code: Alles auswählen

 #Window=0
 #Rand=5
 #HeightStart=195
 #WidthStart=230
 #TextGadgetHight = 25
 If OpenWindow(#Window, 0, 0,#WidthStart, #HeightStart, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
    If CreateGadgetList(WindowID(#Window))
      
      #Button1  = 0 
      #Button2  = 1
      #Button3  = 2
      #Button4  = 3
      #Splitter1 = 10
      #Splitter2 = 11
      #Splitter3 = 12
      
      #TextGadget = 20
      
      ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; es besteht keine Notwendigkeit, die Größe oder Position
      ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; festzulegen, da sie automatisch in der Größe angepasst werden
      SplitterGadget(#Splitter1, 0, 0, 0, 0, #Button1, #Button2, #PB_Splitter_Separator)

      ButtonGadget(#Button3,0, 0, 0, 0, "Button 3") ; es besteht keine Notwendigkeit, die Größe oder Position
      ButtonGadget(#Button4,0, 0, 0, 0, "Button 4") ; festzulegen, da sie automatisch in der Größe angepasst werden
      SplitterGadget(#Splitter2, 0, 0, 0, 0, #Button3, #Button4, #PB_Splitter_Separator)

      SplitterGadget(#Splitter3, #Rand, #Rand, #WidthStart-2*#Rand, #HeightStart-2*#Rand, #Splitter1, #Splitter2, #PB_Splitter_Vertical|#PB_Splitter_Separator)
      
      TextGadget(#TextGadget, #Rand, WindowHeight(#Window)-#TextGadgetHight+#Rand, #WidthStart-2*#Rand, #TextGadgetHight-2*#Rand, "Obiger GUI-Abschnitt zeigt vier sich automatisch in der Größe anpassende Schalter. Auch beim Resize vom gesamten Window passen sich alle Gadgets an.",#PB_Text_Center )
      
      Repeat 
        event=WaitWindowEvent() 
        
        If event=#PB_Event_SizeWindow
        
          ResizeGadget(#Splitter3,#PB_Ignore, #PB_Ignore , WindowWidth(#Window)-2*#Rand, WindowHeight(#Window)-#TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
          ResizeGadget(#TextGadget,#PB_Ignore, WindowHeight(#Window)-#TextGadgetHight+#Rand , WindowWidth(#Window)-2*#Rand, #TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
        ElseIf event=#PB_Event_Repaint
          SetGadgetText(#TextGadget, GetGadgetText(#TextGadget))
        EndIf
        
      Until event = #PB_Event_CloseWindow
      
    EndIf
  EndIf

Verfasst: 05.05.2006 23:03
von mar
na ja nur das dieses #PB_Event_Repaint so oft
auftritt, dass der Text jetzt beim Resizen flackert.

Verfasst: 05.05.2006 23:05
von edel

Code: Alles auswählen

 #Window=0
 #Rand=5
 #HeightStart=195
 #WidthStart=230
 #TextGadgetHight = 25
 If OpenWindow(#Window, 0, 0,#WidthStart, #HeightStart, "SplitterGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
  If CreateGadgetList(WindowID(#Window))
    
    #Button1  = 0
    #Button2  = 1
    #Button3  = 2
    #Button4  = 3
    #Splitter1 = 10
    #Splitter2 = 11
    #Splitter3 = 12
    
    #TextGadget = 20
    
    ButtonGadget(#Button1,0, 0, 0, 0, "Button 1") ; es besteht keine Notwendigkeit, die Größe oder Position
    ButtonGadget(#Button2,0, 0, 0, 0, "Button 2") ; festzulegen, da sie automatisch in der Größe angepasst werden
    SplitterGadget(#Splitter1, 0, 0, 0, 0, #Button1, #Button2, #PB_Splitter_Separator)
    
    ButtonGadget(#Button3,0, 0, 0, 0, "Button 3") ; es besteht keine Notwendigkeit, die Größe oder Position
    ButtonGadget(#Button4,0, 0, 0, 0, "Button 4") ; festzulegen, da sie automatisch in der Größe angepasst werden
    SplitterGadget(#Splitter2, 0, 0, 0, 0, #Button3, #Button4, #PB_Splitter_Separator)
    
    SplitterGadget(#Splitter3, #Rand, #Rand, #WidthStart-2*#Rand, #HeightStart-2*#Rand, #Splitter1, #Splitter2, #PB_Splitter_Vertical|#PB_Splitter_Separator)
    
    TextGadget(#TextGadget, #Rand, 135, #WidthStart-2*#Rand, #TextGadgetHight-2*#Rand, "Obiger GUI-Abschnitt zeigt vier sich automatisch in der Größe anpassende Schalter. Auch beim Resize vom gesamten Window passen sich alle Gadgets an.",#PB_Text_Center|#SS_SIMPLE)
    
    Repeat
      event=WaitWindowEvent()
      
      Select event 
        Case #PB_Event_SizeWindow
          ResizeGadget(#Splitter3,#PB_Ignore, #PB_Ignore , WindowWidth(#Window)-2*#Rand, WindowHeight(#Window)-#TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.
          ResizeGadget(#TextGadget,#PB_Ignore, WindowHeight(#Window)-#TextGadgetHight+#Rand , WindowWidth(#Window)-2*#Rand, #TextGadgetHight-2*#Rand) ; Ändert nur die Gadgetbreite.  
      EndSelect
      
    Until event = #PB_Event_CloseWindow
    
  EndIf
EndIf

Verfasst: 05.05.2006 23:13
von mar
Ah der Fehler war bei meiner Eventschleife. Ich hatte bei jedem
Event ResizeGadget aufgerufen. Dabei ist PureBasic wohl
etwas überlastet gewesen. :lol:

Verfasst: 05.05.2006 23:54
von edel
Du brauchst doch nur #SS_SIMPLE setzen . Das sollte das Problem beheben.

Verfasst: 07.05.2006 01:33
von PureLust
hallodri hat geschrieben:Du brauchst doch nur #SS_SIMPLE setzen . Das sollte das Problem beheben.
Ähhm, .... sorry ... kurze dumme Frage:

Was genau macht #SS_SIMPLE und wo hast Du solche Infos dazu her dass es da eingesetzt werden kann (ist ja wohl keine #PB-Konstante)? :shock: