Delphi-PRAXiS
Seite 3 von 4     123 4   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Alter Classe neue zuweisen (https://www.delphipraxis.net/192654-alter-classe-neue-zuweisen.html)

Ghostwalker 9. Mai 2017 07:21

AW: Alter Classe neue zuweisen
 
Zitat:

Zitat von EWeiss (Beitrag 1370644)
Zitat:

Zitat von nahpets (Beitrag 1370643)
Das TSprite aus gS[FlagFound] soll sich also nachher in gS[Item] befinden und das aus gS[Item] in gS[FlagFound].

Meiner Meinung nach müsste das mit dem Vorschlag aus Post #5 funktionieren.

Alle Informationen aus gS[Item] (TSprite) sollen sich dann im gS[FlagFound] befinden
und gS[FlagFound] bekommt den Index von Item zugewiesen.

Es geht nicht mit der Version im Beitrag 5 warum habe ich daraufhin geantwortet ;)

Delphi-Quellcode:
                  // SWAP Item
                  if Item <> FlagFound then
                  begin
                    //SWAP(gS[FlagFound], gS[Item]);
                    gS[FlagFound] := gS[Item];
                    FlagFound := Item;
                  end;

gruss

Öhm.......reicht da nicht einfach

Delphi-Quellcode:
function MySwap(var gs:TNegativArray; var FlagFound,Item:integer);
begin
gS[FlagFound].assign(gs[item]);
FlagFound := Item;
end;
?

EWeiss 9. Mai 2017 07:22

AW: Alter Classe neue zuweisen
 
Werde ich mal versuchen.. Danke Uwe

gruss

EWeiss 9. Mai 2017 07:26

AW: Alter Classe neue zuweisen
 
Delphi-Quellcode:
 gS[FlagFound].assign(gs[item]);


assign gibt es ja nicht in der Classe.

Delphi-Quellcode:
procedure Swap(var gs: TNegativeArray; var FlagFound, Item: integer);
gruss

Ghostwalker 9. Mai 2017 07:37

AW: Alter Classe neue zuweisen
 
Dann ergänz doch einfach die TSprite-Klasse um diese Methode :)

Da werden letzt endlich ja nur die Eigenschaften und Felder zugewiesen.

Muster:

Delphi-Quellcode:
procedure TSprite.Assign(source:TPersistent);
begin
  if (source is TSprite) then
  begin
    field1 := source.field1;
    :
    Property1 = source.property1;
    :
  end;
end;

EWeiss 9. Mai 2017 07:43

AW: Alter Classe neue zuweisen
 
Zitat:

Zitat von Ghostwalker (Beitrag 1370668)
Dann ergänz doch einfach die TSprite-Klasse um diese Methode :)

Da werden letzt endlich ja nur die Eigenschaften und Felder zugewiesen.

Muster:

Delphi-Quellcode:
procedure TSprite.Assign(source:TPersistent);
begin
  if (source is TSprite) then
  begin
    field1 := source.field1;
    :
    Property1 = source.property1;
    :
  end;
end;

sorry aber was ist da field1 und Property1
Muss da jetzt leider Raten ;)

Für dich ist das alles einfach..

gruss

Ghostwalker 9. Mai 2017 07:47

AW: Alter Classe neue zuweisen
 
Das is nur ein Beispiel, da ich ja die genauen Felder bzw. Eigenschaften der TSprite-Klasse nicht kenne ;)

ISurf 9. Mai 2017 08:19

AW: Alter Classe neue zuweisen
 
Wenn zwei Objekte im Array vertauscht werden sollen, dann müsste es eigentlich folgendermaßen funktionieren:

Delphi-Quellcode:
function Swap(gs:TNegativArray; Index1, Index2:integer);
var
  lTemp: TObject;
begin
  lTemp:=gs[Index1];
  gs[Index1]:=gs[Index2];
  gs[Index2]:=lTemp;
end;

EWeiss 9. Mai 2017 15:11

AW: Alter Classe neue zuweisen
 
Zitat:

Zitat von ISurf (Beitrag 1370687)
Wenn zwei Objekte im Array vertauscht werden sollen, dann müsste es eigentlich folgendermaßen funktionieren:

Delphi-Quellcode:
function Swap(gs:TNegativArray; Index1, Index2:integer);
var
  lTemp: TObject;
begin
  lTemp:=gs[Index1];
  gs[Index1]:=gs[Index2];
  gs[Index2]:=lTemp;
end;

Hmmm...
Es sind keine Objekte im Array sondern 2 Klassen\Classen wie auch immer.

gruss

nahpets 9. Mai 2017 15:20

AW: Alter Classe neue zuweisen
 
Da es sich bei Dir um TSprite handelt, sollte auch dashier ok sein:
Delphi-Quellcode:
lTemp: TSprite;
Prinzipiell müsste es gehen, wenn man den kleinsten gemeinsamen Nenner an Stelle von TObject angibt.
Wenn Deine Klassen als Vorfahren alle z. B. von TComponent abgeleitet sind, direkt oder auch über mehrere Zwischenstufen, dann könntest Du für lTemp TComponent nehmen.

Die Swap-Routine könntest Du dann für den Tausch aller Klassen vom Typ TComponent und deren Nachfolger verwenden.

TSprite ist ein Nachfolger von TObject, damit müsste der Tausch eigentlich mit der Routine gelingen.

himitsu 9. Mai 2017 15:30

AW: Alter Classe neue zuweisen
 
Zitat:

Wenn es eine Record ist, muss das var davor, bei einer Klasse nicht,
kommt drauf an

1) wenn man die Objektzeiger tauschen will, dann mit VAR
2) und will man die Objektinhalte tauschen, dann OHNE, da sich ja die Zeiger nicht ändern

Allerdings braucht man beim 2. eventuell einen kompletten zwischen Speicher (z.B. ein drittes Objekt oder ein Stream, in den der Zustand des ganzen Objektes rein serialisiert wird)
* entweder man kopiert vom kompletten Objekt die Property/Felder in ein 3. Objekte
und dann Objekt 2 in 1 und anschließend Temp in 2
(am Besten wäre es, wenn die Objekte das Assign ordentlich implementiert haben, oder sich serialisieren lassen)
* oder man kopiert jedes Property/Feld einzeln und nacheinander, z.B. über eine Swap-Methode


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 3 von 4     123 4   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf