AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Alter Classe neue zuweisen

Ein Thema von EWeiss · begonnen am 8. Mai 2017 · letzter Beitrag vom 11. Mai 2017
Antwort Antwort
Seite 3 von 4     123 4   
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:21
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;
?
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#22

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:22
Werde ich mal versuchen.. Danke Uwe

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#23

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:26
 gS[FlagFound].assign(gs[item]);

assign gibt es ja nicht in der Classe.

procedure Swap(var gs: TNegativeArray; var FlagFound, Item: integer); gruss
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:37
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;
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#25

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:43
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
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#26

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 07:47
Das is nur ein Beispiel, da ich ja die genauen Felder bzw. Eigenschaften der TSprite-Klasse nicht kenne
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
ISurf

Registriert seit: 1. Mär 2016
6 Beiträge
 
#27

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 08:19
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;
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#28

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 15:11
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#29

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 15:20
Da es sich bei Dir um TSprite handelt, sollte auch dashier ok sein: 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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.446 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 15:30
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
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