Marco Web Center

[an error occurred while processing this directive]

Home: Code Repository: Mastering Delphi 5

Project MSGFLOW

Project Structure


MSGFLOW.DPR

program Msgflow;

uses
  Forms,
  FlowF in 'FlowF.pas' {Form1},
  Mlist in 'MLIST.PAS',
  Unit2 in 'UNIT2.PAS' {Form2};

{$R *.RES}

begin
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

FLOWF.PAS

unit FlowF;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Panel1: TPanel;
    SpyButton: TSpeedButton;
    SkipButton: TSpeedButton;
    ClearButton: TSpeedButton;
    ShowButton: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure SpyButtonClick(Sender: TObject);
    procedure SkipButtonClick(Sender: TObject);
    procedure ClearButtonClick(Sender: TObject);
    procedure ShowButtonClick(Sender: TObject);
  private
    Skipping, Spying: Boolean;
    LastMessage: TMsg;
  public
    procedure HandleMessage (var Msg: TMsg;
      var Handled: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  Mlist,      {define the string list of messages}
  Unit2;      {define the secondary form, TForm2}

procedure TForm1.FormCreate(Sender: TObject);
begin
  {set the OnMessage handler}
  Application.OnMessage := HandleMessage;
  Skipping := False;
  Spying := False;
end;

procedure TForm1.HandleMessage (var Msg: TMsg;
  var Handled: Boolean);
var
  Line, Caption: string;
begin
  // initialize long strings
  SetLength (Line, 200);
  SetLength (Caption, 50);

  {output the new message only if the spying flag is true,
  the message is not for the list box. If the skipping flag
  is true, ignore a message equal to the previous one}
  if Spying and (Msg.Hwnd <> Listbox1.Handle) and not
    (Skipping and (LastMessage.Message = Msg.Message) and
    (LastMessage.Hwnd = Msg.Hwnd)) then
  begin
    // output the hex value of the handle
    Line := 'Hwnd:' + IntToHex (Msg.Hwnd, 4);

    {get the caption from the handle, using an API function}
    GetWindowText (Msg.Hwnd, PChar (Caption), Length (Caption));
    Caption := PChar (Caption); // re-cast
    if Caption = '' then
      Caption := 'Unknown';

    // format the caption in 15 characters
    AppendStr (Line, Format (' ( %15s ) ', [Caption]));

    {access the MsgList object, using the function
    exported by the MList unit}
    AppendStr (Line, GetMessageName (Msg.Message));

    {add the hexadecimal output of the two message parameters}
    AppendStr (Line, 'Params: ' + IntToHex (Msg.wParam, 8) +
      ', ' + IntToHex (Msg.lParam, 8));

    {add the line, selecting it}
    ListBox1.ItemIndex := ListBox1.Items.Add (Line);

    {store the message, to compare it with the next one}
    LastMessage := Msg;
  end;
end;

procedure TForm1.SpyButtonClick(Sender: TObject);
begin
  Spying := SpyButton.Down;
end;

procedure TForm1.SkipButtonClick(Sender: TObject);
begin
  Skipping := SkipButton.Down;
end;

procedure TForm1.ClearButtonClick(Sender: TObject);
begin
  ListBox1.Clear;
end;

procedure TForm1.ShowButtonClick(Sender: TObject);
var
  SecondForm: TForm2;
begin
  {create and show the second form}
  SecondForm := TForm2.Create (Application);
  SecondForm.Show;
end;

end.

MLIST.PAS

unit Mlist;

interface

uses
  SysUtils, Classes, Messages;

var
  MsgList: TStringList;

function GetMessageName (Msg: Integer): string;

 implementation

function GetMessageName (Msg: Integer): string;
var
  N: Integer;
begin
  N := MsgList.IndexOfObject (TObject(Msg));
  if N >= 0 then
    Result := MsgList.Strings [N]
  else if Msg >= wm_User then
    Result := 'wm_User message     '
  else
    Result := 'Unknown message     ';
end;

initialization
  MsgList := TStringList.Create;
  MsgList.AddObject ('wm_Null             ', TObject($0000));
  MsgList.AddObject ('wm_Create           ', TObject($0001));
  MsgList.AddObject ('wm_Destroy          ', TObject($0002));
  MsgList.AddObject ('wm_Move             ', TObject($0003));
  MsgList.AddObject ('wm_Size             ', TObject($0005));
  MsgList.AddObject ('wm_Activate         ', TObject($0006));
  MsgList.AddObject ('wm_SetFocus         ', TObject($0007));
  MsgList.AddObject ('wm_KillFocus        ', TObject($0008));
  MsgList.AddObject ('wm_Enable           ', TObject($000A));
  MsgList.AddObject ('wm_SetRedraw        ', TObject($000B));
  MsgList.AddObject ('wm_SetText          ', TObject($000C));
  MsgList.AddObject ('wm_GetText          ', TObject($000D));
  MsgList.AddObject ('wm_GetTextLength    ', TObject($000E));
  MsgList.AddObject ('wm_Paint            ', TObject($000F));
  MsgList.AddObject ('wm_Close            ', TObject($0010));
  MsgList.AddObject ('wm_QueryEndSession  ', TObject($0011));
  MsgList.AddObject ('wm_Quit             ', TObject($0012));
  MsgList.AddObject ('wm_QueryOpen        ', TObject($0013));
  MsgList.AddObject ('wm_EraseBkGnd       ', TObject($0014));
  MsgList.AddObject ('wm_SysColorChange   ', TObject($0015));
  MsgList.AddObject ('wm_EndSession       ', TObject($0016));
  MsgList.AddObject ('wm_SystemError      ', TObject($0017));
  MsgList.AddObject ('wm_ShowWindow       ', TObject($0018));
  MsgList.AddObject ('wm_CtlColor         ', TObject($0019));
  MsgList.AddObject ('wm_WinIniChange     ', TObject($001A));
  MsgList.AddObject ('wm_DevModeChange    ', TObject($001B));
  MsgList.AddObject ('wm_ActivateApp      ', TObject($001C));
  MsgList.AddObject ('wm_FontChange       ', TObject($001D));
  MsgList.AddObject ('wm_TimeChange       ', TObject($001E));
  MsgList.AddObject ('wm_CancelMode       ', TObject($001F));
  MsgList.AddObject ('wm_SetCursor        ', TObject($0020));
  MsgList.AddObject ('wm_MouseActivate    ', TObject($0021));
  MsgList.AddObject ('wm_ChildActivate    ', TObject($0022));
  MsgList.AddObject ('wm_QueueSync        ', TObject($0023));
  MsgList.AddObject ('wm_GetMinMaxInfo    ', TObject($0024));
  MsgList.AddObject ('wm_PaintIcon        ', TObject($0026));
  MsgList.AddObject ('wm_IconEraseBkGnd   ', TObject($0027));
  MsgList.AddObject ('wm_NextDlgCtl       ', TObject($0028));
  MsgList.AddObject ('wm_SpoolerStatus    ', TObject($002A));
  MsgList.AddObject ('wm_DrawItem         ', TObject($002B));
  MsgList.AddObject ('wm_MeasureItem      ', TObject($002C));
  MsgList.AddObject ('wm_DeleteItem       ', TObject($002D));
  MsgList.AddObject ('wm_VKeyToItem       ', TObject($002E));
  MsgList.AddObject ('wm_CharToItem       ', TObject($002F));
  MsgList.AddObject ('wm_SetFont          ', TObject($0030));
  MsgList.AddObject ('wm_GetFont          ', TObject($0031));
  MsgList.AddObject ('wm_QueryDragIcon    ', TObject($0037));
  MsgList.AddObject ('wm_CompareItem      ', TObject($0039));
  MsgList.AddObject ('wm_Compacting       ', TObject($0041));
  MsgList.AddObject ('wm_CommNotify       ', TObject($0044));
  MsgList.AddObject ('wm_WindowPosChanging', TObject($0046));
  MsgList.AddObject ('wm_WindowPosChanged ', TObject($0047));
  MsgList.AddObject ('wm_Power            ', TObject($0048));
  MsgList.AddObject ('wm_CopyData         ', TObject($004A));
  MsgList.AddObject ('wm_CancelJournal    ', TObject($004B));
  MsgList.AddObject ('wm_Notify           ', TObject($004E));
  MsgList.AddObject ('wm_StyleChanging    ', TObject($007C));
  MsgList.AddObject ('wm_StyleChanged     ', TObject($007D));
  MsgList.AddObject ('wm_GetIcon          ', TObject($007F));
  MsgList.AddObject ('wm_SetIcon          ', TObject($0080));
  MsgList.AddObject ('wm_NCCreate         ', TObject($0081));
  MsgList.AddObject ('wm_NCDestroy        ', TObject($0082));
  MsgList.AddObject ('wm_NCCalcSize       ', TObject($0083));
  MsgList.AddObject ('wm_NCHitTest        ', TObject($0084));
  MsgList.AddObject ('wm_NCPaint          ', TObject($0085));
  MsgList.AddObject ('wm_NCActivate       ', TObject($0086));
  MsgList.AddObject ('wm_GetDlgCode       ', TObject($0087));
  MsgList.AddObject ('wm_NCMouseMove      ', TObject($00A0));
  MsgList.AddObject ('wm_NCLButtonDown    ', TObject($00A1));
  MsgList.AddObject ('wm_NCLButtonUp      ', TObject($00A2));
  MsgList.AddObject ('wm_NCLButtonDblClk  ', TObject($00A3));
  MsgList.AddObject ('wm_NCRButtonDown    ', TObject($00A4));
  MsgList.AddObject ('wm_NCRButtonUp      ', TObject($00A5));
  MsgList.AddObject ('wm_NCRButtonDblClk  ', TObject($00A6));
  MsgList.AddObject ('wm_NCMButtonDown    ', TObject($00A7));
  MsgList.AddObject ('wm_NCMButtonUp      ', TObject($00A8));
  MsgList.AddObject ('wm_NCMButtonDblClk  ', TObject($00A9));
  MsgList.AddObject ('wm_KeyDown          ', TObject($0100));
  MsgList.AddObject ('wm_KeyUp            ', TObject($0101));
  MsgList.AddObject ('wm_Char             ', TObject($0102));
  MsgList.AddObject ('wm_DeadChar         ', TObject($0103));
  MsgList.AddObject ('wm_SysKeyDown       ', TObject($0104));
  MsgList.AddObject ('wm_SysKeyUp         ', TObject($0105));
  MsgList.AddObject ('wm_SysChar          ', TObject($0106));
  MsgList.AddObject ('wm_SysDeadChar      ', TObject($0107));
  MsgList.AddObject ('wm_InitDialog       ', TObject($0110));
  MsgList.AddObject ('wm_Command          ', TObject($0111));
  MsgList.AddObject ('wm_SysCommand       ', TObject($0112));
  MsgList.AddObject ('wm_Timer            ', TObject($0113));
  MsgList.AddObject ('wm_HScroll          ', TObject($0114));
  MsgList.AddObject ('wm_VScroll          ', TObject($0115));
  MsgList.AddObject ('wm_InitMenu         ', TObject($0116));
  MsgList.AddObject ('wm_InitMenuPopup    ', TObject($0117));
  MsgList.AddObject ('wm_MenuSelect       ', TObject($011F));
  MsgList.AddObject ('wm_MenuChar         ', TObject($0120));
  MsgList.AddObject ('wm_EnterIdle        ', TObject($0121));
  MsgList.AddObject ('wm_CtlColorMsgbox   ', TObject($0132));
  MsgList.AddObject ('wm_CtlColorEdit     ', TObject($0133));
  MsgList.AddObject ('wm_CtlColorListbox  ', TObject($0134));
  MsgList.AddObject ('wm_CtlColorBtn      ', TObject($0135));
  MsgList.AddObject ('wm_CtlColorDlg      ', TObject($0136));
  MsgList.AddObject ('wm_CtlColorScrollbar', TObject($0137));
  MsgList.AddObject ('wm_CtlColorStatic   ', TObject($0138));
  MsgList.AddObject ('wm_MouseMove        ', TObject($0200));
  MsgList.AddObject ('wm_LButtonDown      ', TObject($0201));
  MsgList.AddObject ('wm_LButtonUp        ', TObject($0202));
  MsgList.AddObject ('wm_LButtonDblClk    ', TObject($0203));
  MsgList.AddObject ('wm_RButtonDown      ', TObject($0204));
  MsgList.AddObject ('wm_RButtonUp        ', TObject($0205));
  MsgList.AddObject ('wm_RButtonDblClk    ', TObject($0206));
  MsgList.AddObject ('wm_MButtonDown      ', TObject($0207));
  MsgList.AddObject ('wm_MButtonUp        ', TObject($0208));
  MsgList.AddObject ('wm_MButtonDblClk    ', TObject($0209));
  MsgList.AddObject ('wm_ParentNotify     ', TObject($0210));
  MsgList.AddObject ('wm_MDICreate        ', TObject($0220));
  MsgList.AddObject ('wm_MDIDestroy       ', TObject($0221));
  MsgList.AddObject ('wm_MDIActivate      ', TObject($0222));
  MsgList.AddObject ('wm_MDIRestore       ', TObject($0223));
  MsgList.AddObject ('wm_MDINext          ', TObject($0224));
  MsgList.AddObject ('wm_MDIMaximize      ', TObject($0225));
  MsgList.AddObject ('wm_MDITile          ', TObject($0226));
  MsgList.AddObject ('wm_MDICascade       ', TObject($0227));
  MsgList.AddObject ('wm_MDIIconArrange   ', TObject($0228));
  MsgList.AddObject ('wm_MDIGetActive     ', TObject($0229));
  MsgList.AddObject ('wm_MDISetMenu       ', TObject($0230));
  MsgList.AddObject ('wm_DropFiles        ', TObject($0233));
  MsgList.AddObject ('wm_MDIRefreshMenu   ', TObject($0234));
  MsgList.AddObject ('wm_Cut              ', TObject($0300));
  MsgList.AddObject ('wm_Copy             ', TObject($0301));
  MsgList.AddObject ('wm_Paste            ', TObject($0302));
  MsgList.AddObject ('wm_Clear            ', TObject($0303));
  MsgList.AddObject ('wm_Undo             ', TObject($0304));
  MsgList.AddObject ('wm_RenderFormat     ', TObject($0305));
  MsgList.AddObject ('wm_RenderAllFormats ', TObject($0306));
  MsgList.AddObject ('wm_DestroyClipboard ', TObject($0307));
  MsgList.AddObject ('wm_DrawClipboard    ', TObject($0308));
  MsgList.AddObject ('wm_PaintClipboard   ', TObject($0309));
  MsgList.AddObject ('wm_VScrollClipboard ', TObject($030A));
  MsgList.AddObject ('wm_SizeClipboard    ', TObject($030B));
  MsgList.AddObject ('wm_AskCBFormatName  ', TObject($030C));
  MsgList.AddObject ('wm_ChangeCBChain    ', TObject($030D));
  MsgList.AddObject ('wm_HScrollClipboard ', TObject($030E));
  MsgList.AddObject ('wm_QueryNewPalette  ', TObject($030F));
  MsgList.AddObject ('wm_PaletteIsChanging', TObject($0310));
  MsgList.AddObject ('wm_PaletteChanged   ', TObject($0311));
end.

UNIT2.PAS

unit Unit2;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Menus;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    ComboBox1: TComboBox;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Exit1: TMenuItem;
    N1: TMenuItem;
    PrintSetup1: TMenuItem;
    Print1: TMenuItem;
    N2: TMenuItem;
    SaveAs1: TMenuItem;
    Save1: TMenuItem;
    Open1: TMenuItem;
    New1: TMenuItem;
    Edit2: TMenuItem;
    Object1: TMenuItem;
    Links1: TMenuItem;
    N3: TMenuItem;
    GoTo1: TMenuItem;
    Replace1: TMenuItem;
    Find1: TMenuItem;
    N4: TMenuItem;
    PasteSpecial1: TMenuItem;
    Paste1: TMenuItem;
    Copy1: TMenuItem;
    Cut1: TMenuItem;
    N5: TMenuItem;
    Repeatcommand1: TMenuItem;
    Undo1: TMenuItem;
    Help1: TMenuItem;
    About1: TMenuItem;
    HowtoUseHelp1: TMenuItem;
    Tutorial1: TMenuItem;
    SearchforHelpOn1: TMenuItem;
    Keyboard1: TMenuItem;
    Procedures1: TMenuItem;
    Commands1: TMenuItem;
    Index1: TMenuItem;
    Contents1: TMenuItem;
    PopupMenu1: TPopupMenu;
    About2: TMenuItem;
    HowtoUseHelp2: TMenuItem;
    Tutorial2: TMenuItem;
    SearchforHelpOn2: TMenuItem;
    Keyboard2: TMenuItem;
    Procedures2: TMenuItem;
    Commands2: TMenuItem;
    Index2: TMenuItem;
    Contents2: TMenuItem;
    ListBox1: TListBox;
    procedure FormClose(Sender: TObject;
      var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

{var
  Form2: TForm2;}

implementation

{$R *.DFM}

procedure TForm2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

end.

FLOWF.DFM

object Form1: TForm1
  Left = 118
  Top = 107
  Width = 600
  Height = 450
  Caption = 'Message Flow'
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'System'
  Font.Style = []
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 16
  object ListBox1: TListBox
    Left = 0
    Top = 41
    Width = 592
    Height = 382
    Align = alClient
    Font.Color = clBlack
    Font.Height = -12
    Font.Name = 'Courier New'
    Font.Style = [fsBold]
    ItemHeight = 16
    ParentFont = False
    TabOrder = 0
  end
  object Panel1: TPanel
    Left = 0
    Top = 0
    Width = 592
    Height = 41
    Align = alTop
    Alignment = taRightJustify
    Caption = 'Panel1'
    Font.Color = clBlack
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
    TabOrder = 1
    object SpyButton: TSpeedButton
      Left = 16
      Top = 8
      Width = 81
      Height = 25
      AllowAllUp = True
      GroupIndex = 1
      Caption = 'Spy On'
      OnClick = SpyButtonClick
    end
    object SkipButton: TSpeedButton
      Left = 136
      Top = 8
      Width = 81
      Height = 25
      AllowAllUp = True
      GroupIndex = 2
      Caption = 'Skip 2nd'
      OnClick = SkipButtonClick
    end
    object ClearButton: TSpeedButton
      Left = 248
      Top = 8
      Width = 81
      Height = 25
      Caption = 'Clear'
      OnClick = ClearButtonClick
    end
    object ShowButton: TSpeedButton
      Left = 360
      Top = 8
      Width = 81
      Height = 25
      Caption = 'Show'
      OnClick = ShowButtonClick
    end
  end
end

UNIT2.DFM

object Form2: TForm2
  Left = 204
  Top = 200
  Width = 385
  Height = 239
  Caption = 'Sample form'
  Font.Color = clBlack
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  PixelsPerInch = 96
  OnClose = FormClose
  TextHeight = 13
  object Edit1: TEdit
    Left = 16
    Top = 8
    Width = 161
    Height = 21
    TabOrder = 0
    Text = 'Edit1'
  end
  object Button1: TButton
    Left = 200
    Top = 8
    Width = 81
    Height = 25
    Caption = 'Button1'
    TabOrder = 1
  end
  object Button2: TButton
    Left = 288
    Top = 8
    Width = 81
    Height = 25
    Caption = 'Button2'
    TabOrder = 2
  end
  object RadioButton1: TRadioButton
    Left = 16
    Top = 56
    Width = 113
    Height = 17
    Caption = 'RadioButton1'
    TabOrder = 3
  end
  object RadioButton2: TRadioButton
    Left = 16
    Top = 80
    Width = 113
    Height = 17
    Caption = 'RadioButton2'
    TabOrder = 4
  end
  object ComboBox1: TComboBox
    Left = 16
    Top = 120
    Width = 161
    Height = 21
    ItemHeight = 13
    Items.Strings = (
      'One'
      'Two'
      'Three'
      'Four'
      'Five'
      'Six '
      'Seven'
      'Eight'
      'Nine'
      'Ten')
    TabOrder = 5
    Text = 'ComboBox1'
  end
  object ListBox1: TListBox
    Left = 200
    Top = 48
    Width = 169
    Height = 137
    ItemHeight = 13
    Items.Strings = (
      'One'
      'Two'
      'Three'
      'Four'
      'Five'
      'Six '
      'Seven'
      'Eight'
      'Nine'
      'Ten')
    TabOrder = 6
  end
  object MainMenu1: TMainMenu
    Left = 32
    Top = 144
    object File1: TMenuItem
      Caption = '&File'
      object New1: TMenuItem
        Caption = '&New'
      end
      object Open1: TMenuItem
        Caption = '&Open...'
      end
      object Save1: TMenuItem
        Caption = '&Save'
      end
      object SaveAs1: TMenuItem
        Caption = 'Save &As...'
      end
      object N2: TMenuItem
        Caption = '-'
      end
      object Print1: TMenuItem
        Caption = '&Print...'
      end
      object PrintSetup1: TMenuItem
        Caption = 'P&rint Setup...'
      end
      object N1: TMenuItem
        Caption = '-'
      end
      object Exit1: TMenuItem
        Caption = 'E&xit'
      end
    end
    object Edit2: TMenuItem
      Caption = '&Edit'
      object Undo1: TMenuItem
        Caption = '&Undo'
        ShortCutText = 'Ctrl+Z'
      end
      object Repeatcommand1: TMenuItem
        Caption = '&Repeat <command>'
      end
      object N5: TMenuItem
        Caption = '-'
      end
      object Cut1: TMenuItem
        Caption = 'Cu&t'
        ShortCutText = 'Ctrl+X'
      end
      object Copy1: TMenuItem
        Caption = '&Copy'
        ShortCutText = 'Ctrl+C'
      end
      object Paste1: TMenuItem
        Caption = '&Paste'
        ShortCutText = 'Ctrl+V'
      end
      object PasteSpecial1: TMenuItem
        Caption = 'Paste &Special...'
      end
      object N4: TMenuItem
        Caption = '-'
      end
      object Find1: TMenuItem
        Caption = '&Find...'
      end
      object Replace1: TMenuItem
        Caption = 'R&eplace...'
      end
      object GoTo1: TMenuItem
        Caption = '&Go To...'
      end
      object N3: TMenuItem
        Caption = '-'
      end
      object Links1: TMenuItem
        Caption = 'Lin&ks...'
      end
      object Object1: TMenuItem
        Caption = '&Object'
      end
    end
    object Help1: TMenuItem
      Caption = '&Help'
      object Contents1: TMenuItem
        Caption = '&Contents'
      end
      object Index1: TMenuItem
        Caption = '&Index'
      end
      object Commands1: TMenuItem
        Caption = 'Co&mmands'
      end
      object Procedures1: TMenuItem
        Caption = '&Procedures'
      end
      object Keyboard1: TMenuItem
        Caption = '&Keyboard'
      end
      object SearchforHelpOn1: TMenuItem
        Caption = '&Search for Help On'
      end
      object Tutorial1: TMenuItem
        Caption = '&Tutorial'
      end
      object HowtoUseHelp1: TMenuItem
        Caption = '&How to Use Help'
      end
      object About1: TMenuItem
        Caption = '&About...'
      end
    end
  end
  object PopupMenu1: TPopupMenu
    Left = 96
    Top = 144
    object Contents2: TMenuItem
      Caption = '&Contents'
    end
    object Index2: TMenuItem
      Caption = '&Index'
    end
    object Commands2: TMenuItem
      Caption = 'Co&mmands'
    end
    object Procedures2: TMenuItem
      Caption = '&Procedures'
    end
    object Keyboard2: TMenuItem
      Caption = '&Keyboard'
    end
    object SearchforHelpOn2: TMenuItem
      Caption = '&Search for Help On...'
    end
    object Tutorial2: TMenuItem
      Caption = '&Tutorial'
    end
    object HowtoUseHelp2: TMenuItem
      Caption = '&How to Use Help'
    end
    object About2: TMenuItem
      Caption = '&About...'
    end
  end
end