菜单(100分)

  • 主题发起人 主题发起人 歪就歪
  • 开始时间 开始时间

歪就歪

Unregistered / Unconfirmed
GUEST, unregistred user!
TMEMO的右键POPUP菜单是缺省的,现在,我想在这个缺省菜单上
加入自己的菜单项。怎么也弄不出来,我的方法是:
procedure TForm1.Button1Click(Sender: TObject);
var hMenu: THandle;
begin
hMenu := Windows.GetMenu(Memo1.Handle);
Memo1.Lines.Add(IntToStr(hMenu));
{别管是什么MENU,反正有值}
InsertMenu(hMenu, 3, MF_BYPOSITION and MF_STRING, 500, 'Add Menu');
DrawMenuBar(Memo1.Handle);
end;

是什么问题?请指教,若带源码,非常感谢。
 
歪就歪没贴上去一分钟,就心急的RELOAD一下。
没想到竟有人回答,顿时:喜出望外!
急急点去、慢慢荡来,见竟是大侠CAKK的名字,觉得高手说话,更无问题!顺手
就把DELPHI运行起来,准备试码。
结果,竟是个“我也想”!
现在,我对着刚启动的DELPHI!对着“我也想”的CAKK!
我…………
 
yy兄,GetMenu怎么能得到PopupMenu的句柄?
 
这个问题远非这么简单。
 
o*o:呵呵,怎么?一定是我又犯了基本概念错误了?
不瞒你说,水平太潮,了解的东西似是而非,所以……
反正只要这调用能返回个值给我,我就觉得应该是对的。
那么,给指点一下,PopupMenu的句柄用什么命令能得到?
我在上面程序里得到的句柄又是谁的?总不会是MEMO1的
主菜单的句柄吧?
 
o*o,是啊,下午我花了三个小时看MEMO的代码,企图看看它是在哪儿
连POPUPMENU的,但没找到。
虽然,完全可以自己把那缺省菜单再重新做一个,但细想想,那CUT、PASTE
还有UNDO,要自己编起来,也够我一梦的。
是不是又要加分了?歪就歪捂着钱包问?
 
CUT、PASTE还有UNDO自己编一点儿都不难,SendMessage一句就可以了。
但问题不在这儿。有时间再想想吧。
 
哈,这个问题我以前遇到过。你要自已定义一个PopupMenu和一个TActionList来
代替默府的那个。标准的cut,copy,paste项有standard action可用,自已的菜
单项用一般的Action自已定义.然后把菜单项和相应的Action联系上就行了。
 
我在ex-ex上查了一下,基本上只有像receyes那样做.
不过我确实看到过直接在edit的popup菜单上面添加选项的.
 
唉,一言惊醒梦中人,怎么把TACTIONLIST给忘了,这一百分给RECEYES了
不过,先容我把这问题放两天,因为我实在想知道用API的方法实现应该
如何(原先以为用GETMENUITEM肯定应该能行的)
如果谁能告诉我用API方法实现的,我愿意再出100分。
 
呵呵,何必惊动TActionList.
没有抢分的意思,把分给Receyes我完全没意见。
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
HasSelection: Boolean;
begin
Paste1.Enabled := Clipboard.HasFormat(CF_TEXT);
HasSelection := Memo1.SelLength > 0;
Cut1.Enabled := HasSelection;
Copy1.Enabled := HasSelection;
Delete1.Enabled := HasSelection;
Undo1.Enabled:= Memo1.Perform(EM_CANUNDO, 0, 0) <> 0;
end;

相应的执行语句SendMessage(Memo1.Handle,msg,0,0);
msg各自为WM_CUT,WM_PASTE,WM_COPY,WM_CLEAR,EN_UNDO。
在Default菜单上加Item不容易。一言难尽。
 
原理是一样的,就是自己做一个新的完全替代旧的.
但是这样做不能完全实现以前的功能,比如自动根据当前操作系统显示相应
的语言的菜单项"Copy->复制,Paste->粘贴"....
 
哎呀,这有啥奇怪的,东方快车就是这么干的。
可是如果大家仔细看看的话,会发现就算弹出了
新菜单,也会有个旧菜单弹出的闪烁。这个问题
谁能解决吗?
 
既然 Opera 可以做到这一点,咱们也能做到。
我现在到 VC 论坛上问问。
 
谢谢大家,真不想收题,还想听听。
 
接受答案了.
 
后退
顶部