(******************************************************************************* * This file is part of otanmi.dpk package. * * For complete information refer to otanmi.dpk file. * *******************************************************************************) { Adapted demonstrate calling HTML Help from Delphi IDE, shortcut F2. Tested with Delphi 7. Miika Nurminen / 2004-09-25 Original Open Tools Menu example by: Miha Remec http://www.miharemec.com/doc/ota-nmi.html } unit otanmi_main; interface uses Windows, Forms, Menus, ExtCtrls, SysUtils, ToolsAPI; type TotanmiNewMenuItem = class private FTimer: TTimer; FInitialized: Boolean; FMainMenu: TMainMenu; FFileMenu: TMenuItem; FNewMenuItem: TMenuItem; procedure OnMenuItemClick(Sender: TObject); public procedure StartTimer; procedure AddMenuItem(Sender: TObject); procedure RemoveMenuItem; end; (* A most simple html help interface. Much more detailed API conversion & examples can be found from ftp://delphi-jedi.org/api/HtmlHlp.zip *) const HH_DISPLAY_TOPIC = $0000; HH_DISPLAY_TOC = $0001; HH_CLOSE_ALL = $0012; function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT; dwData: DWORD): HWND; stdcall; external 'HHCTRL.OCX' name 'HtmlHelpA'; var OTAnmiItem: TotanmiNewMenuItem; procedure Register; implementation { TotanmiNewMenuItem } procedure TotanmiNewMenuItem.StartTimer; begin FTimer := TTimer.Create(nil); FTimer.Interval := 1000; FTimer.OnTimer := AddMenuItem; FTimer.Enabled := True; FInitialized := False; end; procedure TotanmiNewMenuItem.AddMenuItem; var i: Integer; begin FreeAndNil(FTimer); // find Delphi's main menu FMainMenu := (BorlandIDEServices as INTAServices).MainMenu; // find File for i := 0 to FMainMenu.Items.Count - 1 do begin if AnsiSameCaption(FMainMenu.Items[i].Caption, 'Help') then begin FFileMenu := FMainMenu.Items[i]; Break; end; end; FNewMenuItem := TMenuItem.Create(FFileMenu); FNewMenuItem.Caption := 'HtmlHelp'; FNewMenuItem.OnClick := OnMenuItemClick; FNewMenuItem.ShortCut := TextToShortCut('F2'); // find first separator for i := 0 to FFileMenu.Count - 1 do begin if FFileMenu.Items[i].IsLine then begin FFileMenu.Insert(i, FNewMenuItem); Break; end; end; FInitialized := True; end; procedure TotanmiNewMenuItem.RemoveMenuItem; var i: Integer; begin if Assigned(FTimer) then FreeAndNil(FTimer); if not FInitialized then Exit; i := 0; while i < FFileMenu.Count do begin if AnsiSameCaption(FFileMenu.Items[i].Caption, 'mrExperts') then FFileMenu.Remove(FFileMenu.Items[i]) else Inc(i); end; FNewMenuItem.Free; end; procedure TotanmiNewMenuItem.OnMenuItemClick(Sender: TObject); begin // Action here... HtmlHelp(Application.Handle,PChar('myhelp.chm'),HH_DISPLAY_TOC, 0); end; procedure Register; begin OTAnmiItem.StartTimer; end; initialization OTAnmiItem := TotanmiNewMenuItem.Create; finalization OTAnmiItem.RemoveMenuItem; OTAnmiItem.Free; end.