Aktuelle Zeit: 06.06.2020 19:26

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Menu Verhalten mit unterschiedlichen Subsystemen
BeitragVerfasst: 09.01.2020 12:28 
Offline

Registriert: 09.02.2017 13:54
Hallo, Leute ....

Ich habe da ein seltsames Verhalten bei der Verwendung von qt und gtk sowie bei Verwendung von Enumeration und #pb_Any bemerkt. Und ich kann mir mittlerweile keinen Reim mehr darauf machen.
Vielleicht sieht jemand von euch was da los ist und kann mir das mal erklären.

Also folgendes:
Ganz kleine App mit 2 Buttons und einem Menu.

Im vorliegenden Code wird lediglich über den Debugger jeweils "hat funktioniert" ausgegeben.

- Variante 1 mit qt als Subsystem und #pb_Any für die WindowsId

Code:
Global myWin,myButton0,myButton1

Procedure showWindow()
  myWin = OpenWindow(#PB_Any, 0, 0, 300, 150, "", #PB_Window_SystemMenu)

  mainMenu = CreateMenu(#PB_Any, WindowID(myWin))
  MenuTitle("Menu")
  MenuItem(1, "Open")

  myButton0 = ButtonGadget(#PB_Any, 100, 25, 100, 30, "Button_0")
  myButton1 = ButtonGadget(#PB_Any, 100, 60, 100, 30, "Button_1")
EndProcedure
 
showWindow() 
Repeat
 
;   myeW = EventWindow()
  Event=WaitWindowEvent()
  myeW = EventWindow()

    Select myeW
      Case myWin
        Select Event
          Case #PB_Event_Menu ; ein Menu wurde bedient

           Select EventMenu() ;welcher Menupunkt?
             Case 1
               Debug "hat funktioniert"
           EndSelect
         Case #PB_Event_Gadget
           Select EventGadget()
             Case myButton0, myButton1
               Debug "hat funktioniert"
           EndSelect
       EndSelect
    EndSelect
Until Event = #PB_Event_CloseWindow


wenn die Buttons angeklickt werden wird das Event weitergeleitet und es erfolgt korrekt "hat funktioniert"
wird das Menu angeklickt (nur erster Menupunkt ist wählbar) erfolgt NICHTS
Vertausche ich jetzt die beiden Zeilen
Event=WaitWindowEvent()
myeW = EventWindow()

zu
myeW = EventWindow()
Event=WaitWindowEvent()

wird auch die Ausgabe zum Menu korrekt angesteuert.

- Variante 2 mit gtk2 als Subsystem -> alles korrekt, ohne Umstellen der beiden obigen Zeilen

- Variante 3 mit einer Enumeration für die WindowsId -> beide Subsysteme liefern korrekte Ergebnisse.

Code:
Enumeration
  #myWin
EndEnumeration

Global myWin,myButton0,myButton1

Procedure showWindow()
  OpenWindow(#myWin, 0, 0, 300, 150, "", #PB_Window_SystemMenu)

  mainMenu = CreateMenu(#PB_Any, WindowID(#myWin))
  MenuTitle("Menu")
  MenuItem(1, "Open")

  myButton0 = ButtonGadget(#PB_Any, 100, 25, 100, 30, "Button_0")
  myButton1 = ButtonGadget(#PB_Any, 100, 60, 100, 30, "Button_1")
EndProcedure


showWindow() 

Repeat
 
  Event=WaitWindowEvent()
  myeW = EventWindow()
 
    Select myeW
      Case #myWin
        Select Event
          Case #PB_Event_Menu ; ein Menu wurde bedient

           Select EventMenu() ;welcher Menupunkt?
             Case 1
               Debug "hat funktioniert"
           EndSelect
         Case #PB_Event_Gadget
           Select EventGadget()
             Case myButton0, myButton1
               Debug "hat funktioniert"
           EndSelect
       EndSelect
    EndSelect
Until Event = #PB_Event_CloseWindow


Wie kann das sein?
WaitWindowsEvent sollte in jedem Fall doch VOR EventWindos ausgeführt werden?
Wie kann eine Enumeration sich anders verhalten als eine Zuweisung mit #Pb_Any?
Was haben die Subsysteme für Unterschiede?
Da das ja in Kombination von Subsystem + ID-Zuweisung erfolgt ... ist das in Bug in PB ? oder im Subsystem ? oder bin ich einfach zu blöde? :oops: :cry:
Da das Verhalten am Laptop sowie am Desktop vorliegt, kann's kaum die Hardware sein

Für erklärende Hilfe wäre ich sehr, sehr dankbar.
Das ganze kostete mich jetzt schon STUNDEN !!!!

.... Peter ....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Menu Verhalten mit unterschiedlichen Subsystemen
BeitragVerfasst: 09.01.2020 14:49 
Offline

Registriert: 09.02.2017 13:54
noch zur Ergänzung:
BS: Linux Mint 18 Sarah, LXDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Menu Verhalten mit unterschiedlichen Subsystemen
BeitragVerfasst: 09.01.2020 17:51 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Mit WaitWindowEvent wird EIN Event aus dem Event Buffer abgeholt.
Sollte es kein Event im Buffer geben, wartet dieser bis ein Event aufläuft.

Die Abfrage von EventWindow, EventMenu, EventGadget -> EventType, etc
sind nur nach einem Aufruf von WaitWindowEvent gültig bis zum nächsten WaitWindowEvent.

Die Abfrage EventMenu() ist nur gültig, wenn auch ein Event #PB_Event_Menu kommt.
Die Abfrage EventGadget() ist nur gültig, wenn auch ein Event #PB_Event_Gadget kommt. (Danach EventType() Abfragen)
Die Abfrage EventWindow() ist nur gültig, wenn auch ein Event #PB_Event_CloseWindow, #PB_Event_SizeWindow kommt.
etc

Somit ist folgender Aufbau und Auswertung erforderlich um die Events nacheinander abzufragen
Code:
;-TOP

Procedure Main()
  If OpenWindow(0, 100, 100, 400, 300, "Window", #PB_Window_SystemMenu)
    CreateMenu(0, WindowID(0))
    MenuTitle("Ablage")
    MenuItem(1, "Be&enden")
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_Menu
          Select EventMenu()
              ; MacOS Menu
              CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
              Case #PB_Menu_Quit
                Break
              CompilerEndIf
             
            Case 1
              Break
             
          EndSelect
         
        Case #PB_Event_Gadget
          Select EventGadget()
            Case 0
              Select EventType()
                Case #PB_EventType_LeftClick
                 
              EndSelect
             
            Case 1
              Select EventType()
                Case #PB_EventType_LeftClick
                 
              EndSelect
             
          EndSelect
         
        Case #PB_Event_Timer
          Select EventTimer()
            Case 0 ; <- Timer Nummer
                   ; TODO
          EndSelect
         
        Case #PB_Event_SizeWindow
          Select EventWindow()
            Case 0
              ; TODO
             
          EndSelect
         
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case 0
              Break
             
          EndSelect
         
      EndSelect
    ForEver
   
  EndIf
 
EndProcedure : Main()

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Menu Verhalten mit unterschiedlichen Subsystemen
BeitragVerfasst: 09.01.2020 18:09 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
P.S.

CreateMenu mit #PB_Any hat wohl ein Bug unter Linux.
Wurde schon mal gemeldet...

Code:
CreateMenu(#PB_Any, ...)


Also erst mal CreateMenu ohne #PB_Any arbeiten...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye