如何设置 TControl 的比例?

How set the scale of a TControl?

在 XE2 中,我只是使用 Scale 属性 来设置控件的 x 轴和 y 轴刻度。在后续版本中,显然,Scale 属性 已在 TControl 中受到保护,并在后代控件中发布。

我有很多函数采用 TControl 引用并操纵其比例。

在 10.2 中设置 TControl 比例的首选方法是什么?

您可以使用 protected hack 来解决这个问题:

TYPE
  TControlHack = CLASS(TControl);

PROCEDURE SetScale(C : TControl ; NewScale : TPosition);
  BEGIN
    TControlHack(C).Scale:=NewScale
  END;

通过声明从原始 class 继承的新 class,当您将实例硬转换为这个新 [=20] 时,您实际上 "dragging" 受保护的定义进入视图=].

您也可以将其实现为 class 助手:

TYPE
  TControlHelper = CLASS HELPER FOR TControl
                   STRICT PRIVATE
                     PROCEDURE SetScale(Value : TPosition); INLINE;
                     FUNCTION GetScale : TPosition; INLINE;
                   PUBLIC
                     PROPERTY Scale : TPosition Read GetScale Write SetScale;
                   END;

FUNCTION TControlHelper.GetScale : TPosition;
  BEGIN
    Result:=INHERITED Scale
  END;

PROCEDURE TControlHelper.SetScale(Value : TPosition);
  BEGIN
    INHERITED Scale:=Value
  END;