如何实现 成比例改变窗体的长宽 ( 积分: 50 )

  • 主题发起人 主题发起人 外来天客
  • 开始时间 开始时间

外来天客

Unregistered / Unconfirmed
GUEST, unregistred user!
RT
当拖动窗体的宽时,它的宽也能自动的改变其高度,如何实现?
 
先给初始的长宽比例。
在一个变化时,代码给另一个变化不就可以了?
 
能不能讲详细点?[:D]
 
控件的大小是否要变呢
记住原来的宽高比例i
窗口FormResize写
width:=height*i
 
to 勇者
你的这个方法好像有点问题哦. 只能拖动高,而拖动宽的时候窗体却没有改变大小
 
借楼主宝地也问一下,如果改变窗体大小,在窗体中的可见控件(如按按钮等)及字体是否也能做到随比例改变.如网页的效果.
 
private
f: do
UBLE;
lw, lh: Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
lw := Width;
lh := Height;
f := Width / Height;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
if Height = lh then
Height := Round(Width / f);
if Width = lw then
Width := Round(Height * f);
lw := Width;
lh := Height;
end;
 
to lucky.gong:
来自:lucky.gong, 时间:2007-4-9 10:02:03, ID:3697175
借楼主宝地也问一下,如果改变窗体大小,在窗体中的可见控件(如按按钮等)及字体是否也能做到随比例改变.如网页的效果.
网页中有你说的效果么?
如果你想让控件大小跟随窗体变化,可以设置Anchors属性,具体效果你自己看着办吧。
Anchors
akLeft
akTop
akRight
akBottom
 
to japhe:
你这种方法确实可行...谢谢了..
但是有朋友给我提供了另外一种方法,但没起作用,如何修改一下?我觉得他这种方法应该更合理
要有一个比例.比如 宽 5 高 3.
然后计算.
procedure SetBounds(aLeft, aTop, aWidth, aHeight: integer);
override;
procedure TForm1.SetBounds(aLeft, aTop, aWidth, aHeight: integer);
begin
if aheight <> height then
begin
awidth := round(aheight / 3 * 5);
end;
inherited SetBounds(aLeft, aTop, aWidth, aHeight);
end;

有谁用过上面这种方法没?
 
FORM 的ONChange这个事件里写
form1.height:=取整(form1.width*比例)
其他组件的大小变化也在这个过程里写代码
 
这个函数事件是在窗体创建时触发的,当窗体创建完成后,手动更改窗体大小,将不会触发这个函数事件。
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
virtual;
Description
Use SetBounds to change all of the component's boundary properties at one time. The same effect can be achieved by setting the Left, Top, Width, and Height properties separately, but SetBounds changes all four properties at once ensuring that the control will not repaint between changes.
 
接受答案了.
 
后退
顶部