问题如下:把数据库里的数据用来动态生成菜单项,但是我不知道怎样判断我单击了哪个菜单项,所有的单击事件都指向了N1Click过程,因为我不知道会随数据库的数据产生多少菜单项。
procedure TDBXP_RKD.edt_spmcClick(Sender: TObject);
var
i_spmc,count_spmc:integer;
begin
  with dm_dbxp.qry_spmc do begin
    close;
    sql.Clear;
    sql.Add('select * from dbxp_sp');
    open;
  end;
  count_spmc:=dm_dbxp.qry_spmc.RecordCount;
for i_spmc := 1 to count_spmc do
begin
      NewItem := TMenuItem.Create(PopupMenu1);
  NewItem.Caption := dm_dbxp.qry_spmc.FieldByName('spmc_no').AsString;
  PopupMenu1.Items.Add( NewItem);
  newitem.OnClick := N1Click;
  dm_dbxp.qry_spmc.Next;
end;
      PopupMenu1.Popup(x,y);
end;procedure TDBXP_RKD.N1Click(Sender: TObject);
begin
怎样在这里判断我单击了哪个菜单项?
popupmenu1.Items.Clear;
end;小弟技穷请各位大虾帮忙!

解决方案 »

  1.   

    生成菜单项的时候为每一个MenuItem指定一个不同的Tag,然后在公用的点击事件中判断Tag的值。
      

  2.   

    这样吗,我试了不行,只是最后一个,我比效笨请再细说一下吧:)
    procedure TDBXP_RKD.edt_spmcClick(Sender: TObject);
    var
    i_spmc,count_spmc:integer;
    begin
      with dm_dbxp.qry_spmc do begin
        close;
        sql.Clear;
        sql.Add('select * from dbxp_sp');
        open;
      end;
      count_spmc:=dm_dbxp.qry_spmc.RecordCount;
    for i_spmc := 1 to count_spmc do
    begin
          NewItem := TMenuItem.Create(PopupMenu1);
      NewItem.Caption := dm_dbxp.qry_spmc.FieldByName('spmc_no').AsString;
      PopupMenu1.Items.Add( NewItem);
    ///////////////////////
      popupmenu1.Items.Items[I_SPMC-1].Tag:= I_SPMC-1;
    //////////////////////////
      newitem.OnClick := N1Click;
      dm_dbxp.qry_spmc.Next;
    end;
          PopupMenu1.Popup(x,y);
    end;procedure TDBXP_RKD.N1Click(Sender: TObject);
    begin
    ///////////////////
    showmessage(inttostr(popupmenu1.Items.Items[popupmenu1.Items.IndexOf(newitem)].Tag));
    ////////////////////
    popupmenu1.Items.Clear;
    end;
      

  3.   

    在create你的菜單時,要注意令:
    動態建立的菜單.tag :=i;
    Onclick中:
    var
    i: integer;
    s: string;
    begin
    i :=(sender as TMenuitem).tag;
    s :=(sender as TMenuitem).caption;
    showmessage(inttostr(i) + s);
    end;
    //沒delphi,記得大概是這樣