unit MenuItem; // Example wizard that adds a menu item to Delphi's menu bar. // Edit the PopupMenu1 component using Delphi's normal // menu editor. The wizard moves all the menu items from the // popup menu to Delphi's menu bar. When the wizard is freed, // it destroys the data module. The data module still owns the // menu item components, so it frees them automatically. interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ToolsAPI, Menus; type TWizardDataModule = class(TDataModule) PopupMenu1: TPopupMenu; Test1: TMenuItem; procedure Test1Click(Sender: TObject); procedure WizardDataModuleCreate(Sender: TObject); procedure WizardDataModuleDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var WizardDataModule: TWizardDataModule; procedure Register; implementation {$R *.DFM} type TWizard = class(TInterfacedObject, IOTAWizard, IOTANotifier) public procedure AfterSave; procedure BeforeSave; procedure Destroyed; procedure Execute; procedure Modified; function GetState: TWizardState; function GetIDString: string; function GetName: string; constructor Create; destructor Destroy; override; end; procedure Register; begin RegisterPackageWizard(TWizard.Create); end; procedure TWizardDataModule.Test1Click(Sender: TObject); begin ShowMessage('Test menu item!'); end; procedure TWizardDataModule.WizardDataModuleDestroy(Sender: TObject); begin WizardDataModule := nil; end; procedure TWizardDataModule.WizardDataModuleCreate(Sender: TObject); var EditMenu: TMenuItem; InsertPosition: Integer; Item: TMenuItem; I: Integer; begin EditMenu := (BorlandIDEServices as INTAServices).MainMenu.Items[1]; // Move all the items from PopupMenu1 to the Edit menu, // right after SelectAll. // Start by finding where to insert the new item. InsertPosition := EditMenu.Count; // default is at end of menu for I := 0 to EditMenu.Count-1 do if CompareText(EditMenu[I].Name, 'EditSelectAll') = 0 then begin InsertPosition := I; Break; end; for I := PopupMenu1.Items.Count-1 downto 0 do begin // Remove the item from the popup menu. Item := PopupMenu1.Items[I]; PopupMenu1.Items.Delete(I); // Then add it to Delphi's menu. EditMenu.Insert(InsertPosition, Item); end; end; { TWizard } constructor TWizard.Create; begin WizardDataModule := TWizardDataModule.Create(nil); end; destructor TWizard.Destroy; begin WizardDataModule.Free; end; function TWizard.GetIDString: string; begin Result := 'Tempest Software.Menu Item Example Wizard'; end; function TWizard.GetName: string; begin Result := 'Menu Item Example'; end; // The following are stubs that Delphi never calls. procedure TWizard.AfterSave; begin end; procedure TWizard.BeforeSave; begin end; procedure TWizard.Destroyed; begin end; procedure TWizard.Execute; begin end; function TWizard.GetState: TWizardState; begin Result := []; end; procedure TWizard.Modified; begin end; end.