Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Работа с RTTI в Delphi 10.2 Tokyo: настройка свойств компонентов, созданных во время выполнения

Delphi , Компоненты и Классы , RTTI

Разработка на Delphi часто требует гибкости в работе с компонентами, особенно когда они создаются во время выполнения программы. В таких случаях приходит на помощь RTTI (Runtime Type Information) — технология, позволяющая получать информацию о типах данных во время выполнения программы. В данной статье мы рассмотрим, как использовать RTTI для настройки свойств компонентов в Delphi 10.2 Tokyo.

Основы RTTI в Delphi

RTTI позволяет разработчикам получать доступ к типам, полям, свойствам, методам и другим аспектам объектов во время выполнения программы. Это особенно полезно, когда необходимо работать с объектами неизвестного типа или при динамическом создании интерфейсов.

Пример использования RTTI

Вот пример кода, который демонстрирует, как установить свойство LineType у компонента TLine, созданного во время выполнения:

Var
    Componente_cc: TControl;

    procedure TfrmPrincipal.AlteraPropriedades;
begin
    if IsPublishedProp(Componente_cc, 'LineType') then
      SetPropValue(Componente_cc, 'LineType', 'Diagonal');
end;

Работа со вложенными свойствами

Однако, что делать, если свойство, которое нужно изменить, является вложенным, например, свойство Stroke у TLine с подсвойствами Kind, Color, Cap, Dash и так далее? В этом случае необходимо сначала получить доступ к вложенному объекту, а затем уже изменять его свойства.

uses
  ..., TypInfo;

Var
    Componente_cc: TControl;

    procedure TfrmPrincipal.AlteraPropriedades;
    var
      Stroke: TObject;
    begin
      if IsPublishedProp(Componente_cc, 'Stroke') then
      begin
        Stroke := GetObjectProp(Componente_cc, 'Stroke');
        if Stroke <> nil then
          SetPropValue(Stroke, 'Color', ...);
      end;
    end;

Использование Enhanced RTTI

С версии Delphi 2010 доступна улучшенная версия RTTI, которая позволяет работать не только с опубликованными свойствами, но и с другими аспектами объектов. Вот пример использования Enhanced RTTI для изменения свойства Color объекта Stroke:

uses
  ..., System.Rtti;

Var
    Componente_cc: TControl;

    procedure TfrmPrincipal.AlteraPropriedades;
    var
      Ctx: TRttiContext;
      Prop: TRttiProperty;
      Stroke: TObject;
    begin
      Ctx := TRttiContext.Create;

      Prop := Ctx.GetType(Componente_cc.ClassType).GetProperty('Stroke');
      if (Prop <> nil) and (Prop.PropertyType.TypeKind = tkClass) then
      begin
        Stroke := Prop.GetValue(Componente_cc).AsObject;
        if Stroke <> nil then
        begin
          Prop := Ctx.GetType(Stroke.ClassType).GetProperty('Color');
          if Prop <> nil then
            Prop.SetValue(Stroke, ...);
        end;
      end;
    end;

Альтернативный подход

Вместо использования RTTI для доступа к вложенным свойствам, можно напрямую работать с объектом, если известен его тип:

uses
  ..., TypInfo;

Var
    Componente_cc: TControl;

    procedure TfrmPrincipal.AlteraPropriedades;
    var
      PropInfo: PPropInfo;
      Stroke: TStrokeBrush;
    begin
      PropInfo := GetPropInfo(Componente_cc, 'Stroke', [tkClass]);
      if PropInfo <> nil then
      begin
        Stroke := GetObjectProp(Componente_cc, PropInfo, TStrokeBrush) as TStrokeBrush;
        if Stroke <> nil then
          Stroke.Color := ...; // Нет необходимости использовать RTTI!
      end;
    end;

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

Заключение

В данной статье мы рассмотрели, как использовать RTTI для настройки свойств компонентов в Delphi 10.2 Tokyo, созданных во время выполнения программы. Мы обсудили базовые принципы RTTI, примеры кода для работы со стандартными и вложенными свойствами, а также преимущества использования Enhanced RTTI. Надеемся, что предоставленная информация окажется полезной для разработчиков, работающих с Delphi.

Создано по материалам из источника по ссылке.

В данном описании рассматривается использование RTTI (Runtime Type Information) в Delphi 10.2 Tokyo для настройки свойств компонентов, созданных во время выполнения программы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: RTTI ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 21:00:14/0.0031521320343018/0