好的,我需要根据布局尺寸调整控件的大小。当布局尺寸发生变化时,我还需要它来调整大小(例如,将设备从配置文件转到横向)
我的假设是您只需检查设备的尺寸并进行相应调整
例如
if ClientHeight > ClientWidth then
fHeader.Height:= ClientHeight Div 6
else
fHeader.Height:= ClientHeight Div 8;
然而,把这个放在哪里最好呢?
在调整布局大小之前和调整布局大小之后,我已经在 Resize 方法中尝试过它。它似乎不起作用!
好吧,它适用于表单的初始激活,但是当表单调整大小时,它不会。在 IDE 中,我什至必须点击 RELOAD 按钮才能使其工作。
下面是表单上有两个组件的示例。一个 TW3HeaderControl 与表单顶部对齐,一个 TW3ListBox 与客户端对齐。我想根据它是在 Profile 还是 Landscape 中调整 TW3HeaderControl 的高度
例如
unit Form1;
interface
uses
SmartCL.System, SmartCL.Graphics, SmartCL.Components, SmartCL.Forms,
SmartCL.Fonts, SmartCL.Borders, SmartCL.Application, SmartCL.Layout,
SmartCL.Controls;
type
TForm1 = class(TW3Form)
private
{$I 'Form1:intf'}
fLayout: TLayout;
fHeader: TW3HeaderControl;
fList: TW3ListBox;
protected
procedure InitializeForm; override;
procedure InitializeObject; override;
procedure Resize; override;
end;
implementation
{ TForm1 }
procedure TForm1.InitializeForm;
begin
inherited;
// this is a good place to initialize components
fLayout:= Layout.Client([Layout.Top(fHeader), Layout.Client(fList)]);
end;
procedure TForm1.InitializeObject;
begin
inherited;
{$I 'Form1:impl'}
fHeader:= TW3HeaderControl.Create(self);
fList:= TW3ListBox.Create(self);
end;
procedure TForm1.Resize;
begin
inherited;
if assigned(FLayout) then
begin
fLayout.Resize(self);
if ClientHeight > ClientWidth then
fHeader.Height:= ClientHeight Div 6
else
fHeader.Height:= ClientHeight Div 8;
end;
end;
initialization
Forms.RegisterForm({$I %FILE%}, TForm1);
end.
我什至尝试覆盖“FormActivated”并将其放在那里并调用 Resize。
是什么赋予了?
更新!!!!!
而不是在 InitializeForm 中分配布局
例如
procedure TForm1.InitializeForm;
begin
inherited;
// this is a good place to initialize components
fLayout:= Layout.Client([Layout.Top(Layout.Height(ClientHeight Div 6),fHeader), Layout.Client(fList)]);
end;
而是在 Resize 方法中分配它??
例如
procedure TForm1.Resize;
begin
inherited;
if ClientWidth > ClientHeight then
fLayout:= Layout.Client([Layout.Top(Layout.Height(ClientHeight Div 6),fHeader), Layout.Client(fList)])
else
fLayout:= Layout.Client([Layout.Top(Layout.Height(ClientHeight Div 8),fHeader), Layout.Client(fList)]);
fLayout.Resize(self);
end;
更新#2
而且,如果我在表单上添加另一个控件,那么还有另一个问题:(
如果我将大小设置为静态值,效果很好
procedure TForm1.InitializeObject;
begin
inherited;
{$I 'Form1:impl'}
fHeader:= TW3HeaderControl.Create(self);
fHeader.Height:= 50; //******************************
fHeader.BackButton.Visible:= False;
fHeader.Title.Caption:= 'Menu';
fHeader.Title.AlignText:= taCenter;
fFooter:= TW3HeaderControl.Create(self);
fFooter.Height:= 50; //******************************
fFooter.BackButton.Visible:= False;
fFooter.Title.Caption:= 'Copyright (C) 2016';
fFooter.Title.AlignText:= taCenter;
fList:= TW3ListBox.Create(self);
end;
这行得通
procedure TForm1.InitializeForm;
begin
inherited;
// this is a good place to initialize components
fLayout:= Layout.Client([Layout.Top(fHeader),
Layout.Bottom(fFooter),
Layout.Client(fList)]);
end;
但是,如果我在运行时根据尺寸动态设置高度,那么它不会
procedure TForm1.InitializeForm;
begin
inherited;
// this is a good place to initialize components
fLayout:= Layout.Client([Layout.Top(Layout.Height(ClientHeight Div 6), fHeader),
Layout.Bottom(Layout.Height(ClientHeight Div 6),fFooter),
Layout.Client(fList)]);
end;