delphi android 界面自适应,Delphi 让窗体自适应屏幕显示

unit Unit1;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Typinfo, Vcl.StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function PropertyExists(const AObject: TObject; const APropName: string): Boolean;

var

PropInfo: PPropInfo;

begin

PropInfo := GetPropInfo(AObject.ClassInfo, APropName);

Result := Assigned(PropInfo);

end;

function GetObjectProperty(

const AObject: TObject;

const APropName: string

): TObject;

var

PropInfo: PPropInfo;

begin

Result := nil;

PropInfo := GetPropInfo(AObject.ClassInfo, APropName);

if Assigned(PropInfo) and

(PropInfo^.PropType^.Kind = tkClass) then

Result := GetObjectProp(AObject, PropInfo);

end;

procedure FitDeviceResolution(Sender: TForm);

const

OriWidth = 1440;

OriHeight = 900;

var

i: Integer;

j: Integer;

LocAnchors: array of TAnchors;

LocAlign: array of TAlign;

LocList: TList;

LocFontSize: Integer;

LocFont: TFont;

LocCmp: TComponent;

ScrResolutionRateH, ScrResolutionRateW,LocFontRate: Double;

begin

ScrResolutionRateH := Screen.Height / OriHeight;

ScrResolutionRateW := Screen.Width / OriWidth;

if Abs(ScrResolutionRateH - 1) < Abs(ScrResolutionRateW - 1) then

LocFontRate := ScrResolutionRateH

else

LocFontRate := ScrResolutionRateW;

LocList := TList.Create;

try

try

if (screen.width <> OriWidth) or (screen.Height <> OriHeight) then

begin

Sender.Scaled := False;

for i := Sender.ComponentCount - 1 downto 0 do

begin

LocCmp := Sender.Components[i];

if LocCmp is TControl then

LocList.Add(LocCmp);

if PropertyExists(LocCmp, 'FONT') then

begin

LocFont := TFont(GetObjectProperty(LocCmp, 'FONT'));

LocFontSize := Round(LocFontRate * LocFont.Size);

LocFont.Size := LocFontSize;

end;

end;

SetLength(LocAnchors, LocList.Count);

SetLength(LocAlign, LocList.Count);

for i := 0 to LocList.Count - 1 do

with TControl(LocList.Items[i]) do

begin

LocAnchors[i] := Anchors;

LocAlign[i] := Align;

Align := alNone;

Anchors := [akLeft, akTop];

end;

Sender.Top := Round(Sender.Top * ScrResolutionRateH);

Sender.Left := Round(Sender.Left * ScrResolutionRateW);

Sender.Height := Round(Sender.Height * ScrResolutionRateH);

Sender.Width := Round(Sender.Width * ScrResolutionRateW);

Sender.Font.size := Round(LocFontRate * Sender.Font.size);

for i := 0 to LocList.Count - 1 do

begin

with TControl(LocList.Items[i]) do

begin

Top := Round(Top * ScrResolutionRateH);

Left := Round(Left * ScrResolutionRateW);

Height := Round(height * ScrResolutionRateH);

Width := Round(width * ScrResolutionRateW);

end;

end;

for i := 0 to LocList.Count - 1 do

TControl(LocList.Items[i]).Align := LocAlign[i];

for i := 0 to LocList.Count - 1 do

TControl(LocList.Items[i]).Anchors := LocAnchors[i];

end;

except

MessageDlg(LocCMP.Name, mtInformation, [mbOK], 0);

end;

finally

LocList.Free;

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

FitDeviceResolution(Self);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

FitDeviceResolution(Self);

end;

end.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值