一个动态添加菜单问题!!! ( 积分: 50 )

  • 主题发起人 主题发起人 新来的菜鸟
  • 开始时间 开始时间

新来的菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个调用dll的窗体,我想在菜单上做一个菜单的窗口历史记录,也就是说每点一次菜单就会把他记录窗口历史记录里,如何实现!分不多因为没分了希望各位帮帮忙,谢谢了

下面是我在某个菜单的OnClick事件里写的一段调用dll函数和添加历史窗口记录,但我在 MainMenu1.Items.Items[1].OnClick:=N1Click;里只能复事件不能调用某个函数吗?如果我想把Dllfrmshow(1,'prjDLL.dll')放到MainMenu1.Items.Items[1].OnClick:里如何实现,还有如何判断历史窗口记录里是否已经有历史窗口存在如有的话就不进行添加如何实现,谢谢

procedure TForm1.N1Click(Sender: TObject);
var
aItem: TMenuItem;
i: Integer;//"我的帐号"在菜单对应的索引
begin
Dllfrmshow(1,'prjDLL.dll');

for i:=0 to 20 do
begin

aItem := TMenuItem.Create(nil);
aItem.Caption := MainMenu1.Items[0].Items[0].Caption;
MainMenu1.Items.Items[1].Add(aItem);
MainMenu1.Items.Items[1].OnClick:=N1Click; //在这我想复Dllfrmshow(1,'prjDLL.dll');如何实现
end;
end;

其他问题都解决了就还差如何在MainMenu1.Items.Items[1].OnClick里执行某个函数
 
我是这样做的
初始化这个窗体时把窗体的handle放到对应menuitem的TAG里,点击菜单后,给程序发送窗体最前显示消息就成了
 
to boy2002cn
能不能给个例子来看看,谢谢
 
没人会?感觉在这里的人都不是很热情的!!!!
 
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1111: TMenuItem;
procedure FormCreate(Sender: TObject);
private
procedure MenuClickEvent(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
MainMenu1.Items[0].OnClick := MenuClickEvent;
end;

procedure TForm1.MenuClickEvent(Sender: TObject);
begin
ShowMessage('你想要执行的代码');
end;
 
to liyinwei
呵,我是想在MainMenu1.Items[0].OnClick执行一个公共的函数
Dllfrmshow(1,'prjDLL.dll'); 不是想执行一个事件,应该如何改呢?谢谢!
 
等待中...
 
DLL里面的窗口,不是官方的方法,有一些问题,上2ccc有例子
 
to bsense
呵,我现在的问题不是dll问题是如何在菜单的MainMenu1.Items[0].OnClick事件里如何调用这个函数Dllfrmshow(1,'prjDLL.dll');
 
函数不能这样用,直接
SendMessage(Handle, WM_NCACTIVATE, Integer(True), 0);
handle就是我前面说的窗体的句柄,保存在tag里的
procedure TForm1.MenuClickEvent(Sender: TObject);
begin
SendMessage(tmenuitem(sender).tag, WM_NCACTIVATE, Integer(True), 0);
end;
 
to boy2002cn
能不能给个完整的创建历史窗口的代码,谢谢

还有如果我要动态创建菜单那还是需要用动函数的调用的,这该如何解决,谢谢
 
难道真的没有人会吗,等待中...
 
for i:=0 to 20 do
begin
aItem := TMenuItem.Create(nil);
aItem.Caption := MainMenu1.Items[0].Items[0].Caption;
Dllfrmshow(1,'prjDLL.dll');//这里返回的是什么,必须返回一个值能标识出这个窗体。如果返回的是TFORM 那么就用 aitem.tag=Dllfrmshow(1,'prjDLL.dll').handle;
MainMenu1.Items.Items[1].Add(aItem);
MainMenu1.Items.Items[1].OnClick:=N1Click;
end;
end;
在N1click中实现SendMessage(tmenuitem(sender).tag, WM_NCACTIVATE, Integer(True), 0); 就成了,第一个就是窗体的句柄
 
才50分 那么少
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部