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

Как изменить значение свойства компонента по имени

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



Автор: http://www.lmc-mediaagentur.de

function GetProperty(AControl: TPersistent; AProperty: string): PPropInfo;
var
  i: Integer;
  props: PPropList;
  typeData: PTypeData;
begin
  Result := nil;
  if (AControl = nil) or (AControl.ClassInfo = nil) then
    Exit;
  typeData := GetTypeData(AControl.ClassInfo);
  if (typeData = nil) or (typeData^.PropCount = 0) then
    Exit;
  GetMem(props, typeData^.PropCount * SizeOf(Pointer));
  try
    GetPropInfos(AControl.ClassInfo, props);
    for i := 0 to typeData^.PropCount - 1 do
    begin
      with Props^[i]^ do
        if (Name = AProperty) then
          result := Props^[i];
    end;
  finally
    FreeMem(props);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  propInfo: PPropInfo;
begin
  PropInfo := GetProperty(Button1.Font, 'Name');
  if PropInfo <> nil then
    SetStrProp(Button1.Font, PropInfo, 'Arial');
end;

Переведенный текст:

Код на Delphi предназначен для извлечения свойства компонента по его имени и последующего изменения значения этого свойства. Вот разбивка кода:

Процедура GetProperty

Эта функция принимает два параметра: AControl (объект TPersistent) и AProperty (строка, представляющая имя свойства). Она возвращает указатель на структуру PPropInfo, содержащую информацию о свойстве.

Функция выполняет следующие действия:

  1. Проверяет, является ли AControl или его класс-информация nil. Если да, то она выходит.
  2. Получает типовые данные для AControl.ClassInfo.
  3. Выделяет память для массива структур PPropList (с PropCount элементами) с помощью GetMem.
  4. Вызывает функцию GetPropInfos, чтобы заполнить массив PPropList информацией о свойствах.
  5. Итерирует по массиву PPropList, ищет свойство с именем, совпадающим с AProperty. Если найдено, то она устанавливает переменную Result в указатель на это свойство.
  6. Освобождает выделенную память с помощью FreeMem.

Процедура Button1Click

Эта процедура вызывается при клике кнопки Button1. Она выполняет следующие действия:

  1. Вызывает функцию GetProperty с Button1.Font как контролем и 'Name' как свойством имени. Это извлекает информацию о свойстве Font.Name.
  2. Проверяет, является ли полученное свойство (PropInfo) не nil.
  3. Если PropInfo является валидным, то она устанавливает значение свойства Font.Name в 'Arial' с помощью SetStrProp.

В целом, этот код демонстрирует, как динамически извлекать и изменять свойство компонента в Delphi.

Альтернативное решение

Вместо ручного перебора списка свойств и поиска конкретного свойства имени можно использовать функцию GetPropValue из единицы System.Classes. Эта функция принимает контрол, имя свойства и необязательное значение для установки. Вот пример модификации кода:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Font.Name := 'Arial';
end;

Этот подход более компактен и исключает необходимость вручной управления памятью. Однако он работает только в том случае, если вы знаете имя свойства на этапе компиляции. Функция GetProperty полезна, когда вам нужно динамически определить имя свойства или извлечь информацию о свойстве без изменения его значения.

В статье описывается функция GetProperty для изменения значения свойства компонента по имени, которая позволяет получить информацию о свойстве и изменить его значение в коде на Delphi.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-25 07:46:05/0.0052750110626221/0