Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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)

EWeiss 8. Mai 2017 23:23


Alter Classe neue zuweisen
 
Ich möchte zwei Classen miteinander vertauschen.

Abhängig von Items.

Delphi-Quellcode:
procedure SWAP(var Value1, Value2: Integer);
var
  lTemp: integer;
begin
  lTemp := Value1;
  Value1 := Value2;
  Value2 := lTemp;
end;
Delphi-Quellcode:
// SWAP ITEM
if Item <> FlagFound then
begin
  SWAP(gS[FlagFound], gS[Item]);

  FlagFound := Item;
end;
Das geht natürlich nicht weil meine SWAP Function integer erwartet.

gs aber ein Classe ist.
Mit Assign geht's auch nicht .. noch andere Möglichkeiten?
Bin mir jetzt nicht sicher ob das der richtige weg wäre. Zumindest meckert der Compiler nicht.

Delphi-Quellcode:
gS[FlagFound] := gS[Item];


gruss

Uwe Raabe 9. Mai 2017 00:00

AW: Alter Classe neue zuweisen
 
Dann deklarier doch einfach ein Swap für den Klassentyp (hier TMyClass):
Delphi-Quellcode:
procedure SwapMyClass(var Value1, Value2: TMyClass);
var
  lTemp: TMyClass;
begin
  lTemp := Value1;
  Value1 := Value2;
  Value2 := lTemp;
end;

nahpets 9. Mai 2017 00:07

AW: Alter Classe neue zuweisen
 
Es ist schon spät, von daher weiß ich nicht, ob ich gerade um die Ecke denke (wenn überhaupt noch ;-))
Delphi-Quellcode:
procedure SWAP(var Value1, Value2: TBasisKlasseDerZuTauschendenClassen); // eventuell TObject?
var
  lTemp: TBasisKlasseDerZuTauschendenClassen;
begin
  lTemp := Value1;
  Value1 := Value2;
  Value2 := lTemp;
end;
Aber vermutlich möchtest Du die Inhalte von gS[?] tauschen.

Was genau ist in gS[?] zu finden?
FlagFound und Item sind (vermutlich) Angaben für den Index von gS.

Würde es mal so probieren:
Delphi-Quellcode:
procedure SWAP(var Value1, Value2: TKlasse_Oder_Typ_gS[Item]);
var
  lTemp: TKlasse_Oder_Typ_gS[Item];
begin
  lTemp := Value1;
  Value1 := Value2;
  Value2 := lTemp;
end;

EWeiss 9. Mai 2017 00:21

AW: Alter Classe neue zuweisen
 
Zitat:

Was genau ist in gS[?] zu finden?
http://www.delphipraxis.net/1369617-post1.html

Delphi-Quellcode:
procedure SWAP(var Value1: TNegativeArray; var Value2: TNegativeArray);
var
   lTemp: TNegativeArray;
begin
   lTemp := Value1;
   Value1 := Value2;
   Value2 := lTemp;
end;
Delphi-Quellcode:
SWAP(gS[FlagFound], gS[Item]);

Zitat:

[DCC Fehler] uMain.pas(1588): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

Zitat:

FlagFound und Item sind (vermutlich) Angaben für den Index von gS.
Korrekt.

Zitat:

Aber vermutlich möchtest Du die Inhalte von gS[?] tauschen.
Richtig!
gS[FlagFound] soll alle Eigenschaften inklusive der werte von gS[Item] erhalten.
Danch wird FlagFound der Index von Item zugewiesen.

Zitat:

Dann deklarier doch einfach ein Swap für den Klassentyp (hier TMyClass):
Wenn es so einfach ist warum geht es dann nicht?


gruss

nahpets 9. Mai 2017 00:31

AW: Alter Classe neue zuweisen
 
Wenn ich das richtig sehe ist gS[Item] vom Typ TSprite.

Lass bitte bei Swap mal das var weg.

Also eher sowas:
Delphi-Quellcode:
procedure SWAP(Value1, Value2: TSprite);
var
   lTemp: TSprite;
begin
   lTemp := Value1;
   Value1 := Value2;
   Value2 := lTemp;
end;
Aufruf dann so:

Delphi-Quellcode:
SWAP(gS[FlagFound], gS[Item]);


Wenn's das auch nicht ist, sollte ich den Rechner ausschalten und mich auf's Ohr hauen ;-)

EWeiss 9. Mai 2017 00:37

AW: Alter Classe neue zuweisen
 
Zitat:

Zitat von nahpets (Beitrag 1370637)
Wenn ich das richtig sehe ist gS[Item] vom Typ TSprite.

Lass bitte bei Swap mal das var weg.

Also eher sowas:
Delphi-Quellcode:
procedure SWAP(Value1, Value2: TSprite);
var
   lTemp: TSprite;
begin
   lTemp := Value1;
   Value1 := Value2;
   Value2 := lTemp;
end;
Aufruf dann so:

Delphi-Quellcode:
SWAP(gS[FlagFound], gS[Item]);


Wenn's das auch nicht ist, sollte ich den Rechner ausschalten und mich auf's Ohr hauen ;-)

Ohne Var gibt es zumindest keinen Fehler muss das mal im Auge behalten.
Eigentlich ist gs schon vom Type TNegativeArray die TSprite Classe wird dort erst generiert.

Delphi-Quellcode:
    Fdata : array of TSprite;

jetzt meldet er aber hier ohne Var Parameter
Zitat:

[DCC Hinweis] uGlobal.pas(144): H2077 Auf 'Value2' zugewiesener Wert wird niemals benutzt
[DCC Hinweis] uGlobal.pas(143): H2077 Auf 'Value1' zugewiesener Wert wird niemals benutzt
Ist auch logisch da nichts zurück gegeben wird.

Delphi-Quellcode:
procedure SWAP(Value1, Value2: TSprite);
var
   lTemp: TSprite;
begin
   lTemp := Value1;
   Value1 := Value2;
   Value2 := lTemp;
end;
Schalte ich den Var Parameter wieder ein kommt diese Meldung
Zitat:

[DCC Fehler] uMain.pas(1588): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
usw..


gruss

nahpets 9. Mai 2017 00:44

AW: Alter Classe neue zuweisen
 
Du willst aber doch zwei Elemente aus gS vertauschen (die Elemente mit Index FlagFound und Index Item), also zwei TSprite und nicht zwei TNegativeArray.

In gS[FlagFound] soll sich anschließend gS[Item] befinden und in gS[Item] soll sich gS[FlagFound] befinden.

Oder hab' ich da was noch nicht recht verstanden.

Liege ich falsch, beschreib' bitte mal verbal, was Du erledigen möchtest. Eventuell kommen wir dann weiter.

EWeiss 9. Mai 2017 00:50

AW: Alter Classe neue zuweisen
 
Nein Zwei identische classen TNegativeArray

definiert als
Delphi-Quellcode:
gs: TNegativeArray;


die TSprite Classen werden in der Classe TNegativeArray erstellt.

Delphi-Quellcode:
Fdata : array of TSprite;


ich möchte jetzt gs einen neuen Index "Item" zu weisen von der Classe TSprite.
Die dann alle Eigenschaften von der Classe TNegativeArray und des Arrays von TSprite enthält.

gruss

nahpets 9. Mai 2017 01:04

AW: Alter Classe neue zuweisen
 
Du definierst
Delphi-Quellcode:
var
  gs: TNegativeArray;
Im Eingangspost schriebst Du
Delphi-Quellcode:
gS[FlagFound] := gS[Item];

Das bedeutet meiner Meinung nach, dass Du zwei Elemente des TNegativeArray gS vertauschen möchtest.

Stimmt das, oder bin ich gerade auf dem Holzweg?

TNegativeArray enthält doch (glaub' ich) 1 bis n Elemente der Klasse TSprite.

Oder ist es andersherum, dass TSprite eine Array ist, dass Elemente der Klasse TNegativeArray enthält?

EWeiss 9. Mai 2017 01:16

AW: Alter Classe neue zuweisen
 
Zitat:

TNegativeArray enthält doch (glaub' ich) 1 bis n Elemente der Klasse TSprite.
Richtig so ist es.

Delphi-Quellcode:
gS[FlagFound] := gS[Item];


gs soll vertauscht werden damit der Inhalt von gs[Item] im gS[FlagFound] enthalten ist.
vorher kann ich den Index FlagFound nicht durch den von Item ersetzen.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 Uhr.
Seite 1 von 4  1 23     Letzte »    

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