![]() |
Eigenschaft überschreiben
N'abend!
Ich sitzt jetzt schon seit 4 Stunden an einem Problem: Ich leite eine Komponente von TTimer ab. Dafür muss ich die Eigenschaft "Interval" überschreiben, weil ich deren Schreibmethode erweitern möchte. In der OH steht folgendes:
Delphi-Quellcode:
Hier ist allerdings nicht die Implementation gezeigt. Momentan sieht das ganze bei mir so aus:
Die folgenden Deklarationen zeigen, wie Eigenschaften überschrieben werden können:
type TAncestor = class ... protected property Size: Integer read FSize; property Text: string read GetText write SetText; property Color: TColor read FColor write SetColor stored False; ... end; type TDerived = class(TAncestor) ... protected property Size write SetSize; published property Text; property Color stored True default clBlue; ... end; Beim Überschreiben von Size wird die Angabe write hinzugefügt, damit der Wert der Eigenschaft geändert werden kann. Die Sichtbarkeit der Eigenschaften Text und Color wird von protected in published geändert. Für die Eigenschaft Color wird außerdem festgelegt, dass sie in der Formulardatei gespeichert wird, wenn sie einen anderen Wert als clBlue hat.
Delphi-Quellcode:
Das sind die relevanten Teile. Wenn man sich das ansieht, kommt man schnell darauf, dass hier ein Stacküberlauf produziert wird!
type
TZeitgeber = class(TTimer) private procedure SetInterval(const Value: Cardinal); published property Interval write SetInterval; { ... } procedure TZeitgeber.SetInterval(const Value: Cardinal); begin Interval := Value; end; Wie kann ich dieses Problem lösen? Wenn ich die Zeile "Interval := Value;" weglasse kann ich der Eigenschaft keine Werte mehr zuuweisen! [EDIT]Hatte die OH als Zitat, wodurch die Formatierung (Leerzeichen) nicht beachtet wurden! >> Delphi-Code draus gemacht![/EDIT] |
Re: Eigenschaft überschreiben
Du könntest doch:
Delphi-Quellcode:
schreiben, oder was genau willst du machen?
procedure TZeitgeber.SetInterval(const Value: Cardinal);
begin inherited Interval := Value; end; MfG Pr0g |
Re: Eigenschaft überschreiben
Zitat:
Du hast zwar eine Set-Methode, aber kein Feld in der class, die das betrifft. Insofern greift die Methode ins leere. Ob da jetzt AV kommt oder sonstwas tut nichts zur Sache. 8) |
Re: Eigenschaft überschreiben
Moin!
Zitat:
Pr0g's Lösung ist der Schlüssel... MfG Muetze1 |
Re: Eigenschaft überschreiben
@ Pr0g: Jepp, dass isses!! Danke!!!
Zitat:
Danke! [EDIT]Jetzt hab ich doch nochmal eine Frage: Ich überschreibe die Procedure Timer. Aber die procedure Timer meiner Klasse wird nur dann aufgerufen, wenn ich eine Procedure mit dem Ereignis OnTimer verknüpfe. Warum das?
Delphi-Quellcode:
procedure Timer; dynamic; // beim TTimer
procedure Timer; override; //in meiner klasse //Beide als protected deklariert { ... } procedure TZeitgeber.Timer; begin inherited; IncTime; { die gesamte Procedure "Timer" wird NICHT ausgeführt solange AUCH NICHTS im OnTimer steht (was ich im OI eigentlich nicht mehr anzeigen lassen wollte, aber da man die Sichtbarkeit leider nicht verringern kann...) } end; [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz