Обратите внимание, код из этого поста будет работать только для опубликованных свойств!
Чтобы ответить на ваш вопрос , если есть способ установить значение свойства без использования оператора if , проверьте следующие перегруженные функции.
Первый тип предназначен для типов свойств char, string, option, integer, 64-bit integer, float, enumeration, set и dynamic (phew). Второй только для свойств типа класса. Оба возвращают True, если данное свойство существует, и значение или экземпляр объекта назначены успешно, иначе False:
uses
TypInfo;
function TrySetPropValue(AInstance: TObject; const APropName: string;
const AValue: Variant): Boolean; overload;
begin
Result := True;
try
SetPropValue(AInstance, APropName, AValue);
except
Result := False;
end;
end;
function TrySetPropValue(AInstance: TObject; const APropName: string;
AValue: TObject): Boolean; overload;
begin
Result := True;
try
SetObjectProp(AInstance, APropName, AValue);
except
Result := False;
end;
end;
И использование; когда Memo1.Lines
установлен, вторая версия TrySetPropValue
называется:
procedure TForm1.Button1Click(Sender: TObject);
var
Strings: TStringList;
begin
TrySetPropValue(Memo1, 'Width', 250);
TrySetPropValue(Memo1, 'Height', 100);
TrySetPropValue(Memo1, 'ScrollBars', ssBoth);
Strings := TStringList.Create;
try
Strings.Add('First line');
Strings.Add('Second line');
TrySetPropValue(Memo1, 'Lines', Strings);
finally
Strings.Free;
end;
if not TrySetPropValue(Memo1, 'Height', 'String') then
ShowMessage('Property doesn''t exist or the value is invalid...');
if not TrySetPropValue(Memo1, 'Nonsense', 123456) then
ShowMessage('Property doesn''t exist or the value is invalid...');
end;