Оптимизация свойств компонента TSub в Delphi: игнорирование нулевых значений для DFM
Вопрос разработчиков, работающих с компонентами Delphi, часто связан с управлением свойствами компонентов и их сохранением в файле DFM. В частности, разработчик столкнулся с задачей игнорирования сохранения свойства Value компонента TSub в DFM, если его значение равно нулю и используется значение по умолчанию из связанного компонента TMain.
Проблема
Рассмотрим пример: у нас есть два компонента, TMain и TSub, где TSub может быть "привязан" к TMain через свойство Main. Свойство Value в TSub имеет специальное поведение: если его значение установлено в ноль, то при получении значения (GetValue) возвращается свойство Default из связанного TMain.
Решение
Для решения поставленной задачи используется спецификатор stored. Свойство Value в классе TSub модифицируется следующим образом:
Следует определить вспомогательную функцию IsValueStored, которая возвращает True, если значение свойства Value отличается от нуля или если TMain не назначен:
function TSub.IsValueStored: Boolean;
begin
Result := (FValue <> 0) or (FMain = nil);
end;
Таким образом, если Value равен нулю и TMain назначен, свойство не будет сохранено в DFM, и вместо него будет использовано значение по умолчанию из TMain.
Пример кода
type
TMain = class(TComponent)
...
published
property Default: Integer read FDefault write SetDefault;
end;
TSub = class(TComponent)
...
private
FValue: Integer;
FMain: TMain;
...
public
property Value: Integer read GetValue write SetValue stored IsValueStored;
property Main: TMain read FMain write SetMain;
protected
function GetValue: Integer;
...
function IsValueStored: Boolean;
end;
implementation
function TSub.GetValue: Integer;
begin
if FValue = 0 then begin
if Assigned(FMain) then begin
Result := FMain.Default;
end else begin
Result := 0;
end;
end else begin
Result := FValue;
end;
end;
function TSub.IsValueStored: Boolean;
begin
Result := (FValue <> 0) or (FMain = nil);
end;
Заключение
Использование спецификатора stored позволяет разработчикам контролировать, какие свойства компонентов сохраняются в DFM, и игнорировать ненужные значения. Это повышает эффективность работы с файлами конфигурации и упрощает процесс их управления.
Примечание: Дополнительную информацию о спецификаторах свойств можно найти в официальной документации Embarcadero RAD Studio.
Разработчики Delphi оптимизируют свойства компонента `TSub`, чтобы игнорировать нулевые значения в DFM, используя спецификатор `stored` для контроля сохранения свойств.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.