让窗体自适应屏幕
2020-11-24 04:36
标签:class int width c get com unit Unit1; interface uses type var implementation {$R *.dfm} function GetObjectProperty( procedure FitDeviceResolution(Sender: TForm); procedure TForm1.FormCreate(Sender:
TObject); end. 让窗体自适应屏幕,搜素材,soscw.com 让窗体自适应屏幕 标签:class int width c get com 原文地址:http://www.cnblogs.com/onionhacker/p/3717616.html
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Typinfo,
Vcl.StdCtrls;
TForm1 = class(TForm)
Button1: TButton;
procedure
FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations
}
end;
Form1: TForm1;
function PropertyExists(const AObject: TObject; const
APropName: string): Boolean;
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(AObject.ClassInfo, APropName);
Result :=
Assigned(PropInfo);
end;
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;
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) 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;
begin
FitDeviceResolution(Self);
end;
上一篇:windows下匿名管道的使用
下一篇:Windows上的音频采集技术