![]() |
Neue Klasse soll Werte übernehmen.
Hiho,
ich habe folgende Klassenstruktur in meinem Projekt.
Delphi-Quellcode:
Mir geht es nun darum das ich beim erstellen der Klasse TProgressItem gern die
type
TItem = class(TCollectionItem) private FValue1: byte; FValue2: int64; ... FValueX: String; ... public property Wert1: BYTE read FValue1; property Wert2: INT64 read FValue2; ... property WertX: String read FValueX; end; ... TProgressItem = class(TItem) private ... public constructor Create(aItem: TItem); ... property <Einige neue Schlüssel> ... end; ... implementation ... constructor TProgressItem.Create(aItem: TItem); begin inherited ... ... TItem(self) := aItem; end; Daten aus einem TItem übernehmen möchte. Dies mache ich Moment mit
Delphi-Quellcode:
dies funktioniert zwar auch, aber irgendwie kommt mir dieser Aufruf seltsam vor. Daher
TItem(self) := aItem;
meine Frage, ist dieser Aufruf konform oder gibt es eine andere, elegantere, sichere Methode? Danke im voraus |
Re: Neue Klasse soll Werte übernehmen.
Assign
|
Re: Neue Klasse soll Werte übernehmen.
Ging ja schnell, ja mit Assing habe ich probiert, aber da wirft er mir einen EConvertError aus.
|
Re: Neue Klasse soll Werte übernehmen.
Irgendwie scheint dies wohl nicht so funktionieren wie ich möchte. Wenn ich TProgressItem freigebe gibt er ja auch automatisch TItem frei, so das ich eine Exception auslöse. Ist ja eigentlich logisch.
Darum meine Frage wie kann ich einer Subklasse die Werte übergeben ohne diese Manuell im Create Aufruf einzuhämmern. |
Re: Neue Klasse soll Werte übernehmen.
Du musst latuernich die procedure assign bei Dir erstellen, die die Zuweisungen implementiert
|
Re: Neue Klasse soll Werte übernehmen.
omg, das habe ich mir schon fast gedacht. Für jede Property darf ich nun eine Zuweisung schreiben. Das muss doch auch irgendwie anders gehen.
|
Re: Neue Klasse soll Werte übernehmen.
Zitat:
|
Re: Neue Klasse soll Werte übernehmen.
Überschreibe mal in deiner Klasse TItem die protected Methode AssignTo mit folgendem:
Delphi-Quellcode:
Dann dürftest du Assign verwenden können und wenn wir Glück haben werden alle Published Properties kopiert.
Uses TypInfo
... procedure TItem.assignto(Dest:TPersistent); var count,i:integer; List:PProplist; Info:PPropInfo; begin count:=GetPropList(self,List); try for i:=0 to count-1 do begin Info:=List^[i]; setpropvalue(dest,Info^.Name,getpropvalue(self,Info^.Name)); end; finally freemem(list); end; end; |
Re: Neue Klasse soll Werte übernehmen.
Danke, werde ich gleich einmal testen.
|
Re: Neue Klasse soll Werte übernehmen.
Habe es nun auf eine andere Weise erledigt, da ich nicht die Zeit hatte mich länger an diesem Problem festzuharken. Werde mich aber bei Gelegenheit nocheinmal genauer damit beschäftigen. Danke an alle.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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