************ 两个popupmenu之间的切换问题 ****************

pig_pig2005 2005-10-19 11:01:14
if mbRight = Button then
if i=5 then
cxSpreadSheetBook1.PopupMenu:=PopupMenu2
else
cxSpreadSheetBook1.PopupMenu:=popupmenu1;

以上代码在MouseDown或Mouseup中,运行结果都是首先显示上次的popoupmenu的结果,而不是本次判断

的结果。例如,上次i=4,popup为popupmenu1,本次i=5的时候,第一次右键显示是popupmenu1,再

右键才为PopupMenu2。

如何解决这个问题?
...全文
249 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
g961681 2005-10-21
  • 打赏
  • 举报
回复
直接弹出来,不要通过popupmenu来弹出。
menu.popup

********************************************************************
* Know Something About Everything, And Everything About Something! *
********************************************************************
g961681 2005-10-21
  • 打赏
  • 举报
回复
直接弹出来,不要通过popupmenu来弹出。
menu.popup

********************************************************************
* Know Something About Everything, And Everything About Something! *
********************************************************************
pig_pig2005 2005-10-21
  • 打赏
  • 举报
回复
还是不行,改动态生成popoup也还是那样,郁闷
mastersky 2005-10-20
  • 打赏
  • 举报
回复
1.不要设置PopupMenu属性。
2.
var
P:TPoint;
begin
P:=ClientToScreen(Point(TControl(Sender).Left+X,TControl(Sender).Top+Y));
if mbRight = Button then
if i=5 then
PopupMenu2.popup(P.X,P.Y)
else
PopupMenu1.popup(P.X,P.Y);
end;

imho888 2005-10-19
  • 打赏
  • 举报
回复
要在系统得到消息之前截获,再运行代码就可以了。
lyre 2005-10-19
  • 打赏
  • 举报
回复
试试这个办法:
type
Txx = class(...)
procedure WMUser(var Msg: TMessage); message WM_User;
...
end;

procedure Txx.OnMouseUp();
begin
if mbRight = Button then
PostMessage(Self.Handle, WM_User, 0, 0);
end;

procedure Txx.WMUser;
begin
if i=5 then
PopupMenu2.PopUp(...)
else
popupmenu1.PopUp(...);
end;
pig_pig2005 2005-10-19
  • 打赏
  • 举报
回复
我发现了问题的根源:由于 i 是根据当前活动单元格的列号来判断的,单元格激活落后于鼠标右键事件,所以总是慢半拍,总是显示上次活动单元格的结果。

这下不知道怎么办了?
pig_pig2005 2005-10-19
  • 打赏
  • 举报
回复
to lyre(大头鬼) :谢谢你的回答,但是你的方法问题依然存在。

lyre 2005-10-19
  • 打赏
  • 举报
回复
procedure ...OnFromCreate();
begin
cxSpreadSheetBook1.PopupMenu:= nil;
...
end;

if mbRight = Button then
if i=5 then
PopupMenu2.PopUp(...)
else
popupmenu1.PopUp(...);
pig_pig2005 2005-10-19
  • 打赏
  • 举报
回复
如何截获?没用过,代码怎么写啊?

5,392

社区成员

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

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