여기에주의하십시오. default
지시문은 속성 자체의 값을 설정하는 데 아무 것도하지 않습니다. 값이 .dfm
파일에 명시 적으로 저장되는지 여부에만 영향을줍니다. 속성에 default
값을 지정하면 생성자가 해당 값으로 백업 필드를 초기화하도록해야합니다.
Properties : Storage Specifiers 구성 요소의 상태를 저장
는 구성 요소의 게시 속성에 대한 저장소 지정자를 확인한다. 속성의 현재 값이
기본 값과 다른 경우와
저장 지정하고 속성 값이 저장되고,
진정한 없습니다 (또는
기본 값이있는 경우). 그렇지 않으면 속성 값이 저장되지 않습니다.
참고 : 속성 값은 기본값으로 자동 초기화되지 않습니다. 즉, 기본 지시문은 속성 값이 양식 파일에 저장되지만 새로 작성된 인스턴스에 대한 속성의 초기 값은 저장하지 않을 때만 제어합니다. 계약의 당신의 부분은 당신이 실제로 그 값으로 백업 필드를 초기화하도록하는 것입니다 -
이는 .dfm
에 명시 적으로 값을 저장 할 필요가 없습니다 구성 요소 스트리밍 시스템에 다만 힌트입니다.
말했다
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FVariantValue := False;
end;
, False
는 부울,하지 변형, 그래서 그것은 Variant
유형의 상수 표현식으로 사용할 수 없습니다 : 초기화 이런 종류의 작업을 수행 할 수있는 적절한 장소는 구성 요소의 생성자입니다. 변형은 복잡한 유형이므로 단일 상수로 표현 될 수 없으므로 default
속성을 가질 수 없습니다.
당 레미, 당신은 백업 변형이 False
때 변형이 .dfm
파일에 저장되지 않도록하려는 경우 변형이 False
부울로 평가 때 False
를 반환하는 매개 변수가 메소드로 stored
지시어를 사용할 수 있습니다 .예를 들면 :
property VariantValue : Variant read FVariantValue write FVariantValue stored IsVariantValueStored;
function TMyComponent.IsVariantValueStored : Boolean;
begin
Result := not VarIsType(FVariantValue, varBoolean);
if not Result then
Result := FVariantValue;
end;
DFM 스트리밍의 목적으로 Variant에 False 값이 포함되어있을 때 속성을 DFM에 저장하지 않으려면'default' 지정자 대신'stored' 지정자를 사용할 수 있습니다. 여기서'stored'는 참조합니다 Variant에 False 값이 포함되어 있으면 False를 반환하고 그렇지 않으면 True를 반환하는 매개 변수없는 메서드에 전달합니다. –
@RemyLebeau 매우 영리합니다. OP가 실제로 원하는 것이 확실하지 않지만,이 예제로 업데이트했습니다. –