Aktuelle Zeit: 29.06.2017 04:06

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Forumsregeln


Die Forumsregeln lesen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: DisplayPopupMenu() unter mac
BeitragVerfasst: 07.05.2017 00:32 
Offline

Registriert: 28.11.2010 15:52
Hallo
DisplayPopupMenu() funzt nicht sobald man das Fenster windows2 schließt und wieder neu erstellt.
Bug ?
getestet unter osx el capitan 10.11
linux, windows alles ok


Code:
Enumeration FormMenu
  #PopupMenu_info
  #Menu_info_1
EndEnumeration

Procedure RefreshHandler()
  DisplayPopupMenu(#PopupMenu_info, WindowID(EventWindow()))
EndProcedure
Procedure ButtonHandler()
  Window_2 = OpenWindow(#PB_Any, 100, 100, 500, 500, "Window_2", #PB_Window_SystemMenu)
  Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "DisplayPopup")
  BindGadgetEvent(Button, @RefreshHandler())
EndProcedure



Window_1 = OpenWindow(#PB_Any, 100, 100, 200, 90, "Click test", #PB_Window_SystemMenu)
CreatePopupMenu(#PopupMenu_info)
MenuItem(#Menu_info_1, "TEST")
Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "OpenWindow")
BindGadgetEvent(Button, @ButtonHandler())

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_CloseWindow
    CloseWindow(EventWindow())
  EndIf
Until Event = #PB_Event_CloseWindow And EventWindow() = Window_1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DisplayPopupMenu() unter mac
BeitragVerfasst: 07.05.2017 09:14 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Das Problem liegt darin, dass in PB unter MacOS anscheinend immer das erste Fenster (Window_1) als Elternfenster in DisplayPopupMenu() angegeben werden muß. Verblüffend ist nur, dass es ja beim ersten Mal in Deinem Beispiel korrekt funktioniert. Du solltest diesen Fehler unbedingt im englischen Bug-Forum für MacOS melden.

Dieses abgeänderte Programm funktioniert unter MacOS auch beim zweiten Versuch, ein zweites Fenster zu öffnen und dort ein Popup-Menü zu öffen:
Code:
Enumeration FormMenu
  #PopupMenu_info
  #Menu_info_1
EndEnumeration

Procedure RefreshHandler()
  Shared Window_1.I
  DisplayPopupMenu(#PopupMenu_info, WindowID(Window_1))
EndProcedure
Procedure ButtonHandler()
  Window_2 = OpenWindow(#PB_Any, 100, 100, 500, 500, "Window_2", #PB_Window_SystemMenu)
  Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "DisplayPopup")
  BindGadgetEvent(Button, @RefreshHandler())
EndProcedure



Window_1 = OpenWindow(#PB_Any, 100, 100, 200, 90, "Click test", #PB_Window_SystemMenu)
CreatePopupMenu(#PopupMenu_info)
MenuItem(#Menu_info_1, "TEST")
Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "OpenWindow")
BindGadgetEvent(Button, @ButtonHandler())

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_CloseWindow
    CloseWindow(EventWindow())
  EndIf
Until Event = #PB_Event_CloseWindow And EventWindow() = Window_1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DisplayPopupMenu() unter mac
BeitragVerfasst: 07.05.2017 13:52 
Offline

Registriert: 28.11.2010 15:52
Das ist auch keine Lösung.
Jetzt wird das EventWindow() immer windows_1 zürückgeben
Code:

Enumeration FormMenu
  #PopupMenu_info
  #Menu_info_1
EndEnumeration

Procedure RefreshHandler()
  Shared Window_1.I
  DisplayPopupMenu(#PopupMenu_info, WindowID(Window_1))
;   DisplayPopupMenu(#PopupMenu_info, WindowID(EventWindow()))
EndProcedure
Procedure ButtonHandler()
  Window_2 = OpenWindow(#PB_Any, 100, 100, 500, 500, "Window_2", #PB_Window_SystemMenu)
  Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "DisplayPopup")
  BindGadgetEvent(Button, @RefreshHandler())
EndProcedure
Procedure menuHandler()
  Shared Window_1.I
 
  FensterEvent = EventWindow()
  If FensterEvent = Window_1
    Debug "DisplayPopup event in Window_1 ?"
  Else
    Debug "DisplayPopup event in Window: " + FensterEvent
  EndIf
EndProcedure


Window_1 = OpenWindow(#PB_Any, 100, 100, 200, 90, "Click test", #PB_Window_SystemMenu)
CreatePopupMenu(#PopupMenu_info)
MenuItem(#Menu_info_1, "TEST")
BindMenuEvent(#PopupMenu_info, #Menu_info_1, @menuHandler())

Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "OpenWindow")
BindGadgetEvent(Button, @ButtonHandler())

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_CloseWindow
    CloseWindow(EventWindow())
  EndIf
Until Event = #PB_Event_CloseWindow And EventWindow() = Window_1




Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DisplayPopupMenu() unter mac
BeitragVerfasst: 07.05.2017 18:58 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
So funktioniert es plattform-unabhängig und zeigt das korrekte Fenster an, in dem das Popup-Menü angezeigt wird (mit Umgehung des Fehlers in MacOS):
Code:
Enumeration FormMenu
  #PopupMenu_info
  #Menu_info_1
EndEnumeration

Procedure RefreshHandler()
  Shared EventWindow.I

  EventWindow = EventWindow()

  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    Shared Window_1.I
    DisplayPopupMenu(#PopupMenu_info, WindowID(Window_1))
  CompilerElse
    DisplayPopupMenu(#PopupMenu_info, WindowID(EventWindow))
  CompilerEndIf
EndProcedure

Procedure ButtonHandler()
  Window_2 = OpenWindow(#PB_Any, 100, 100, 500, 500, "Window_2", #PB_Window_SystemMenu)
  Debug "Window_2 = " + Window_2
  Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "DisplayPopup")
  BindGadgetEvent(Button, @RefreshHandler())
EndProcedure

Procedure MenuHandler()
  Shared EventWindow.I
  Shared Window_1.I
 
  Debug "DisplayPopup event in Window: " + EventWindow
EndProcedure

Window_1 = OpenWindow(#PB_Any, 100, 100, 200, 90, "Click test", #PB_Window_SystemMenu)
Debug "Window_1 = " + Window_1
CreatePopupMenu(#PopupMenu_info)
MenuItem(#Menu_info_1, "TEST")
BindMenuEvent(#PopupMenu_info, #Menu_info_1, @MenuHandler())

Button = ButtonGadget(#PB_Any, 10, 10, 180, 30, "OpenWindow")
BindGadgetEvent(Button, @ButtonHandler())

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_CloseWindow
    CloseWindow(EventWindow())
  EndIf
Until Event = #PB_Event_CloseWindow And EventWindow() = Window_1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DisplayPopupMenu() unter mac
BeitragVerfasst: 10.05.2017 03:06 
Offline

Registriert: 28.11.2010 15:52
:allright:
Danke Shardik !


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


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:  
cron

 


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