私は Delphi の専門家を書いています。オブジェクトであるプロパティのプロパティに値を書き込むことができる必要があります。たとえば、フォームに GroupBox があり、Margins.Left プロパティを編集したいとします。私はそれを行うために次の手順を使用していますが、マークされた行に AV が表示される場合。
このプロシージャは、(プロパティ エディタ) プロパティ名 (「Margins.Left」など) と新しい値からコンポーネントを取得し、プロパティ名を解析してオブジェクトをフェッチし、現在の値を読み取り、異なる場合は変更を試みます。次に、変更をログに記録するメソッドを呼び出します。
procedure EditIntegerSubProperty(Component: IOTAComponent;const PropName: String;NewValue: Integer);
var AnObject: TObject;
TK: TTypeKind;
At: Integer;
AClassName, APropName: String;
PropInfo: PPropInfo;
OldValue: Integer;
begin
At := Pos('.', PropName);
if At < 1 then
raise Exception.Create('Invalid SubProperty Name: '+PropName);
AClassName := Copy(PropName, 1, At-1);
APropName := Copy(PropName, At+1, length(PropName));
TK := Component.GetPropTypeByName(AClassName);
if TK <> tkClass then
EXIT;
AnObject := GetObjectProp((Component as INTAComponent).GetComponent, AClassName);
if PropIsType(AnObject, APropName, tkInteger) then
begin
OldValue := GetInt64Prop(AnObject, APropName);
if OldValue <> NewValue then
begin
SetInt64Prop(AnObject, APropName, NewValue); <----AV HERE
ChangeLogInteger(Name, PropName, OldValue, NewValue);
end;
end;
end;