Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Assign auf Vorfahr-Komponente

  Alt 16. Jun 2009, 06:15
So funktionierts bei mir:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TKlasse1 = class(TPersistent)
  public
    X, Y : Integer;
    procedure Assign(Source: TPersistent); override;
  end;

  TKlasse2 = class(TKlasse1)
  public
    Text : String;
    procedure Assign(Source: TPersistent); override;
  end;

  TKlasse3 = class(TKlasse2)
  public
    Z : Integer;
    procedure Assign(Source: TPersistent); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  K1 : TKlasse1;
  K3 : TKlasse3;
begin
  K1 := TKlasse1.Create;

  K3 := TKlasse3.Create;
  K3.X := 5778;
  K3.Y := 135;
  K3.Z := 9788;
  K3.Text := 'Bla';

  K1.Assign(K3);
  MessageDlg(Format('X = %d Y=%d', [K1.X, K1.Y]), mtWarning, [mbOK], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

{ TKlasse1 }

procedure TKlasse1.Assign(Source: TPersistent);
begin
  if Source is TKlasse1 then
  begin
    X := TKlasse1(Source).X;
    Y := TKlasse1(Source).Y;
    // hier kein inherited
  end
  else
    inherited;
end;

{ TKlasse2 }

procedure TKlasse2.Assign(Source: TPersistent);
begin
  if Source is TKlasse2 then
  begin
    Text := TKlasse2(Source).Text;
    inherited;
  end
  else
    inherited;
end;

{ TKlasse3 }

procedure TKlasse3.Assign(Source: TPersistent);
begin
  if Source is TKlasse3 then
  begin
    Z := TKlasse3(Source).Z;
    inherited;
  end
  else
    inherited;
end;

end.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat