MODULE MenuStrip; (* ========================================================================= Example GPCP .NET WinForms MenuStrip Author : Chris Burrows Created: May 2007 (c) 2007-2008 CFB Software http://www.cfbsoftware.com/gpcp ========================================================================= *) IMPORT Cpm := "[System]System.ComponentModel", Drw := "[System.Drawing]System.Drawing", Sys := "[mscorlib]System", Text := "[mscorlib]System.Text", Wfm := "[System.Windows.Forms]System.Windows.Forms", WinMain; TYPE MenuForm = POINTER TO RECORD (Wfm.Form) components : Cpm.Container; mainMenu: Wfm.MenuStrip; fileMenu: Wfm.ToolStripMenuItem; openMenu: Wfm.ToolStripMenuItem; saveMenu: Wfm.ToolStripMenuItem; saveAsMenu: Wfm.ToolStripMenuItem; separatorMenu: Wfm.ToolStripSeparator; exitMenu: Wfm.ToolStripMenuItem; helpMenu: Wfm.ToolStripMenuItem; aboutMenu: Wfm.ToolStripMenuItem; statusBar: Wfm.StatusBar END; VAR frm: MenuForm; (* ==================================================================== *) PROCEDURE (frm: MenuForm) Dispose*(disposing: BOOLEAN); BEGIN IF disposing THEN IF frm.components # NIL THEN frm.components.Dispose() END; frm.Dispose^(disposing) END END Dispose; (* ==================================================================== *) PROCEDURE RemoveNonAlpha(s: Sys.String): Sys.String; VAR ch: CHAR; i, index, length: INTEGER; sb: Text.StringBuilder; BEGIN length := s.get_Length(); sb := Text.StringBuilder.init(length); FOR i := 0 TO length - 1 DO ch := s.get_Chars(i); IF ((ch >= 'a') & (ch <= 'z')) OR ((ch >= 'A') & (ch <= 'Z')) OR (ch = ' ') THEN sb := sb.Append(ch) END END; RETURN sb.ToString() END RemoveNonAlpha; (* ==================================================================== *) PROCEDURE (frm: MenuForm) MenuAction(sender: Sys.Object; e: Sys.EventArgs), NEW; VAR caption: Sys.String; BEGIN caption := sender(Wfm.ToolStripMenuItem).get_Text(); caption := RemoveNonAlpha(caption); frm.statusBar.set_Text(caption + ' selected') END MenuAction; (* ==================================================================== *) PROCEDURE (frm: MenuForm) ExitAction(sender: Sys.Object; e: Sys.EventArgs), NEW; BEGIN frm.Close() END ExitAction; (* ==================================================================== *) PROCEDURE (frm: MenuForm) CreateMainMenu(), NEW; VAR sc: Wfm.Shortcut; i: INTEGER; BEGIN (* Initialise menu items *) frm.mainMenu := Wfm.MenuStrip.init(); frm.fileMenu := Wfm.ToolStripMenuItem.init(); frm.openMenu := Wfm.ToolStripMenuItem.init(); frm.saveMenu := Wfm.ToolStripMenuItem.init(); frm.saveAsMenu := Wfm.ToolStripMenuItem.init(); frm.separatorMenu := Wfm.ToolStripSeparator.init(); frm.exitMenu := Wfm.ToolStripMenuItem.init(); frm.helpMenu := Wfm.ToolStripMenuItem.init(); frm.aboutMenu := Wfm.ToolStripMenuItem.init(); (* Set menu item captions, shortcuts and actions *) frm.fileMenu.set_Text("&File"); frm.openMenu.set_Text("&Open..."); frm.openMenu.set_ShortcutKeys(sc.CtrlO); REGISTER(frm.openMenu.Click, frm.MenuAction); frm.saveMenu.set_Text("&Save"); frm.saveMenu.set_ShortcutKeys(sc.CtrlS); REGISTER(frm.saveMenu.Click, frm.MenuAction); frm.saveAsMenu.set_Text("Save &As..."); REGISTER(frm.saveAsMenu.Click, frm.MenuAction); frm.exitMenu.set_Text("E&xit"); REGISTER(frm.exitMenu.Click, frm.ExitAction); frm.helpMenu.set_Text("&Help"); frm.aboutMenu.set_Text("&About"); REGISTER(frm.aboutMenu.Click, frm.MenuAction); (* Build the menu structure *) i := frm.mainMenu.get_Items().Add(frm.fileMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.openMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.saveMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.saveAsMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.separatorMenu); i := frm.fileMenu.get_DropDownItems().Add(frm.exitMenu); i := frm.mainMenu.get_Items().Add(frm.helpMenu); i := frm.helpMenu.get_DropDownItems().Add(frm.aboutMenu); frm.get_Controls().Add(frm.mainMenu) END CreateMainMenu; (* ==================================================================== *) PROCEDURE (frm: MenuForm) InitializeComponent(), NEW; CONST frmWidth = 400; frmHeight = 300; statusHeight = 24; BEGIN NEW(frm.components); NEW(frm.statusBar); frm.SuspendLayout(); frm.set_Text("WinForms Menu Example"); frm.set_AutoScaleBaseSize(Drw.Size.init(5, 13)); frm.set_ClientSize(Drw.Size.init(frmWidth, frmHeight)); frm.set_FormBorderStyle(Wfm.FormBorderStyle.Sizable); frm.get_Controls().Add(frm.statusBar); frm.statusBar.set_Location(Drw.Point.init(0, frmHeight - statusHeight)); frm.statusBar.set_ShowPanels(FALSE); frm.statusBar.set_Size(Drw.Size.init(frmWidth, statusHeight)); frm.CreateMainMenu(); frm.ResumeLayout(FALSE) END InitializeComponent; (* ==================================================================== *) BEGIN NEW(frm); frm.InitializeComponent(); Wfm.Application.EnableVisualStyles(); Wfm.Application.Run(frm) END MenuStrip.