apfel-q ?

MAC OSX spezifisches Forum
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

apfel-q ?

Beitrag von kartmanne »

HI,

ich lese, dass die Tasten-Kombi Apfel-q (Program Quit) per eventmenu() erfragt werden kann. Dazu gips die Konstante #pb_menu_quit

Per AddKeyboardShortcut(window#, #pb_menu_quit, 10) geht das fehlerlos, aber die Abfrage

Select EventMenu()
Case 10

wird nicht angesprungen. Bei anderen zugewiesenen Tasten funktioniert das.

Wie bekomme ich die Äpfel-q-Kombi abgefragt?
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: apfel-q ?

Beitrag von Shardik »

Code: Alles auswählen

OpenWindow(0, 270, 100, 200, 70, "Quit erkennen")

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Menu
      If EventMenu() = #PB_Menu_Quit
        MessageRequester("Info", "Quit im Menü oder <Cmd>+<q> wurde entdeckt!")
        Break
      EndIf
  EndSelect
ForEver
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: apfel-q ?

Beitrag von kartmanne »

HI,

nein, geht nicht.
Ich habe auch das probiert:

Code: Alles auswählen

 

event=WaitWindowEvent()

If event=#PB_Event_Menu And EventMenu()=#PB_Menu_Quit
    MessageRequester("", "apfel-q")  
  EndIf
... auch ohne "event=#PB_Event_Menu And"

addkeybordshortcut habe ich nicht für command q definiert in dem Fenster.

Ich sehe aber in der Mac-menuleiste (nicht die von meiner app), dass dort eine grafische Reaktion stattfindet. meine App wird dort ja als purebasic.0 dargestellt und bildet das einzige Menü in der Mac-Menu-Leiste. Anscheinend wird also schon auf apfel-q reagiert, nur nicht meine app. Meine app öffnet nur Fenster ohne jegliche Menüs, lediglich die Tasten frag ich ab, die ich vorher mit addkeybordshortcut dem Fenster zugewiesen hab.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: apfel-q ?

Beitrag von mk-soft »

Shortcut brauchst du nicht...

Code: Alles auswählen


Enumeration
  #Main
EndEnumeration

;- Main Program
Procedure Main()
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 400, 200, "Mac Menu", #PB_Window_SystemMenu)
    
    ; Enable Fullscreen
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS 
      Protected NewCollectionBehaviour
      NewCollectionBehaviour = CocoaMessage(0, WindowID(#Main), "collectionBehavior") | $80
      CocoaMessage(0, WindowID(#Main), "setCollectionBehavior:", NewCollectionBehaviour)
    CompilerEndIf
    
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      If Not IsMenu(#Main)
        CreateMenu(0, WindowID(#Main))
      EndIf
      MenuItem(#PB_Menu_About, "")
      SetMenuItemText(0, #PB_Menu_About, "&Über")
      MenuItem(#PB_Menu_Preferences, "")
      SetMenuItemText(0, #PB_Menu_Preferences, "Eins&tellungen")
      ;MenuItem(#PB_Menu_Quit, "") ; Not used
      SetMenuItemText(0, #PB_Menu_Quit, "Be&enden")
    CompilerEndIf
    
    ;-- Bind Events
    
    ;-- Main Event Loop
    Repeat
    
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
            Case #PB_Menu_Quit
              Break
              
            Case #PB_Menu_About
              MessageRequester("Über!", "I like Purebasic!", #PB_MessageRequester_Info)
              
            Case #PB_Menu_Preferences
              ;
            CompilerEndIf
            
          EndSelect
          
      EndSelect
      
    ForEver
    
  EndIf

EndProcedure : Main()

End
Oder

Code: Alles auswählen


Enumeration Window
  #Main
EndEnumeration

Enumeration Menu
  #MainMenu
EndEnumeration

Enumeration MenuItem
  CompilerIf #PB_Compiler_OS <> #PB_OS_MacOS
    #PB_Menu_About
    #PB_Menu_Preferences
    #PB_Menu_Quit
  CompilerEndIf
  ;#MainMenu_...
EndEnumeration



;- Main Program
Procedure Main()
    
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 400, 200, "Mac Menu", #PB_Window_SystemMenu)
    
    ; Enable Fullscreen
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS 
      Protected NewCollectionBehaviour
      NewCollectionBehaviour = CocoaMessage(0, WindowID(#Main), "collectionBehavior") | $80
      CocoaMessage(0, WindowID(#Main), "setCollectionBehavior:", NewCollectionBehaviour)
    CompilerEndIf
    
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      If Not IsMenu(#Main)
        CreateMenu(0, WindowID(#Main))
      EndIf
      MenuItem(#PB_Menu_About, "")
      SetMenuItemText(0, #PB_Menu_About, "&Über")
      MenuItem(#PB_Menu_Preferences, "")
      SetMenuItemText(0, #PB_Menu_Preferences, "Eins&tellungen")
      MenuItem(#PB_Menu_Quit, "") ; Not used
      SetMenuItemText(0, #PB_Menu_Quit, "Be&enden")
    CompilerElse
      Protected ProMenu.s
      CreateMenu(#MainMenu, WindowID(#Main))
      MenuTitle("&Ablage")
      MenuItem(#PB_Menu_About, "&Über")
      MenuBar()
      MenuItem(#PB_Menu_Preferences, "Eins&tellungen")
      MenuBar()
      ;MenuItems(#MainMenu_...
      MenuBar()
      MenuItem(#PB_Menu_Quit, "Be&enden")
    CompilerEndIf
    
    ;-- Bind Events
    
    ;-- Main Event Loop
    Repeat
    
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
          
        Case #PB_Event_Menu
          Select EventMenu()
            Case #PB_Menu_Quit
              Break
              
            Case #PB_Menu_About
              MessageRequester("Über!", "I like Purebasic!", #PB_MessageRequester_Info)
              
            Case #PB_Menu_Preferences
              InputRequester("Einstellungen", "Daten:", Daten.s)
            
          EndSelect
          
      EndSelect
      
    ForEver
    
  EndIf

EndProcedure : Main()

End
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: apfel-q ?

Beitrag von Shardik »

kartmanne hat geschrieben:nein, geht nicht.
Was genau geht nicht? Ich habe das Beispiel unter MacOS 10.6.8 (Snow Leopard) mit PB 5.60 x86 in der PureBasic-IDE ausprobiert und sowohl der Klick auf "PureBasic.0" in der Menüleiste und die anschließende Auswahl von "Quit PureBasic.0" wird erkannt als auch das gleichzeitige Drücken von <Cmd> und <q>, wenn das Beispielprogramm den Fokus hat.

Welche Version von Yosemite und welche Version von PureBasic verwendest Du und kompilierst Du mit der x86 oder x64-Version von PureBasic? Testest Du in der IDE oder testest Du die fertig kompilierte App?
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: apfel-q ?

Beitrag von kartmanne »

HI,
- Macbook Pro Mid 2010 (intel i7)
- MacOSX (10.10.5)
- PB5.6 x86
- sowohl über die IDE,
- als auch das compilat (jeweils im Ordner des pb-Projektes, als auch im MacOSX-Programme-Ordner.

"geht nicht" meint, dass ich im Programm den #pb_menu_quit nicht delektiert bekomme. Mein oben zitierter code sollte bei cmd+q die messagebox zeigen. ... die kommt nicht. Das compilat hatte bei jedem Test den Fokus. Der Bereich, in dem sich der code-schnipsel befindet, wird sicher durchlaufen.
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: apfel-q ?

Beitrag von kartmanne »

HI,

puh - hab's gefunden. Ich habe deinen code in einem neuen Projekt ohne alles drumherum probiert, und ging. In meinem code hab ich den Wurm gefunden. Ich frage zwischendurch das eventwindow() ab - und das ist nicht das, was den apfel-q meldet. Damit bekomme ich nicht an der gedachten Stelle apfel-q delektiert. Naja... wer suchet, der findet...

Das eventwindow(), das Apfel-q meldet ist -1. Ist das auf macosx immer so?
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: apfel-q ?

Beitrag von Shardik »

So, ich habe jetzt mein obiges Beispielprogramm auch einmal mit MacOS 10.10.5 (Yosemite) und PB 5.60 x86 in der IDE getestet und mein Programm erkennt sowohl die Auswahl in der Menüleiste von

PureBasic.0 > Quit PureBasic.0

als auch die Tastenkombination <Cmd> plus <q> und zeigt dann jeweils den MessageRequester an. Du hättest als erstes einmal mein Beispielprogramm testen sollen, dann wäre Dir sofort aufgefallen, dass der Einbau in Deinem größeren Projekt das Problem verursacht... :wink:

Schön, dass es jetzt auch in Deinem größeren Projekt funktioniert!
Benutzeravatar
kartmanne
Beiträge: 108
Registriert: 19.03.2015 18:16
Wohnort: Altenstadt
Kontaktdaten:

Re: apfel-q ?

Beitrag von kartmanne »

HI,

naja, ich bin halt kein "programmier-profi". Bei mir wächst Programminhalt/-struktur und Programmiersprachenverständnis und Funktionsinhalt des Projektes (ZES - siehe Signatur) gleichzeitig ... V-Modell-angelehnt könnte man meinen :-)

Dieser Fall hat mich dazu gebracht, meine Ereignis-Abfrage-Struktur wieder zu ändern und dabei zu verschlanken, damit nicht mittendrin eine strukturelle und (für mich) kontextbezogene Ausnahme im code steht. Nebeneffekt ist bei solchen Dinge oft, dass die app schneller wird und/oder weniger CPU-Last verursacht - und in diesem Falle auch möglichst minimal betriebssystem-spezifisch Win/Mac-tauglicher wird.

Mühsam ernährt sich das Hobby-Eichhörnchen :coderselixir:

Danke für eure Geduld mit dem Greenhorn ...
:lurk:
Antworten