Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
Delphi 12 Athens
|
AW: Skalierbare Fensterinhalte
12. Mai 2023, 15:53
Ich habe die DPI bezogene Skalierung damals von Hand gelöst...
Delphi-Quellcode:
var ScaleValue96Factor:Double;
Procedure InitScaleValue96factor;
begin
ScaleValue96Factor := Screen.PixelsPerInch / 96;
end;
Function ScaleValue96(Value:integer):integer;
Begin
Result := Round(ScaleValue96Factor * Value);
End;
Procedure ScaleControl(aControl:TControl; ScaleFonts:Boolean=false; NoWordWrap:Boolean=false);
var i,x:integer;
MetaRecord : PPropInfo;
o:Tobject;
begin
aControl.Setbounds(
ScaleValue96(aControl.left),
ScaleValue96(aControl.top),
ScaleValue96(aControl.width),
ScaleValue96(aControl.height)
);
if ScaleFonts then
Begin
MetaRecord := getpropinfo(aControl,'Font');
if MetaRecord <> nil then begin
o := getobjectProp( aControl,'Font');
if getpropinfo(o,'Height') <> Nil then begin
x := GetOrdProp(o, 'Height');
x := ScaleValue96(x);
SetOrdProp(o, 'Height',x);
end else begin
x := GetOrdProp(o, 'Size');
x := ScaleValue96(x);
SetOrdProp(o, 'Size',x);
end;
end;
End;
if NoWordWrap then
begin
MetaRecord := getpropinfo(aControl,'NoWrap');
if MetaRecord <> nil then
SetOrdProp(aControl, 'NoWrap',-1);
end;
if aControl is Twincontrol then
Begin
For i := 0 to Pred(Twincontrol(aControl).ControlCount) do
Begin
ScaleControl(Twincontrol(aControl).Controls[i],ScaleFonts,NoWordWrap);
End;
End;
end;
nachteil = In der Version werden glaube ich "Tabs" nicht richtig berücksichtigt.
Andreas Monads? Wtf are Monads?
Geändert von QuickAndDirty (12. Mai 2023 um 15:57 Uhr)
|
|
Zitat
|