如何改变MDI窗口的客户区位置?(30分)

H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
比如在MDI上放置一个BUTTON,要让MDI客户区的左上角位置=BUTTON的右下角 如果实现?
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么没有人看呢,?分太少?
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
放两个Panel,设置对齐方式,然后可以挤出空间了
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
要用代码实现,客户区必须真正改变位置和大小!!!
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
客户区是个窗口,句柄是ClientHandle
用API函数在适当的时机设置其位置即可
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
给段代码,一点提示也可,分就给你了,谢谢!!
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
MainMenu1: TMainMenu;
File1: TMenuItem;
Nwe1: TMenuItem;
private
{ Private declarations }
protected
procedure wmsize(var Message: TMessage);
message WM_SIZE;
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.wmsize(var Message: TMessage);
var
w, h: Integer;
begin
//inherited;
w := ClientWidth - (Button1.Left + Button1.Width);
h := ClientHeight - (Button1.Top + Button1.Height);
SetWindowPos(ClientHandle, 0, Button1.Left + Button1.Width,
Button1.Top + Button1.Height, w, h,
SWP_NOZORDER);
end;

end.
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure wmsize(var Message: TMessage);
message WM_SIZE;
谢谢!
这个过程能解释一下吗?
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
这是个消息映射,拦截主窗口的大小改变的消息,然后自己调整窗口上所有控件的位置
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢!
如果是这样:我在窗口客户区的左边放一个PANEL和一个分割条,然后我要在这个分割条
拖动的时候同时改变客户区位置应该如果写,我只是在入门阶段,希望您能指点我,如果
觉得分不够,我可以另开帖给你分?谢谢!
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
如果按照你说的去做,则不需要写一行代码,只需要设置各组件的对齐属性 Align
按照你说的去做,Panel设置为alLeft, spliter设置为 alLeft
然后运行,你试试吧
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
是的,但是事实上MDI窗口的CLIENTWIDTH和CLIENTHEIGHT在窗口最大化时分别是:
SCREEN.WIDTH=1024和SCREEN.HEIGHT-MAINMENU.HEIGHT。所以我就不太明白了。
能讲一下吗?
 
H

hyj_it

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
ClientWidth 和 ClientHeight
是指的窗口客户区的大小,指的是除去窗口边框,标题栏,菜单栏剩下的空间
当一个窗口最大化时,客户区宽度就是屏幕的宽度,是这样的,没错
 
顶部