我发现主窗口有主菜单(即通过主窗口的menu属性得到的主菜单)时,子窗口最大化时子窗口的关闭、最大化、最小化按钮能显示,但主窗口没有主菜单时(主窗口的menu属性为空),子窗口最大化时子窗口的关闭、最大化、最小化按钮就不能显示。由于通过主窗口的menu属性设的主菜单不美观,所以就去掉了menu属性,用coolbar+toolbar作了一个可移动的主菜单(老板的意思,无赖!),但此时子窗口最大化时子窗口的关闭、最大化、最小化按钮就不能显示,致使不能使子窗口还原或最小化。
谁有办法让主窗口的menu属性为空时子窗口在最大化时将子窗口的关闭、最大化、最小化按钮显示出来!如果办到100分酬谢,决不失言!   

解决方案 »

  1.   

    我的不会呀!你看一下窗体的bordericons属性是什么?是否它有问题。
      

  2.   

    拦截WM_COMMOND消息这个我不是太明白WINAPI的包好象有api中文板啊!
      

  3.   

    在子窗体中截获WM_SYSCOMMAND中窗口最大化消息SC_ZOOM,用drawedge在工具栏,画出按钮,然后编写这些按钮的响应时间,我简单作了一下,完全可以实现
      

  4.   

    procedure hidesysmenu(var msg:Tmessage) message WM_syscommand;
    begin
    //你自己要实现的效果
    //如果不要就什么都不写
    end; 
      

  5.   

    procedure hidesysmenu(var msg:Tmessage) message WM_syscommand;
    begin
    //你自己要实现的效果
    //如果不要就什么都不写
    end; 
      

  6.   

    好象再delphi5中可以写wndproc来实现呵呵!
      

  7.   

    procedure hidesysmenu(var msg:Tmessage) message WM_syscommand;
    begin
    //这里面的代码怎么写?
    //我是初学者!请细说!最好给我一个示范单元文件!
    end; 
      

  8.   

    呵呵,今天早上试出一个很有趣的现象,也许对你有帮助,
    在程序运行的时候,动态的把一个Form的Parent设成另一个Form,注意都是fsNormal类型
    的,哈,看看发生了什么
      

  9.   

    BaldZhang(BaldZhang) :这个办法还真不错!不过我的系统是mdi的,且比较大,要是都设为fsnormal,好吗?
      

  10.   

    强烈要求bjxbt(bjxbt)把代码贴出来,我虽然是个看客,也想知道到底是如何实现的.
      

  11.   

    manboo(横刀)的方法难以完全完成你的要求
    BaldZhang(BaldZhang) 的方法不伦不类
    老老实实按我说的方法作吧
      

  12.   

    to bjxbt(bjxbt):请写出代码,好吗?急盼!
      

  13.   

    to bjxbt(bjxbt):哈哈,我当然知道我的方法很古怪啦不过,我的目的是想让大家知道,在MainMenu为空的情况下,Child窗口在最大化
    时也是可以有这三个按钮的,具体怎么实现,一种就是照你所说的自己处理,另外
    嘛,呵呵,这些窗口的Style和ExStyle到处改改,能实现就好了嘛另:我是在Win2000下做的,98下不知道
      

  14.   

    我试了几次,pwin98好像没有成功。
      

  15.   

    我想有个函数可以实现,就是SetWindowRgn(),至于如何实现就不用我多说了,仔细
    查看Help文档吧。实际上,大家应该注意到了,Delphi本身就实现了这样的效果,就
    是Code Explorer这个窗口,它在最大化时,它的大小并未占满全屏,而是限制在一定
    的范围。SetWindowRgn()函数就是能实现这样的功能的。
      

  16.   

    1:SetWindowRgn是不行的!
    2:拦截wm_syscommand还不够!还要拦截wm_NC的DbClick消息!我测试的时候,拦截wm_syscommand之后,窗口可以最大化在FormClient内。但是那个最大化的按钮的图标没有变化,而且再次点击这个最大化的按钮的时候,也不能恢复原来的窗口状态,好像这个最大化是Windows内部控制的。VCL都没有办法控制。
    3:听听高手的意见。
      

  17.   

    可使用Express的esbar控件。
    或者参考esbar的源代码,自已写一个。
      

  18.   

    to:GoodHope(好望角) 
    同志好!大家想的一样啊!
      

  19.   

    既然你做不出来就简单一点,不用象Kingron(WinAPI)江的拦截wm_nc消息
    在你的mdiform中加入一个子窗口起动标志bz
    然后协议下程序
    procedure tform1.wmsyscommand(var msg:tmessage);
    begin
      if (msg.WParam=sc_zoom) and (bz=1)then sendmessage(form2.handle,wm_syscommand,sc_restore,0)
      else inherited;
    end;
    其它消息你可以参照处理
      

  20.   

    to bjxbt(bjxbt):
    你的方法我老是实现不了,你能不能把你的单元文件给我?谢谢!
      

  21.   

    to bjxbt(bjxbt):
    你的方法我老是实现不了,你能不能把你的单元文件给我?谢谢! 
      

  22.   

    to bjxbt(bjxbt):
    你的方法我老是实现不了,你能不能把你的单元文件给我?谢谢! 
      

  23.   

    to bjxbt(bjxbt):
    你的方法我老是实现不了,你能不能把你的单元文件给我?谢谢! 
      

  24.   

    我劝你死了这条心吧,做起来很麻烦的,我光是做那个最大化的按钮,就满头大包乐~~~~~~,还没有拦截WM_NC消息呢!