Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Liste von Tbitmaps als array of .... speichern (https://www.delphipraxis.net/208369-liste-von-tbitmaps-als-array-speichern.html)

bernhard_LA 20. Jul 2021 16:44

Liste von Tbitmaps als array of .... speichern
 
ist dieser Ansatz um eine Bildliste über arrays zu speichern falsch ?
mein Testprogramm weigert sich die bmps zu erzeugen, der Rest funktioniert ohne Probleme .


Delphi-Quellcode:
meinRecord = record
   x : Integer ;
   y : Integer;
   Name : String;
   Datum : Date;
   ....
   bmp : TBitmap
end ;


meinerecords = array of meinRecord;



for i:= 0 to 5 do
  begin
    meinerecords[i].bmp.create;  //  TBitmap.create
  end:

venice2 20. Jul 2021 17:03

AW: Liste von Tbitmaps als array of .... speichern
 
Sorry vergiß es war am Thema vorbei.

Klaus01 20. Jul 2021 17:28

AW: Liste von Tbitmaps als array of .... speichern
 
Delphi-Quellcode:
for i:= 0 to 5 do
  begin
    meinerecords[i].bmp := TBitmap.Create(nil);
  end:
so sollte es tun, wenn Dein Array hier schon 6 Elemente hat.

Grüße
Klaus

bernhard_LA 21. Jul 2021 12:45

AW: Liste von Tbitmaps als array of .... speichern
 
Fehler lag an anderer Stelle im Code, Liste wurde gelöscht ..... , danke für den Support :-)
TBitmap.create(nil) geht nicht


Delphi-Quellcode:

for i:= 0 to 5 do
  begin
    meinerecords[i].bmp := TBitmap.create ;
  end;

generic 21. Jul 2021 13:04

AW: Liste von Tbitmaps als array of .... speichern
 
Das was Klaus schreibt ist schon gut.

Code:
meinerecords = array of meinRecord;
Dein Array ist aber hier dynamisch. D.h. du musst eine Größe vorher mit
Code:
setlength(meinerecords)
setzen.
Die For-Schleife würde ich dann auch dynamische machen in Sinn von
Code:
for i:=low(meinerecords) to high(meinerecords) do
Dann noch kurz die Erklärung zu Klaus
Code:
meinerecords[i].bmp.create; // TBitmap.create
Das Array bzw. der Record der mit I angesprochen wird, enthält einen Zeiger bmp.
Diese MUSS vor der Benutzung gesetzt bzw. da wo der hinzeigt initialisiert werden. Daher macht Klaus
Code:
meinerecords[i].bmp := TBitmap.create
Was eine neue instanz von einer Bitmap erstellt und dann wird dieser Instanzzeiger in bmp gespeichert.

haentschman 22. Jul 2021 06:21

AW: Liste von Tbitmaps als array of .... speichern
 
Moin...:P

Blöde Frage: Wo gibst du die Instanzen (.bmp := TBitmap.Create) wieder frei wenn du das Array mit den Records wegwirfst? :gruebel:

Mach mal in der dpr:
Delphi-Quellcode:
begin
{$IFDEF DEVELOPMENT} // wenn du willst ;-)
  ReportMemoryLeaksOnShutdown := True; // das ist wichtig
{$ENDIF}
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
...
...dann siehst du was du nicht weggeräumt hast. :zwinker:

Blup 24. Jul 2021 07:43

AW: Liste von Tbitmaps als array of .... speichern
 
Es ist in Delphi üblich Typ-Namen mit einem großen "T" am Anfang zu kennzeichnen.
Hier wurde z.B. "meinerecords" als Array-Typ vereinbart, aber dann wie eine Variable behandelt.
Solche Fehler kann man so leicht vermeiden.

Statt eines Records mit zusätzlichen Informationen zur Bitmap, warum nicht eine eigene Bitmap-Klasse, die diese Informationen beinhaltet?
Delphi-Quellcode:
TMeinBitmap = class(TBitmap)
private
  Fx: Integer;
  Fy: Integer;
  FName: string;
  FDatum: TDate;
public
  propert x: Integer read Fx, write Fx;
  propert y: Integer read Fy, write Fy;
  propert Name: Integer read FName, write FName;
  propert Datum: TDate read FDatum write FDatum;
end;
Wenn man eine Liste von Objekten verwaltet, dann am besten auch in einer TObjectList:
Delphi-Quellcode:
TMeinBitmapList = class(TObjectList<TMeinBitmap>)
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.

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