各位大侠,如何改变无边框窗体的大小? (200分)

W

withub

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个程序,是无边框窗体,却不能改变窗体的大小。
正如大家所知道的,当BorderStyle:=bsSizeable 时,把鼠标移到边缘时间,就可以拖曳
改变窗体的大小了。
如果 BorderStyle:=bsNone时,如何用上面的方式改变窗体的大小。(始终保持平面的风格)
 
程序调用可设定啊
 
动态改变。
form1.width := 100;
form1.heigth := 200;
 
你想改变窗体大小的时候就把它设为Sizeable,完了再把它设为None,哈:)
具体就是捕捉鼠标在你的窗体上的移动,当它接近边框时就把Form设为Sizeable,
反之就设为None,就象Windows Me/2000/XP的活动桌面项表现的一样:)。
 
动态改变
 
我自己解决了!
var
mouse_down,first_draw:Boolean;
x_mouse,y_mouse:Integer;
p_old:TPoint ;


procedure Tfrmmain.brMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
p:TPoint;
begin
GetCursorPos(p);
mouse_down:=True;
first_draw:=True ;
x_mouse:=p.x;
y_mouse:=p.y;
p_old:=p ;
SetCursor(LoadCursor(0, IDC_SIZENWSE));
end;

procedure Tfrmmain.brMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p:TPoint;
desktop:TCanvas ;
rect:TRect ;
rect_old:TRect;
begin
SetCursor(LoadCursor(0, IDC_SIZENWSE));
if mouse_down then begin
GetCursorPos(p);
desktop:=windowsDesktopCanvas;

with desktop do begin

Pen.Width:=1;
Pen.Style:=psSolid ;

if not first_draw then begin

rect_old.Left:=left;
rect_old.Top:=top;
rect_old.Right:=p_old.X ;
rect_old.Bottom:=p_old.y;
DrawFocusRect(rect_old );
end;


rect.Left:=left;
rect.Top:=top;
rect.Right:=p.X ;
rect.Bottom:=p.y;

DrawFocusRect(rect );
first_draw :=False ;
TBToolbar1.Refresh ;
F_List.Refresh ;



end;

desktop.Free ;
p_old:=p;
end;
end;

procedure Tfrmmain.brMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Width:=Width+(p_old.x-x_mouse);
Height:=Height+(p_old.Y-y_mouse );
Refresh;
mouse_down:=False ;
SetCursor(LoadCursor(0, IDC_ARROW ));
end;
 
顶部