如何动态的创建一个控件并为他的某个事件创建语句。(100分)

  • 主题发起人 主题发起人 rockxu
  • 开始时间 开始时间
R

rockxu

Unregistered / Unconfirmed
GUEST, unregistred user!
例如动态的生成一个菜单项,并定义这个菜单项的各种事件。
谢谢!
 
delphi帮助复制如下:
This example demonstrates how to add and delete menu items to a popup menu at runtime and assign an event handler to the OnClick event.

procedure TForm1.AddButtonClick(Sender: TObject);
var
index: Integer;
NewItem: TMenuItem;
begin
for index := 0 to 3 do
begin
NewItem := TMenuItem.Create(PopupMenu1); // create the new item
PopupMenu1.Items.Add(NewItem);// add it to the Popupmenu
NewItem.Caption := 'Menu Item ' + IntToStr(index);
NewItem.Tag := index;
NewItem.OnClick = PopupMenuItemsClick;// assign it an event handler
end;

end;

procedure TForm1.PopupMenuItemsClick(Sender: TObject);
begin
with Sender as TMenuItem do
begin
case Tag of
0: ShowMessage('first item clicked');
1: ShowMessage('second item clicked');
2: ShowMessage('third item clicked');
3: ShowMessage('fourth item clicked');
end;
end;
end;

To edit or destroy an item, grab its pointer via the Items property.

procedure TForm1.EditButtonClick(Sender: TObject);
var
ItemToEdit: TMenuItem;
begin
ItemToEdit := PopupMenu.Items[1];
ItemToEdit.Caption := 'Changed Caption';
}

procedure TForm1.DestroyButtonClick(Sender: TObject);
var
ItemToDelete: TMenuItem;
begin
ItemToDelete := PopupMenu.Items[2];
ItemToDelete.Free;
end;

-----
http://www.8421.org
 
MyMenuItem:=TmeunItem.create(YOUR EXISTING MENU);
MyMenuItem.caption:='YOUR CAPTION';
MyMenuItem.OnClick:=一个响应的过程名(注意参数要和onClick事件一致)
 

定义菜单命令的事件处理过程:
TForm1的定义代码中添加如下代码:
type
TForm1 = class(TForm)
. . .
// 定义菜单命令的事件处理过程
procedure MyPopupHandler(Sender: TObject);
private
. . .
然后手工在Unit1.pas 文件的最后一条end 语句的前面定义过程体如下:
// 菜单命令的事件处理过程
procedure TForm1.MyPopupHandler(Sender: TObject) ;
begin
with Sender as TMenuItem do
begin
// 在信息对话框中显示选中菜单项的Caption 属性
ShowMessage(Caption);
end ;
end ;

至于动态创建:
proceudre buildmenu;
var
s:tmenuitem;
begin
s:=Tmenuitem.Create(mainmenu1);
s.Caption:='你给菜单显示文字';
.
.
s.OnClick:=MyPopupHandler; //把你定义的事件赋给菜单的click事件
end;

如果是多个菜单方法也是如此,看你如何应用了
 
多人接受答案了。
 
后退
顶部