诚恳向大家、版主、好心人请教一个问题!!!

BigHill 2002-08-02 07:25:54
我动态创建了一个PopupMenu菜单,要为每一个菜单项处理事件。
但是如果有一个菜单项,(比如:a)下有二级菜单时(a1,a2...),但鼠标移动到该a时,
会自动调用该菜单的OnClick,这样就不能把二级菜单打开。
说明:每一个菜单项都调用同一个OnClick.

请问如何才能做到当鼠标移动到该菜单项时,系统不自动去处理OnClick事件,
但同时能打开二级菜单。 只有用鼠标单击时,才去处理该一级菜单项的OnClick事件。

请大家帮一把!!!

...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigHill 2002-08-02
  • 打赏
  • 举报
回复
procedure TForm1.updatePositionMenu();
var
menuSql,subSql:string;
MyMenuItem,MySubItem: TMenuItem;
begin
MenuSql:='select * from YKL_CityPosition where OnLevel=1';
DataDMDlg.PosMenuADO.Close;
DataDMDlg.PosMenuADO.SQL.Clear;
DataDMDlg.PosMenuADO.SQL.Add(MenuSql);
DataDMDlg.PosMenuADO.Open;

subSql:='select * from YKL_CityPosition where OnLevel=2';
DataDMDlg.SubMenuADO.Close;
DataDMDlg.SubMenuADO.SQL.Clear;
DataDMDlg.SubMenuADO.SQL.Add(subSql);
DataDMDlg.SubMenuADO.Open;

PositionMenu.Items.Clear;
DataDMDlg.PosMenuADO.First;
while NOT DataDMDlg.PosMenuADO.Eof do
begin
MyMenuItem:=TMenuItem.Create(Self);
MyMenuItem.Caption:=DataDMDlg.PosMenuADO.Fields[1].Value;
MyMenuItem.OnClick:=MyMenuItemClick;
MyMenuItem.Tag:=DataDMDlg.PosMenuADO.Fields[0].Value;
DataDMDlg.SubMenuADO.First;
While NOT DataDMDlg.SubMenuADO.EOF do
begin
if DataDMDlg.SubMenuADO.Fields[6].Value=MyMenuItem.Caption then
begin
MySubItem:=TMenuItem.Create(Self);
MySubItem.Caption:=DataDMDlg.SubMenuADO.Fields[1].Value;
MySubItem.OnClick:=MyMenuItemClick;
MySubItem.Tag:=DataDMDlg.SubMenuADO.Fields[0].Value;
MyMenuItem.Add(MySubItem);
MyMenuItem.Tag:=0;
end;
DataDMDlg.SubMenuADO.Next;

end;
PositionMenu.Items.Add(MyMenuItem);
DataDMDlg.PosMenuADO.Next;
end;
end;

procedure TForm1.MyMenuItemClick(Sender: TObject);
var
PosSql:string;
Pzoom,PLong,Plat:double;
begin
if (sender as TMenuItem).Tag<>0 then
begin
PosSql:='select PZoom,PLong,PLat from YKL_CityPosition where ID='+inttostr((sender as TMenuItem).Tag);
DataDMDlg.SubMenuADO.Close;
DataDMDlg.SubMenuADO.SQL.Clear;
DataDMDlg.SubMenuADO.SQL.Add(PosSql);
DataDMDlg.SubMenuADO.Open;
pzoom:=DataDMDlg.SubMenuADO.Fields[0].value;
PLong:=DataDMDlg.SubMenuADO.Fields[1].value;
Plat:=DataDMDlg.SubMenuADO.Fields[2].value;
Map1.ZoomTo(pzoom,PLong,Plat);
end;

这段程序不能实现单击有子项的菜单项时的onclick,为了子项能实现onclick,我把tag=0,去除系统的自动调用。请问如何才能实现当鼠标移动到该菜单项时,系统不自动去处理OnClick事件,
但同时能打开二级菜单。 只有用鼠标单击时,才去处理该一级菜单项的OnClick事件。
forgot 2002-08-02
  • 打赏
  • 举报
回复
你要把具体的代码贴出来,我们才能帮到你呀!
BigHill 2002-08-02
  • 打赏
  • 举报
回复
有子项的这个菜单项我也要处理它的onclick呀,只是用鼠标点击时才处理,
而不是系统自动去处理
dreamfan 2002-08-02
  • 打赏
  • 举报
回复
在你的onclick中加一个标志,为true是执行
这样,判断你的菜单,如过有子项,让标志为false,否则为true;
talisman 2002-08-02
  • 打赏
  • 举报
回复
你不点也会触发父接点的onclick么?

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧