这样替换窗体默认的系统菜单,急急急

gypb 2000-02-22 05:17:00
...全文
178 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lin 2000-02-23
  • 打赏
  • 举报
回复
gypb:是的,必须过滤WM_SYSCOMMAND消息,因为你修改的是系统菜单么。最好重载WndProc过程:
...
protected
procedure WndProc(var Message: TMessage); override;
...
procedure TfrmPlay.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_SYSCOMMAND:
case Message.WParam of
SC_MINIMIZE://Do you want to do
SC_CLOSE://Do you want to do
SC_MAXIMIZE://Do you want to do
IDM_ABOUT:
ShowAbout......
else inherited;
end;
else inherited;
end;
end
gypb 2000-02-23
  • 打赏
  • 举报
回复
lin
你的做法我用过,可不知这样将自己的代码和新增的菜单关联起来,是否要用到WM_SYSTEMCOMMAND、WM_COMMAND消息
Lin 2000-02-23
  • 打赏
  • 举报
回复
gypb:
我用的也是NT WS4.0 + SP6 + 戴妃5,但工作一切正常,是不是你的系统有点问题?
gypb 2000-02-23
  • 打赏
  • 举报
回复
实在对不起,你的要求我无法满足,不过DBOLEEDIT的原理很简单,只要加入TDATALINK
与数据库关联起来就行了。
gypb 2000-02-23
  • 打赏
  • 举报
回复
lin
你的方法中使用重载WNDPROC的方法,我在编译运行时出现了WIN32错误,我将他该成了
protected
procedure NProc(var message:TWMSysCommand);Message WM_SysCommand;
一切OK。
你的方法应该也是可行的,我正在寻找原因,我的系统是NT WS4.0
Lin 2000-02-23
  • 打赏
  • 举报
回复
To gypb:
Help me! Please!!!
见我的问题‘捆绑OLE对象到数据库’,能否将你的控件E给我?
Lin 2000-02-22
  • 打赏
  • 举报
回复
一般将代码放在Form的OnCreate事件中:
procedure TfrmMain.FormCreate(Sender: TObject);
var
mnuSys: HMENU;
begin
mnuSys := GetSystemMenu(Handle, False); //获得系统菜单
DeleteMenu(mnuSys, SC_SIZE, MF_BYCOMMAND); //删除'大小'菜单
DeleteMenu(mnuSys, SC_MAXIMIZE, MF_BYCOMMAND);//删除'最大化'菜单
InsertMenu(mnuSys, $FFFFFFFF, MF_SEPARATOR, $FFFFFFFF, '');//插入分隔线
//插入'About'菜单
InsertMenu(mnuSys, $FFFFFFFF, MF_BYCOMMAND, IDM_ABOUT, '关于(&A)…');
//修改菜单文本
ModifyMenu(mnuSys, SC_MINIMIZE, MF_STRING, SC_MINIMIZE, 'Minimize');
...
end;

5,379

社区成员

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

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