한 쌍의 구성 요소가 있는데 구성 요소 중 하나가 속성을 설정하여 다른 구성 요소에 "연결"됩니다. 예를 들어 ... 조건부로 DFM에 속성 저장 여부를 설정 하시겠습니까?
type
TMain = class(TComponent)
...
published
property Default: Integer read FDefault write SetDefault;
end;
TSub = class(TComponent)
...
published
property Value: Integer read GetValue write SetValue;
property Main: TMain read FMain write SetMain;
end;
그래서
TSub
에 대한 개체 관리자에서 사용자는
TMain
이 그것과 관련이있는 것으로 선택할 것 것입니다.
하위 구성 요소에는 getter와 setter가 모두 포함 된 Value
속성이 있습니다. 부 성분의 값 0
로 설정되는 경우, 상기 게터는 그것이 부착 년대 TMain
에서 Default
속성 ... 취득 오브젝트 관리자 (따라서 속성 자체)를 만든다
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;
기본 0
값보다는 기본 값을 반환하십시오.
내가 무엇을하고 싶은지 TSub
구성 요소의 속성이 DFM에 저장되면 0
인 경우이 속성을 저장하지 않는다는 점에 유의해야합니다. 따라서 기본 설정 대신 기본 설정을 사용하십시오. 현재 DFM을 저장 한 후 기본 값에서 나온 값이 하위 값에 저장됩니다. 이는 원하는 값이 아닙니다.
당연히 속성은 으로 표시됩니다. 예를 들어 속성 값이 0
으로 설정된 경우 해당 속성은 DFM에 저장되지 않습니다. 그러나 기본값이 달라질 수 있으므로이 속성에 대한 기본값을 플래그 할 수있는 방법이 없습니다 (기본값이 정의되기를 기대하기 때문에).
어떻게이 프로퍼티 게터의 주에서 기본값을 사용하는 대신 0
로 설정되어있어 경우 DFM이 속성을 저장 하지에 TSub
구성 요소를 구성 할 수 있습니까?
function TSub.IsValueStored: Boolean;
begin
Result := (FValue <> 0) or (FMain = nil);
end;
내가 바로 그것을 얻을 경우
http://docwiki.embarcadero.com/RADStudio/en/Properties#Storage_Specifiers –