Seite 1 von 1

Menu mit Hilfe

Verfasst: 06.03.2007 18:26
von Kai

Code: Alles auswählen

If OpenWindow(0, 0, 0, 640, 480, "Menu mit Hilfe", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 If CreateMenu(0, WindowID(0))
  MenuTitle("Datei")
   MenuItem(0, "Neu")
   MenuItem(1, "Öffnen")
   MenuItem(2, "Speichern")
   MenuItem(3, "Schließen")
   OpenSubMenu("Letzte Dateien")
    MenuItem(0, "1" + Chr(9) + "-")
    MenuItem(1, "2" + Chr(9) + "-")
   CloseSubMenu()
  MenuTitle("Bearbeiten")
   MenuItem(0, "Ausschneiden")
   MenuItem(1, "Kopieren")
   MenuItem(2, "Einfügen")
 EndIf
 
 Global SMnul = GetSubMenu_(MenuID(0), 0)        ;Menu Datei
 Global SMnu2 = GetSubMenu_(SMnul, 4)            ;SubMenu Letzte Dateien
 Global SMnu3 = GetSubMenu_(MenuID(0), 1)        ;Menu Bearbeiten

 If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(WindowWidth(0))
 EndIf
EndIf

Procedure WindowCallback(hWnd, Msg, wParam, lParam)
 Protected Result.l = #PB_ProcessPureBasicEvents
 If hWnd = WindowID(0)
  If Msg = #WM_UNINITMENUPOPUP
   StatusBarText(0, 0, "")
  EndIf
  If Msg = #WM_MENUSELECT
   Select lParam
    Case SMnul
     Select wParam & $FFFF    
      Case 0: StatusBarText(0, 0, "Neu")
      Case 1: StatusBarText(0, 0, "Öffnen")
      Case 2: StatusBarText(0, 0, "Speichern")
      Case 3: StatusBarText(0, 0, "Schließen")
      Case 4: StatusBarText(0, 0, "Letzte Dateien")
     EndSelect
    Case SMnu2
     Select wParam & $FFFF
      Case 0: StatusBarText(0, 0, "Letzte Datei 1")
      Case 1: StatusBarText(0, 0, "Letzte Datei 2")
     EndSelect
    Case SMnu3
     Select wParam & $FFFF
      Case 0: StatusBarText(0, 0, "Ausschneiden")
      Case 1: StatusBarText(0, 0, "Kopieren")
      Case 2: StatusBarText(0, 0, "Einfügen")
     EndSelect
   EndSelect
  EndIf
 EndIf
 ProcedureReturn Result
EndProcedure
SetWindowCallback(@WindowCallback())

While WaitWindowEvent() <> #PB_Event_CloseWindow: Wend

Verfasst: 06.03.2007 19:55
von edel
Wozu ist das "If hWnd = WindowID(0) " im Callback ?

Verfasst: 07.03.2007 10:05
von dige
Coole Idee! Danke Kai.

Das If hWnd = WindowID(0) sollte in diesem Fall eigentlich
nicht notwendig sein, da der Callback ja nur Nachrichten für
dieses Fenster empfängt, oder?

Verfasst: 07.03.2007 10:51
von Green Snake
In diesem Fall ist es notwendig.
Es sei denn, man ändert die Zeile

Code: Alles auswählen

SetWindowCallback(@WindowCallback()) 
zu

Code: Alles auswählen

SetWindowCallback(@WindowCallback(),0) 

Verfasst: 07.03.2007 12:23
von Kai
Habt ihr in diesem Fall natürlich Recht,
hab ich dabei wohl übersehen, da ich normal ein Callback
für alle Fenster mache, wobei ich dann ntürlich das Fenster des Callbacks damit ermitle.

Verfasst: 07.03.2007 16:01
von edel
Green Snake hat geschrieben:In diesem Fall ist es notwendig.
Es sei denn, man ändert die Zeile

Code: Alles auswählen

SetWindowCallback(@WindowCallback()) 
zu

Code: Alles auswählen

SetWindowCallback(@WindowCallback(),0) 
Setzt ein 2. Fenster vorraus und das gibt es in diesem Code nicht,
also ist es nicht notwendig ...