怎么移动窗体到屏幕居中放大? ( 积分: 100 )

  • 主题发起人 主题发起人 bbscom
  • 开始时间 开始时间
B

bbscom

Unregistered / Unconfirmed
GUEST, unregistred user!
1.gif

如上面有两个矩形表示同一个FORM,小窗体可以在屏幕任何地方,小窗体慢慢放大到屏幕居中,红线表示小窗体放大居中的路径。
请大家写这个计算方法谢谢!!!
 
修改工程文件

program Project1;

uses
Forms,
SysUtils,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

procedure MoveForm(Form: TForm; L, T, W, H: Integer);
var
I, DL, DT, DW, DH, DX: Integer;

procedure SetDX(Int: Integer);
begin
if (Int <> 0) and ((DX > Abs(Int)) or (DX = 0)) then
DX := Abs(Int);
end;

begin
DL := L - Form.Left;
DT := T - Form.Top;
DW := W - Form.Width;
DH := H - Form.Height;
DX := 0;
SetDX(DL);
SetDX(DT);
SetDX(DW);
SetDX(DH);
DX := DX div 3; //3,这个数字可以决定移动的快慢,数字越大移动越快
if DX = 0 then Exit; //说明位置大小都相同,无需移动
DL := Round(DL / DX);
DT := Round(DT / DX);
DW := Round(DW / DX);
DH := Round(DH / DX);
with Form do
begin
Show;
//AutoScroll := False;
for I := 0 to DX do
begin
SetBounds(Left + DL, Top + DT, Width + DW, Height + DH);
Update;
end;
SetBounds(L, T, W, H);
//AutoScroll := True;
end;
end;

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Form1.SetBounds(10, 10, 100, 50);
MoveForm(Form1, (Screen.WorkAreaWidth - 600) div 2, (Screen.WorkAreaHeight - 400) div 2, 600, 400);
Sleep(1000);
MoveForm(Form1, 10, 10, 100, 50);
Application.Run;
end.
 
ANiDelphi,你好!非常感谢你!
从小放大你已经搞好了,再怎么缩回去呢?也就是从居中点缩回原来的位子。谢谢你!!!
 
已在原帖修改,用同一个过程就行了,
不过始终不精确,如果Form的大小位置同屏幕成比例的话可能会平滑点
 
请大家帮助解决此问题:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3855625
 
接受答案了.
 

Similar threads

D
回复
0
查看
923
DelphiTeacher的专栏
D
D
回复
0
查看
715
DelphiTeacher的专栏
D
D
回复
0
查看
676
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部