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 1 von 4  1 23     Letzte » 
EWeiss
(Gast)

n/a Beiträge
 
#1

Alter Classe neue zuweisen

  Alt 8. Mai 2017, 23:23
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.

gS[FlagFound] := gS[Item];

gruss

Geändert von EWeiss ( 8. Mai 2017 um 23:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
9.369 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 00:00
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Alter Classe neue zuweisen

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

n/a Beiträge
 
#4

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 00:21
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;
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

Geändert von EWeiss ( 9. Mai 2017 um 00:28 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 00:31
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:

SWAP(gS[FlagFound], gS[Item]);

Wenn's das auch nicht ist, sollte ich den Rechner ausschalten und mich auf's Ohr hauen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 00:37
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:

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.

    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

Geändert von EWeiss ( 9. Mai 2017 um 00:45 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Alter Classe neue zuweisen

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

n/a Beiträge
 
#8

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 00:50
Nein Zwei identische classen TNegativeArray

definiert als
gs: TNegativeArray;

die TSprite Classen werden in der Classe TNegativeArray erstellt.

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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 01:04
Du definierst
Delphi-Quellcode:
var
  gs: TNegativeArray;
Im Eingangspost schriebst Du 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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Alter Classe neue zuweisen

  Alt 9. Mai 2017, 01:16
Zitat:
TNegativeArray enthält doch (glaub' ich) 1 bis n Elemente der Klasse TSprite.
Richtig so ist es.

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
  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 20:41 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