Как установить масштаб TControl?

В XE2 я просто использовал свойство Scale, чтобы задать масштабы элемента управления по осям x и y. В последующих версиях, видимо, свойство Scale стало защищенным в TControl и опубликовано в дочерних элементах управления.

У меня есть довольно много функций, которые берут ссылку TControl и манипулируют ее масштабом.

Каков предпочтительный метод установки шкалы TControl в 10,2?


person Domus    schedule 30.07.2018    source источник


Ответы (1)


Вы можете использовать protected hack, чтобы преодолеть это:

TYPE
  TControlHack = CLASS(TControl);

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

Объявляя новый класс, наследуемый от исходного класса, вы фактически «перетаскиваете» защищенные определения в поле зрения, когда жестко приводите экземпляр к этому новому классу.

Вы также можете реализовать его как помощник класса:

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;
person HeartWare    schedule 31.07.2018
comment
Я боялся этого. В XE2 это казалось намного более элегантным. - person Domus; 31.07.2018
comment
Это CDO, ты, парень, не использующий аббревиатуру в алфавитном порядке :-). - person HeartWare; 31.07.2018