Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#9

AW: Skalierbare Fensterinhalte

  Alt 12. Mai 2023, 14: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 14:57 Uhr)
  Mit Zitat antworten Zitat