Burada dikkatli olun. default
yönergesi, özelliğin değerini ayarlamak için hiçbir şey yapmaz. Yalnızca, değerin .dfm
dosyasında açıkça kaydedilip kaydedilmediğini etkiler. Bir özellik için bir default
değeri belirtirseniz, kurucunun destek alanını bu değere başlattığından emin olmanız gerekir.
Properties : Storage Specifiers bir bileşenin durumunu kaydetme
, bileşenin yayınlanan özelliklerinin depolama belirticilere kontrol edilir. Bir tesisin o andaki değerinin
varsayılan değerden farklı ise ve
saklanan belirteci sonra tesisin değeri kaydedilir,
Gerçek (veya hiçbir
varsayılan değer yoksa). Aksi takdirde, mülkün değeri kaydedilmez.
Not: Özellik değerleri otomatik olarak varsayılan değere başlatılmaz. Yani, varsayılan yönerge yalnızca özellik değerleri form dosyasına kaydedildiğinde denetler, ancak yeni oluşturulan örnekte özelliğin ilk değeri değil. sözleşmenin sizin parçası aslında bu değere destek alanını başlatmak sağlamaktır -
Bu .dfm
açıkça bu değeri saklamak gerekmez bileşen akış sisteminde sadece bir ipucu.
bahsedilen
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FVariantValue := False;
end;
, False
bir boolean, bir varyant, bu nedenle Variant
tip sabit bir ifade olarak kullanılamaz: başlatma bu tip yapmak için uygun bir yer bileşenin kurucu bulunmaktadır. Bir varyant karmaşık bir tür olduğundan, tek bir sabit olarak ifade edilemez ve bu nedenle, bir default
özelliğine sahip olamaz.
Başına Remy, sen destek varyant False
olduğunda varyant .dfm
dosyasına kaydedilir emin olmak istiyorsanız varyant False
bir boolean olarak değerlendirilirse zaman, sen False
döndüren bir parametresiz yöntemi ile stored
direktifini kullanabilirsiniz .Örneğin:
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 akışı amacıyla, Varyant bir Yanlış değer içerdiğinde, özelliğin DFM'de saklanmasını istemiyorsanız, 'saklı' ifadesinin bulunduğu 'varsayılan' belirteci yerine 'saklanan 'belirtecini kullanabilirsiniz. Varyant bir Yanlış değer içeriyorsa ve aksi halde True döndürürse False değerini döndüren parametresiz bir yönteme. –
@RemyLebeau Çok zekice - OP'nin gerçekten istediği şeyden emin değilim, ancak bu örnekle güncelledim. –