Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Neue Klasse soll Werte übernehmen. (https://www.delphipraxis.net/107287-neue-klasse-soll-werte-uebernehmen.html)

DasZiesel 25. Jan 2008 09:28


Neue Klasse soll Werte übernehmen.
 
Hiho,

ich habe folgende Klassenstruktur in meinem Projekt.
Delphi-Quellcode:
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;
Mir geht es nun darum das ich beim erstellen der Klasse TProgressItem gern die
Daten aus einem TItem übernehmen möchte. Dies mache ich Moment mit

Delphi-Quellcode:
  TItem(self) := aItem;
dies funktioniert zwar auch, aber irgendwie kommt mir dieser Aufruf seltsam vor. Daher
meine Frage, ist dieser Aufruf konform oder gibt es eine andere, elegantere,
sichere Methode?

Danke im voraus

DeddyH 25. Jan 2008 09:30

Re: Neue Klasse soll Werte übernehmen.
 
Assign

DasZiesel 25. Jan 2008 09:33

Re: Neue Klasse soll Werte übernehmen.
 
Ging ja schnell, ja mit Assing habe ich probiert, aber da wirft er mir einen EConvertError aus.

DasZiesel 25. Jan 2008 10:09

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.

mashutu 25. Jan 2008 11:20

Re: Neue Klasse soll Werte übernehmen.
 
Du musst latuernich die procedure assign bei Dir erstellen, die die Zuweisungen implementiert

DasZiesel 25. Jan 2008 12:53

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.

DeddyH 25. Jan 2008 12:56

Re: Neue Klasse soll Werte übernehmen.
 
Zitat:

Zitat von DasZiesel
Das muss doch auch irgendwie anders gehen.

Nicht, dass ich wüsste. Luckie hatte AFAIR vor einiger Zeit auch das Problem.

sirius 25. Jan 2008 13:33

Re: Neue Klasse soll Werte übernehmen.
 
Überschreibe mal in deiner Klasse TItem die protected Methode AssignTo mit folgendem:
Delphi-Quellcode:
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;
Dann dürftest du Assign verwenden können und wenn wir Glück haben werden alle Published Properties kopiert.

DasZiesel 25. Jan 2008 14:07

Re: Neue Klasse soll Werte übernehmen.
 
Danke, werde ich gleich einmal testen.

DasZiesel 26. Jan 2008 07:37

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 08:00 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