Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Array aus Record löschen (https://www.delphipraxis.net/192825-array-aus-record-loeschen.html)

EWeiss 22. Mai 2017 17:38


Array aus Record löschen
 
Löschen des Array

Delphi-Quellcode:
    if gS[K].h_Bitmap = 0 then
    begin
      for Index := (K + 1) to (Length(gs) - 1) do
        gs[Index - 1] := gs[Index];

      Setlength(gs, length(gs) - 1);

      dec(Count);
      if gp.RecycleBin = K then
        gp.RecycleBin := 0;
    end;
packe ich das ganze jetzt in eine procedure macht das Teil Ärger ;)
Manchmal hat man echt ein Brett vorm Kopf.

Delphi-Quellcode:
procedure Delete(var SrcArray: Array of TSprite; Index: Integer);
var
  I: Integer
begin

  for I := (Index + 1) to (Length(SrcArray) - 1) do
    SrcArray[I- 1] := SrcArray[I];

  Setlength(SrcArray, length(SrcArray) - 1); //<< inkompatible Typen
end;
Aufruf

Delphi-Quellcode:
Delete(gs, K);


verwende ich jetzt hier direkt gs dann funktioniert das ganze. Warum?

Delphi-Quellcode:
Setlength(gs, length(SrcArray) - 1); //<< inkompatible Typen

es ist unabhängig vom var Parameter.
Auch dann geht es nicht.

gruss

Olli73 22. Mai 2017 17:52

AW: Array aus Record löschen
 
Zitat:

Zitat von EWeiss (Beitrag 1372389)
Delphi-Quellcode:
procedure Delete(var SrcArray: Array of TSprite; Index: Integer);
var
  I: Integer
begin
  ...
  Setlength(SrcArray, length(SrcArray) - 1); //<< inkompatible Typen
end;

Das hatten wir heute schon mal: Siehe hier

Lösung: TArray<TSprite>

EWeiss 22. Mai 2017 17:57

AW: Array aus Record löschen
 
Zitat:

Zitat von Olli73 (Beitrag 1372396)
Zitat:

Zitat von EWeiss (Beitrag 1372389)
Delphi-Quellcode:
procedure Delete(var SrcArray: Array of TSprite; Index: Integer);
var
  I: Integer
begin
  ...
  Setlength(SrcArray, length(SrcArray) - 1); //<< inkompatible Typen
end;

Das hatten wir heute schon mal: Siehe hier

Lösung: TArray<TSprite>

Würde eventuell gehen. Danke.
Das Problem ist nur das ich einen Var Parameter übergebe.. eventuell entfernen?
Müsste eigentlich auch ohne gehen.

Ich kann es im Moment nicht testen da das nur eine Vorsichtsmaßnahme ist falls das HBitmap einmal 0 sein sollte.

EDIT:
Ich weiß jetzt nicht welche Auswirkungen es hat wenn ich
Delphi-Quellcode:
gs: Array of TSprite;
zu
Delphi-Quellcode:
  gs: TArray<TSprite>;
ändere.

gruss

himitsu 22. Mai 2017 18:06

AW: Array aus Record löschen
 
Das Warum wurde da auch erklärt ... Stichwort "Open Array" vs. "dynamisches Array".
http://www.delphipraxis.net/192817-s...parameter.html

Olli73 22. Mai 2017 18:06

AW: Array aus Record löschen
 
Var ist schon in Ordnung.

EWeiss 22. Mai 2017 18:07

AW: Array aus Record löschen
 
Zitat:

Zitat von himitsu (Beitrag 1372402)

Hat das irgendwelche Auswirkungen ? Bitte siehe mein EDIT.
Wird das Teil langsamer oder zu irgendwelchen Einstellungen inkompatibel?

Zitat:

Var ist schon in Ordnung.
Ja danke Olli
Es geht mir um mein EDIT: im vorherigen Beitrag..

gruss

himitsu 22. Mai 2017 18:08

AW: Array aus Record löschen
 
Ich hab auch ein EDIT im Post. :angle:

EWeiss 22. Mai 2017 18:10

AW: Array aus Record löschen
 
Zitat:

Zitat von himitsu (Beitrag 1372405)
Ich hab auch ein EDIT im Post. :angle:

Ja habe schon verstanden es ist dann ein "Open Array" :)
Nur welchen vor oder Nachteil bringt das für mich.
Habe keinen Bock den Code deshalb jetzt komplett umschreiben zu müssen.

Dann mache ich es lieber ohne Procedure.

gruss

himitsu 22. Mai 2017 18:12

AW: Array aus Record löschen
 
Es ist schneller? (das Open Array kopiert praktisch die Daten/Zeiger, die von außen rein kommen, in seine eigene Struktur rein)

Und vorallem "es funktioniert".

EWeiss 22. Mai 2017 18:14

AW: Array aus Record löschen
 
Zitat:

Zitat von himitsu (Beitrag 1372407)
Es ist schneller? (das Open Array kopiert praktisch die Daten/Zeiger, die von außen rein kommen, in seine eigene Struktur rein)

Und vorallem "es funktioniert".

OK Danke.. Das reicht mir wenn ich sonst nichts tun muss ;)
Danke für eure Hilfe.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr.
Seite 1 von 3  1 23      

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