Seite 1 von 1

#PB_Event_Repaint MenuBug

Verfasst: 12.09.2018 03:24
von hyrocles
Hallo @ll,

ich bin gerade über einen Bug gestolpert und möchte euch kurz ein Info dazu da lassen da ich doch einwenig gebraucht habe um herauszubekommen wann es genau zum Verhalten kommt und wie man es umschiffen kann.

Bug Beschreibung:
Das Event Repaint wird nicht immer aufgerufen beim klick auf den "Maximize" Button (obenrechts in der Titelleiste des Fensters) wenn das Fenster selbst gerade maximized ist. Also simpler ausgedrückt, oft gibt es kein Repaint wenn man das Fenster mximized und dann gleich wieder kleiner macht über den maximizeButton.

Das Event wird nur oft beim wieder kleiner machen nicht ausgelöst. Beim vergrößern geht es immer.

Fehler ist reproduzierbar mit folgendem CodeBeispiel (PBVersion 5.62, 5.61 - Win x86):

Code: Alles auswählen

counter = 0 ; zur Übersichtlichkeit

#__Main__ = 0
If OpenWindow(#__Main__,0,0,800,600,"#PB_Event_Repaint BUG",#PB_Window_TitleBar|#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  If CreateMenu(0, WindowID(#__Main__))
    MenuTitle("Program")
      MenuItem(0,"close")
  EndIf
    
  Repeat
    __event__ = WaitWindowEvent()
    If __event__
      Select __event__
        Case #PB_Event_Repaint
          counter = counter+1
          Debug Str(counter)+") #PB_Event_Repaint"
        Case #PB_Event_CloseWindow
          CloseWindow(EventWindow()):End
      EndSelect
    EndIf
  ForEver
EndIf
eventueller Auslöser des Problems?:
Im obigen Code tritt das Problem nicht mehr auf wenn das Menu entfernt wird.

Problem Lösung für mich:
PB_Window_SizeGadget muss gesetzt werden damit das RepaintEvent immer mittels "maximized" Button funktioniert

CodeBeispiel ohne Fehler und ohne Menu zu entfernen (PBVersion 5.62, 5.61 - Win x86):

Code: Alles auswählen

counter = 0 ; zur Übersichtlichkeit

#__Main__ = 0
If OpenWindow(#__Main__,0,0,800,600,"#PB_Event_Repaint BUG",#PB_Window_TitleBar|#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
  
  If CreateMenu(0, WindowID(#__Main__))
    MenuTitle("Program")
      MenuItem(0,"close")
  EndIf
    
  Repeat
    __event__ = WaitWindowEvent()
    If __event__
      Select __event__
        Case #PB_Event_Repaint
          counter = counter+1
          Debug Str(counter)+") #PB_Event_Repaint"
        Case #PB_Event_CloseWindow
          CloseWindow(EventWindow()):End
      EndSelect
    EndIf
  ForEver
EndIf
Mein Arbeitsumgebung:
(PBVersion 5.62, 5.61 - Win 10 pro x86)

Ich hoffe ich konnte das Problem ausreichend erklären :| ist schon ziehmlich spät :coderselixir:
:lurk:

Re: #PB_Event_Repaint MenuBug

Verfasst: 12.09.2018 08:02
von DePe
Dein Fehlerbeispiel funktioniert bei mir ohne Fehler.
Windows 7 64-Bit, PB 5.70b1 x86
Der Zähler wird richtig hochgezählt. Nur beim Minimieren gibt es kein Repaint-Ereignis, was auch Sinn ergibt.

Peter