开发界面问题,请高手指教!(100分)

M

mmlmm

Unregistered / Unconfirmed
GUEST, unregistred user!
我想开发一程序主程序界面上只需要MainMenu and CoolBar 、Toolbar 等,不过需要在主窗口
最大化时像delphi一样列高不变,列宽可以控制。
而子窗口在最大化时在主窗口下。
本人没有啥分数100分不够的话,可以加。
 
在hubdog的葵花宝典上看到的,你自己再改改应该就行了
一开始的Form1的Align设置为alTop,就是Delphi的主界面


unit MainUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
message WM_GETMINMAXINFO;
procedure WMInitMenuPopup(var Msg: TWMInitMenuPopup);
message WM_INITMENUPOPUP;
procedure WMNCHitTest(var Msg: TWMNCHitTest);
message WM_NCHitTest;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
inherited;
with Msg.MinMaxInfo^ do
begin
//下面这两句注释后,再将WMNCHitTest中的HTLEFT,HTRIGHT删掉,就变成列宽可改了
ptMinTrackSize.x:= form1.width;
ptMaxTrackSize.x:= form1.width;
ptMinTrackSize.y:= form1.height;
ptMaxTrackSize.y:= form1.height;
end;
end;

procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup);
begin
inherited;
if Msg.SystemMenu then
EnableMenuItem(Msg.MenuPopup, SC_SIZE, MF_BYCOMMAND or MF_GRAYED)
end;

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
with Msg do
if Result in [HTLEFT, HTRIGHT, HTBOTTOM, HTBOTTOMRIGHT,
HTBOTTOMLEFT, HTTOP, HTTOPRIGHT, HTTOPLEFT] then
Result:= HTNOWHERE
end;

end.
 
用第三方控制,可能更好。要不要
 
那个控件,可以提供码 ?
 
很简单!
 
mmlmm,你的邮箱是什么???我发给你。
我的是:qiao198@sina.com
 
procedure wmgetminmaxinfo(var message:Twmgetminmaxinfo); message wm_getminmaxinfo;
procedure tform1.wmgetminmaxinfo(var message:twmgetminmaxinfo);
begin
message.MinMaxInfo.ptMaxSize.X:=800;
message.MinMaxInfo.ptMaxSize.Y:=105;
message.MinMaxInfo.ptMaxPosition.X:=-1;
message.MinMaxInfo.ptMaxPosition.Y:=-1;
message.Result:=0;
inherited;
end;
应该能够达到你的要求!
 
TO:qiao198
mail: txpyx@YAHOO.COM.CN
---------------------------------------------------------
TO:baidie子窗口最大化时可以实现在主窗口下吗?
 
当然可以,你动态记录组窗体的位置,然后根据位置算出子窗体最大话时要显示的位置不
就可以了吗?
 
TO :BAIDIE

给段代码吧,本人时新手
 
老兄,我上面那段你没试吗?那已经可以实现你的目的了
 
to: LovingTse

你的代码要是在form上加了mainmenu toolbar等就要出错!

谢谢
 
接受答案了.
 
问题被斑竹结束了,前几天没上网,没看到你的问题,非常抱歉。
要是在form上加了mainmenu、toolbar等会出错,那是因为Toolbar引用了ComCtrls单元的原因,ComCtrls中也定义了HTNOWHERE,所以编译无法通过,只要照下面改一下就行了
procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
inherited;
with Msg do
if Result in [HTBOTTOM, HTBOTTOMRIGHT,
HTBOTTOMLEFT, HTTOP, HTTOPRIGHT, HTTOPLEFT] then
Result:= Windows.HTNOWHERE;{原来是Result:=HTNOWHERE;但引用ComCtrls单元之后,Result的值就变成了ComCtrls的HTNOWHERE,而不是我们想要的Windows单元中的HTNOWHERE。}
end;

GOOD LUCK!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部