Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObj kann nicht zu TObj zugewiesen werden (https://www.delphipraxis.net/124044-tobj-kann-nicht-zu-tobj-zugewiesen-werden.html)

gmc616 13. Nov 2008 14:33


TObj kann nicht zu TObj zugewiesen werden
 
Hallo DP,

ich stehe im Moment irgendwie auf dem Schlauch.
Ich habe eine Klasse mit mehreren Unterklassen und wollte dieses einfach kopieren, clonen quasi.
Das sollte doch mit Object-Pascal - also Delphi - möglich sein. Nur kriege ich es nicht hin.

Ich bekomme eine Fehlermeldung: TObj kann nicht zu TObj zugewiesen werden.
Und wieso nicht ? :gruebel:

Dieser, mein Beispielcode funktioniert nicht.

Delphi-Quellcode:
type TSubObj = class(TPersistent)
  private
    FText: string;
    procedure SetText(const Value: string);
  public
    property Text : string read FText write SetText;
end;

Type TObj = Class (TPersistent)
  private
    FSubObj: TSubObj;
    FValue: Integer;

    procedure SetSubObj(const Value: TSubObj);
    procedure SetValue(const Value: Integer);

  public

    constructor Create;
    destructor Destroy; override;

    property Value : Integer read FValue write SetValue;
    Property SubObj : TSubObj read FSubObj write SetSubObj;
end;


var
  Form1: TForm1;
  MyObj1 : TObj;
  MyObj2 : TObj;

implementation


Procedure Doit();
begin
  MyObj1 := TObj.Create;
  MyObj1.Value := 12;
  MyObj1.SubObj.Text := 'Mein Text';


  MyObj2 := TObj.Create;

  // funzt nicht
  MyObj2.Assign(MyObj1); // <- EConvertError: TObj kann nicht zu TObj zugewiesen werden.

  // funzt auch nicht
  MyObj1.AssignTo(MyObj2); // <- EConvertError: TObj kann nicht zu TObj zugewiesen werden.

end;

{ TObj }
constructor TObj.Create;
begin
  FSubObj := TSubObj.Create();
end;

destructor TObj.Destroy;
begin
  FSubObj.Free;
  inherited;
end;

procedure TObj.SetSubObj(const Value: TSubObj);
begin
  FSubObj := Value;
end;


procedure TObj.SetValue(const Value: Integer);
begin
  FValue := Value;
end;

{ TSubObj }

procedure TSubObj.SetText(const Value: string);
begin
  FText := Value;
end;
Könnte ihr mir helfen mein TObj zu kopieren?
Was mache ich falsch?

Danke und Grüße
gmc

jfheins 13. Nov 2008 14:36

Re: TObj kann nicht zu TObj zugewiesen werden
 
Musst diu nicht entweder die Assign-Methode oder besser noch die AssignTo-Methode überschreiben?

Woher soll Delphi denn wissen, welche Daten du kopieren willst?

gmc616 13. Nov 2008 14:47

Re: TObj kann nicht zu TObj zugewiesen werden
 
Ich dachte das gebe ich im Parameter von AssignTo() mit.
Schließlich möchte ich ein Objekt kopieren, dessen Struktur bekannt sein sollte. 's steht doch da, oder?

Wo und wie muß ich Assign bzw. AssignTo überschreiben ?

mjustin 13. Nov 2008 16:43

Re: TObj kann nicht zu TObj zugewiesen werden
 
Zitat:

Zitat von gmc616
Ich dachte das gebe ich im Parameter von AssignTo() mit.
Schließlich möchte ich ein Objekt kopieren, dessen Struktur bekannt sein sollte. 's steht doch da, oder?

Wo und wie muß ich Assign bzw. AssignTo überschreiben ?

Schritt für Schritt erklärt (Englisch):

http://www.mail-archive.com/delphi@d.../msg03043.html


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