Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bestehende Klasse erweitern? (https://www.delphipraxis.net/45307-bestehende-klasse-erweitern.html)

alcaeus 3. Mai 2005 23:32


Bestehende Klasse erweitern?
 
Hallo allerseits,

ich programmiere grade an einer "neuen" ListView, welche ein paar zusaetzliche Funktionen beinhalten soll. Dazu habe ich meine LV von TListView abgeleitet. So weit, so gut. Nun muss ich aber auch die einzelnen Columns etwas erweitern, und muesste dafuer eine property zur TListColumn-Klasse hinzufuegen, allerdings soll die bestehende Funktionalitaet erhalten bleiben, und die neue property soll auch zur Designtime verfuegbar sein. Dazu muesste ich aber (IMO jedenfalls) auch die Columns-Property der LV ueberschreiben, und zwar mit einer neuen Variante der TListColumns. Meine Frage: kann ich das komplette re-deklarieren saemtlicher Klassen, die mit der ListView zu tun haben (TListColumns und TListColumn) vermeiden, und trotzdem die neuen Properties im OI haben? Oder bleibt mir hier nichts anderes uebrig, als das Verhalten von TListColumns und TListColumn neu zu implementieren? Waere schoen wenn jemand eine Antwort weiss :freak:

Greetz
alcaeus

maximov 4. Mai 2005 07:53

Re: Bestehende Klasse erweitern?
 
Moin,

sieht nicht alzu gut aus. ListColumns wird im konstruktor von TCustomListView erzeugt und offensichtlich wurde es nicht vorgesehen diese klasse alternieren zu können. Ein erstören des alten objekts und neuinstanzieren kommt IMO auch nicht in frage, da der setter der ListColumns-property nur einen assign-code, für das bestehende objekt, implementiert.

Delphi-Quellcode:
constructor TCustomListView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ...
  FListColumns := TListColumns.Create(Self);
  ...
end;
Bei den listItems hättest du eher glück, da diese durch eine virtuelle fabrik-methode erzeugt werden:
Delphi-Quellcode:
    function CreateListItem: TListItem; virtual;
    function CreateListItems: TListItems; virtual;
Mehr kann ich da nicht tun :(

alcaeus 4. Mai 2005 08:36

Re: Bestehende Klasse erweitern?
 
Nu ja, wenn ich TSortListColumn von TListColumn ableite, dann koennte ich dem TListColumns-Objekt schon irgendwie eine TSortListColumn unterschieben. Ich habe aber mal versucht, die beiden Klassen neu zu implementieren, und der SortListView eine neue Columns-Property zu geben, aber da hat er nichts mehr gezeichnet, und ein Zeichenproblem reicht fuer eine Nacht ;)
Danke trotzdem, mal sehn wo ich mit der ListView noch hinkomme.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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