Einzelnen Beitrag anzeigen

Basetyp

Registriert seit: 18. Apr 2012
12 Beiträge
 
#1

Dynamische Erstellung von TImage Objekten führt zu Fehler in canvas.inc

  Alt 6. Dez 2012, 18:55
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.

Geändert von Basetyp ( 6. Dez 2012 um 18:59 Uhr)
  Mit Zitat antworten Zitat