AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenschaft überschreiben

Ein Thema von F.W. · begonnen am 8. Apr 2005 · letzter Beitrag vom 9. Apr 2005
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Eigenschaft überschreiben

  Alt 8. Apr 2005, 23:46
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:
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.
Hier ist allerdings nicht die Implementation gezeigt. Momentan sieht das ganze bei mir so aus:
Delphi-Quellcode:
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;
Das sind die relevanten Teile. Wenn man sich das ansieht, kommt man schnell darauf, dass hier ein Stacküberlauf produziert wird!

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]
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#2

Re: Eigenschaft überschreiben

  Alt 9. Apr 2005, 00:16
Du könntest doch:
Delphi-Quellcode:
procedure TZeitgeber.SetInterval(const Value: Cardinal);
begin
  inherited Interval := Value;
end;
schreiben, oder was genau willst du machen?

MfG Pr0g
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Eigenschaft überschreiben

  Alt 9. Apr 2005, 01:12
Zitat von F.W.:
N'abend!

Ich sitzt jetzt schon seit 4 Stunden an einem Problem:
...
Wenn man sich das ansieht, kommt man schnell darauf, dass hier ein Stacküberlauf produziert wird!
...
4 St. ist für Komponentenenwicklung eindeutig zu wenig ! Zum konkreten Problem : wieso ist klar, daß ein Stacküberlauf zwangsläufig auftaucht ?

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)
Gruß
Hansa
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Eigenschaft überschreiben

  Alt 9. Apr 2005, 02:59
Moin!

Zitat von Hansa:
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)
Und ob. Wie du richtig festgestellt hast, hat er keine Klassenvariable - er will den Inhalt der überschriebenen Property nutzen. Und es kommt zwangsläufig zu einem Stacküberlauf, da er als Wert für die Property den Wert der Property, der sich aus dem Wert der Property welcher sich aus dem Wert der Property..... etc etc etc... ergibt. Klarer?

Pr0g's Lösung ist der Schlüssel...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#5

Re: Eigenschaft überschreiben

  Alt 9. Apr 2005, 11:47
@ Pr0g: Jepp, dass isses!! Danke!!!

Zitat von Hansa:
4 St. ist für Komponentenenwicklung eindeutig zu wenig !
Nee, für die kleine abgeleitete Kompo isses zu viel. Außerdem sitzt ich vier Stunden an DEM EINEN PROPERTY! Welches mir das Leben schwer gemacht hat!!

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]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz