Ein Objekt (in ein anderes) kopieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Ein Objekt (in ein anderes) kopieren

Beitrag von mintpc »

Hallo zusammen,

ich habe zwei ein Objektarrays deklariert:

Code: Alles auswählen

a : array [1..6, 1..6] of TKarte;
  hilf: array [1..6, 1..6] of TKarte;


Jetzt will ich die Objekte des ersten Arrays in das zweite Array kopiere.
Versucht habe ich "assign" (kopieren der Attribute ginge auch, ich will aber mal
"assign" ausprobieren):

Code: Alles auswählen

for i := 1 to 6 do
       for j := 1 to 6 do
              hilf[i,j].Assign(a[i,j]);
Eigentlich müsste das doch funktionieren, oder?
Es kommt ne Fehlermeldung, die ich wegklicken kann. Dann wird
auch tatsächlich das erste Objekt kopiert, die anderen aber nicht mehr???


Hier ist die Klasse TKarte, es ist eine abgeleitete Klasse und darunter, wie ich
die beiden Objektarray erzeugt habe:

Code: Alles auswählen

type
  TKarte = class (TShape)
    protected
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
  published
    Property OnMouseDown;
 
    public Fo, Fr, Fu, Fl : TColor;
    public position : integer;
    public constructor create (AOwner: TComponent); //overload;
   { public procedure click; override;}
 
    public procedure zeichne(o, r, u , l : TColor);
    public procedure dreherechts;
    public procedure drehelinks;
  end;

Code: Alles auswählen

for i := 1 to 6 do
    for j := 1 to 6 do
      begin
      a[i,j] := TKarte.create(self);
      a[i,j].Parent := self;
      a[i,j].left := 10+(j-1)*102;
      a[i,j].top := 10+(i-1)*102;
      if a[i,j] <> nil then
         a[i,j].Hide;
 
      hilf[i,j] := TKarte.create(self);
      hilf[i,j].Parent:= self;
      end;


Weiß jemand Rat?

Danke schonmal
mintpc

Benutzeravatar
theo
Beiträge: 10937
Registriert: Mo 11. Sep 2006, 19:01

Re: Ein Objekt (in ein anderes) kopieren

Beitrag von theo »

mintpc hat geschrieben: Es kommt ne Fehlermeldung, die ich wegklicken kann.
Und wie heisst die?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Ein Objekt (in ein anderes) kopieren

Beitrag von mschnell »

mintpc hat geschrieben:Eigentlich müsste das doch funktionieren, oder?
Nö.
Das funktiuoniert nur, wenn Du für deine Klasse "TKarte" auch eine Assign-Prozedur geschrieben hat, die die Interna der Klasse von einer Instanz in die andere kopiert.

-Michael

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Ein Objekt (in ein anderes) kopieren

Beitrag von MAC »

wie mschnell es sagt. Alles würde funktionieren wenn du eine Assign Procedure Deklarierst...
Ist nicht weiter schwer, inhalt ist ca. so

Code: Alles auswählen

procedure Tkarte.Assign(von:Tkarte);
begin
Fo := von.Fo;
Fr := von.Fr;
//..
position := von.position;
end

Code: Alles auswählen

Signatur := nil;

Antworten