菜单的name,caption以及单击菜单所要所要打开的窗体名字存在数据库中,怎幺动态生成菜单,并产生菜单单击事件?(要通用的,我不想为每一个菜单都写一个单击事件)

解决方案 »

  1.   


      private
        { Private declarations }
        procedure MenuClick(Sender: TObject);procedure TForm1.Button2Click(Sender: TObject);
    var
        Menu1:TMenuItem;
    begin
        Menu1 := TMenuItem.Create(Self);
        Menu1.Name := 'MFile';
        Menu1.Caption := '&File';
        MainMenu1.Items.Add(Menu1);    //Create some menu items at File's menu
        Menu1 := TMenuItem.Create(Self);
        Menu1.Name := 'MShow';
        Menu1.Caption := '&Show';
        Menu1.OnClick := MenuClick;
        MainMenu1.Items[0].Add(Menu1);    Menu1 := TMenuItem.Create(Self);
        Menu1.Name := 'MExit';
        Menu1.Caption := '&Exit';
        Menu1.OnClick := MenuClick;
        MainMenu1.Items[0].Add(Menu1);
    end;
    procedure TForm1.MenuClick(Sender: TObject);
    begin
        if TMenuItem(Sender).Name = 'MShow' then
        begin
            ShowMessage('Hello Menu');
        end
        else if TMenuItem(Sender).Name = 'MExit' then
        begin
            Close;
        end;
    end;
      

  2.   

    你得改一下,呵呵,参考参考吧!type
       .......
        procedure AddWindowsMenu(MenuCap: string; bEnabled: boolean);
        procedure AddMenuClick(Sender: TObject);
    procedure TForm1.AddWindowsMenu(MenuCap: string; bEnabled: boolean);
    var
      NewItem: TMenuItem;
    begin
      NewItem := TMenuItem.Create(Self);
      NewItem.Caption:='NewMenuCaption';         //你数据库里的Caption
      NewItem.Enabled:= bEnabled;
      Form1.MenuGroup.Add(NewItem);
      NewItem.OnClick:= AddMenuClick;
    end;procedure TForm1.AddMenuClick(Sender: TObject);
    //动态菜单点击事件
    begin
      with Sender as TMenuItem do
        begin
          ShowMessage(Caption);          //模拟事件处理
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);    //调用....
    begin
      AddWindowsMenu('NewItem',True);
    end;