我在编程时遇到一个问题: 不能给每个动态生成的菜单分配一个有用事件处理过程(同一过程)
  具体问题如下: 本人在一程序中采用了动态生成菜单项来管理备份的文件,既备份一次,增加一项,以后用菜单来调出备份的文件.
   菜单项:
        Caption属性 用的是备份时间表示,
        Name属性 用"一字符(B) + intToStr(一整型变量(自动递增))",
        Hint属性 用的是"文件的备份路径及文件名表示"(用作传递给响应菜单单击     事件过程的参数)
    OnClick属性 用的一个自定义过程.
 问题来了:
    如何在自定义过程中获得是那个菜单项的单击事件发生,并且要把它的Hint属性值取出,作为查询是的参数.
   请各位朋友指教,谢谢

解决方案 »

  1.   

    很简单,判断事件的Sender参数就可以啊!如:
    unit Unit1;
    interface
    uses
      Windows, Messages,Menus, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure MyClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.MyClick(Sender: TObject);
     begin
       showmessage((Sender as tmenuitem).Caption);
     end;
    procedure TForm1.Button1Click(Sender: TObject);
     var
       mymainmenu:tmainmenu;
       myitem:array[0..2] of tmenuitem;
       a,b:tmenuitem;
       i:integer;
     begin
       mymainmenu:=tmainmenu.Create(self);
       for i:=0 to 2 do
         myitem[i]:=tmenuitem.Create(self);
       myitem[0].caption:='java' ;
       myitem[1].caption:='delphi' ;
       mymainmenu.Items.Add(myitem[0]) ;
       mymainmenu.Items.Add(myitem[1]) ;
       myitem[0].onclick:=MyClick;
       myitem[1].onclick:=MyClick;
     end;
    end.
      

  2.   

    忘了加hint了!
    unit Unit1;
    interface
    uses
      Windows, Messages,Menus, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure MyClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.MyClick(Sender: TObject);
     begin
       showmessage((Sender as tmenuitem).Caption);
       showmessage((Sender as tmenuitem).hint);
     end;
    procedure TForm1.Button1Click(Sender: TObject);
     var
       mymainmenu:tmainmenu;
       myitem:array[0..2] of tmenuitem;
       a,b:tmenuitem;
       i:integer;
     begin
       mymainmenu:=tmainmenu.Create(self);
       for i:=0 to 2 do
         myitem[i]:=tmenuitem.Create(self);
       myitem[0].caption:='java' ;
       myitem[0].Hint:='j' ;
       myitem[1].caption:='delphi' ;
       myitem[1].Hint:='d' ;
       mymainmenu.Items.Add(myitem[0]) ;
       mymainmenu.Items.Add(myitem[1]) ;
       myitem[0].onclick:=MyClick;
       myitem[1].onclick:=MyClick;
     end;
    end.