Menu mit Hilfe

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Menu mit Hilfe

Beitrag 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
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Wozu ist das "If hWnd = WindowID(0) " im Callback ?
Benutzeravatar
dige
Beiträge: 1241
Registriert: 08.09.2004 08:53

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag 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) 
-.-"
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag 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.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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 ...
Antworten