[Erledigt] Event aus erweitertem Fenster-Systemmenü abfragen

Für allgemeine Fragen zur Programmierung mit PureBasic.
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

[Erledigt] Event aus erweitertem Fenster-Systemmenü abfragen

Beitrag von fabulouspaul »

Hallo Gemeinde,

ich möchte in einem Programm das Systemmenü des Programmfensters (also wenn man auf das Programm-Icon in der Titelzeile Klickt) nutzen, um eine kurze Programm-Info anzuzeigen.

Dazu habe ich bei RSBASIC ein paar Zeilen gefunden, die das Systemmenü des Fensters erweitern - nur bekomme ich den Event, der ausgelöst wird (werden sollte) wenn man den Menüeintrag anklickt, nicht gegriffen.
Hier mal der Code:

Code: Alles auswählen

EnableExplicit

Define event

#ProgrammInfo = $4321

; RSBASIC Snipet zum Einfügen einer Menüzeile im Systemenü eines Fensters
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  AppendMenu_(GetSystemMenu_(WindowID(0),#False),#MF_SEPARATOR,0,"")
  AppendMenu_(GetSystemMenu_(WindowID(0),#False),#MF_STRING, #ProgrammInfo, "Programm-Info")
  
  Repeat 
    event = WaitWindowEvent() 
    
    If event = #ProgrammInfo
      Debug "Programm-Info"
    EndIf
    
  Until event = #PB_Event_CloseWindow
EndIf
Wenn ich den Eintrag bei MS zu AppendMenu_() richtig deute, kann man dem neuen Eintrag einen Event-Wert mitgeben, aber das funktioniert nicht. :?

Wie geht das?
Zuletzt geändert von fabulouspaul am 12.07.2021 14:22, insgesamt 1-mal geändert.
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: Event aus erweitertem Fenster-Systemmenü abfragen

Beitrag von ST4242 »

Hallo,
versuche es mal mit einem Windows Callback - offensichtlich wird dieser Parameter nicht von PB verarbeitet wird.

Grüße

Code: Alles auswählen

EnableExplicit

Global CallbackAdresse
Global Programminfo.i

Procedure GetSystemMenue(hWnd,uMsg,wParam.l,lParam.l)  ;hier können die Tasten abgefragt werden
                                                       ;  Debug "Im System Menü " +Str(wParam)+" - "+Str(lParam)
  If wParam=Programminfo : Debug " ProgrammInfo " +Str(wParam)+" - "+Str(lParam):EndIf ; hier kann das ereigniss direkt im Callback verarbeitet werden
  If wParam=Programminfo +1: Debug "Test " +Str(wParam)+" - "+Str(lParam):EndIf
  If wParam=Programminfo Or wparam=Programminfo+1:PostEvent(wParam):EndIf ; so kann es wieder an die hauptschleife zurückgesendet werden
  ProcedureReturn CallWindowProc_(CallbackAdresse,hWnd,uMsg,wParam,lParam)  ; fortsetzen der Event verarbeitung
EndProcedure

Define event

ProgrammInfo = #PB_Event_FirstCustomValue


; RSBASIC Snipet zum Einfügen einer Menüzeile im Systemenü eines Fensters
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  AppendMenu_(GetSystemMenu_(WindowID(0),#False),#MF_SEPARATOR,0,"")
  AppendMenu_(GetSystemMenu_(WindowID(0),#False),#MF_STRING, ProgrammInfo, "Programm-Info")
  AppendMenu_(GetSystemMenu_(WindowID(0),#False),#MF_STRING, ProgrammInfo+1, "Test")

   CallbackAdresse = SetWindowLongPtr_(WindowID(0),#GWL_WNDPROC,@GetSystemMenue())
  Repeat 
    event = WaitWindowEvent()
    If event=Programminfo:Debug "Program Info - im Code":EndIf ; muß vorher vom Callback als PostEvent erzeugt sein

  Until event = #PB_Event_CloseWindow
EndIf
fabulouspaul
Beiträge: 120
Registriert: 01.04.2011 21:59

Re: Event aus erweitertem Fenster-Systemmenü abfragen

Beitrag von fabulouspaul »

Prima, so geht's!

Vielen Dank für die prompte Hilfe! :allright:
Antworten