关于动态右键菜单创建的问题?求方法!
我在Form上new了(动态创建)很多的Image对应每一个Image的右键菜单中的操作均不同,我就想问,如果我将右键菜单中的操作均为例如Do的操作而具体执行时,视Image不同而不同如何解决?关键是如何确定我右键选中的Image? 问题点数:0、回复次数:10Top
1 楼Bensoon(Bensoon)回复于 2004-09-05 00:39:30 得分 0
个人给你提供一个思路,不知道我理解的意思是不是正确!
你可以做一张表呀,然后在这张表里把Image的位置和菜单里要显示的操作一一对应,而右键菜单只做一个,而这个菜单把所有的操作都写好,然后判断一下是哪个Image(通过位置),然后再来决定这个菜单里哪些项目显示(查你先定好的表格),这样不就解决了!
表达能力有限,也不知道我的意思你能不能理解,也或许我理解错了你的意思!只是说一个思路而已 !Top
2 楼Lonelywolf1899(プログラマ)回复于 2004-09-06 13:15:22 得分 0
给每个Image做不同的PopMenuTop
3 楼ccrun(老妖)(www.ccrun.com)回复于 2004-09-06 13:52:29 得分 0
在MenuItem的Click事件中,通过Sender来判断来自哪个Image,简单的方法就是给每个Image分配不同的Tag,以Tag作分别.Top
4 楼JetKingLau(时差)(亦远亦近)(静坐常思已过 闲谈勿论人非 …………)回复于 2004-09-08 11:47:08 得分 0
老妖你搞错了吧?!偶认为:当用户单击 MenuItem1 时将触发 OnClick 事件,这时 MenuItem1Click(TObject *Sender) 函数的 Sender 参数即是 MenuItem1 本身,除非是由用户自己在代码中引用 MenuItem1Click 的函数,Sender 才是其它的对象。
偶觉得,应该使用 PopupMenu1->PopupComponent,它是指用户在哪个组件按下了右键,
if( PopupMenu1->PopupComponent->ClassNameIs("TImage") ) {
TImage *img = (TImage*)PopupMenu1->PopupComponent;
switch( img->Tag ) {
case 0:
//......
break;
default:
break;
}
}Top
5 楼showjoy(最后一块钱)回复于 2005-01-27 11:46:21 得分 0
JetKingLau(时差)(★亦远亦近★) 说得对。同理,如果有三个按钮,使用相同的PopUpMenu1,
若想知道是哪个按钮上的popup,应:
if( PopupMenu1->PopupComponent->ClassNameIs("TButton")){
switch( ((TButton*)PopupMenu1->PopupComponent)->Tag ) {
case 1:
//第一个按钮
break;
case 2:
//第二个按钮
break;
case 3:
//第三个按钮
break;
default:
//
break;
}
当然按钮的tag分别置为1,2,3。具体请看PopupComponent的帮助Top
6 楼3996906(我只是建议,不提供最后的解决方法)回复于 2005-01-27 11:52:38 得分 0
老妖没弄错哦~~~~~~~~~这样是可以的,偶做过啦~~~~~~~:)Top
7 楼flytigerboy(天涯浪人)回复于 2005-01-28 11:39:25 得分 0
Read and Learn.Top
8 楼oldtab(汇铁)回复于 2005-01-28 19:58:38 得分 0
ccrun(老妖)(www.ccrun.com) 的方法是可行的。
进一步,还可不用Tag。
((TMenuItem*)(((TMenuItem*)Sender)->Parent)->Name //1式
((TMenuItem*)Sender)->Caption //2式
1式,可用来区分哪个Image。
2式,可用来区分哪个菜单项。Top
9 楼oldtab(汇铁)回复于 2005-01-28 20:00:37 得分 0
又错了。应是:
((TImage*)(((TMenuItem*)Sender)->Parent)->Name //1式
Top
10 楼showjoy(最后一块钱)回复于 2005-02-04 13:17:10 得分 0
又学了一招Top




