Guten Abend Delphi Praxis.
Ich hab mich mal grade an ein Programm gemacht, dass dynamisch TImage Objekte aus Bitmapabschnitten erstellt.
Das Programm soll ca. 10000 Bitmaps in eine Array of TImage laden und dann in die Form ausgeben.
Allerdings gibt es nach ca. 20sec des Wartens diese Meldung:
Klick!
Hier der dazu gehörende Code:
Delphi-Quellcode:
procedure DrawEntities(E: Array_Array_TPoint; Source_Bitmap: TBitmap);
var i, t: Integer;
Destination_Rect, Source_Rect: TRect;
begin
For i := 0 to Length(Entity_image) - 1 do
begin
Entity_image[i].Free;
end;
SetLength(Entity_Image,0);
For i := 0 to Length(E) - 1 do
begin
For t := 0 to Length(E[i]) - 1 do
begin
Setlength(Entity_image, Length(Entity_image) + 1);
Entity_image[High(Entity_image)] := TImage.Create(nil);
Entity_image[High(Entity_image)].Parent := MAPTEST_form;
Entity_image[High(Entity_image)].Height := 5;
Entity_image[High(Entity_image)].Width := 5;
Entity_image[High(Entity_image)].Top := E[i,t].y*5;
Entity_image[High(Entity_image)].Left:= E[i,t].x*5;
// Ab hier wird ein bestimmter Abschnitt einer Bitmap in die Array geladen.
Destination_Rect := Rect(0,0,5,5);
Source_Rect := Rect(i * 5, 1,i * 5 + 5,6);
Entity_image[High(Entity_image)].Canvas.FillRect(Destination_Rect);
Entity_image[High(Entity_image)].Picture.Bitmap.Canvas.CopyRect(Destination_Rect,Source_Bitmap.Canvas,Source_Rect);
Entity_image[High(Entity_image)].BringtoFront;
end;
end;
end;
Liegt es vielleicht daran, dass ich irgendwann zuviele Objekte erstellt habe?
Es gibt eigentlich nur ca. 10 verschiedene Möglichkeiten an Bitmaps mit welcher ein TImage gefüllt kann. Ich glaube aber, dass hier für jedes TImage ein neues Objekt angelegt wird.
Da ich nur begrenzte Delphi-Kenntnisse habe und eigentlich nicht mal weiß was ein Parent und TImage.Create(nil) machen, kann ich den Fehler nicht selbst beheben.
EDIT: Vielleicht sollte ich ergänzen, dass das Programm durchaus lauffähig ist und nur sobald ich mehr als ca. 3300 TImages in der Array habe, der Fehler auftritt.