Du könntest versuchen zuerst alles auf einer Bitmap zu zeichnen und dann alles zusammen auf PaintBox. Allerdings war bei mir keine der beiden Varianten langsam:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); var bit, bit2: TBitmap; x, y: Integer; begin bit := Tbitmap.Create; bit2 := Tbitmap.Create; try bit2.Width := PaintBox1.Width; bit2.Height := PaintBox1.Height; for x := 0 to 9 do for y := 0 to 9 do begin ImageList1.GetBitmap(0, bit); //jetzt 100 mal das bild auf der Zeichenfläche malen {...} bit2.Canvas.Draw(x * bit.Width , y * bit.Height, bit); {...} end; PaintBox1.Canvas.Draw(0 , 0, bit2); finally bit2.Free; bit.Free end; end; |
Du kannst dir hier etwas zu GDI anlesen:
www.hanser.de/lesepr...01/3-446-21734-7.pdf
Aber auch wenn du direkt mit der GDI / API zeichnest, ich glaube nicht, daß es viel schneller wird. Auf die schnelle könnte man die Draw gegen BitBlt tauschen.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button1Click(Sender: TObject); var bit, bit2: TBitmap; x, y: Integer; begin bit := Tbitmap.Create; bit2 := Tbitmap.Create; try bit2.Width := PaintBox1.Width; bit2.Height := PaintBox1.Height; for x := 0 to 9 do for y := 0 to 9 do begin ImageList1.GetBitmap(0, bit); //jetzt 100 mal das bild auf der Zeichenfläche malen {...} BitBlt(bit2.Canvas.Handle, x * bit.Width, y * bit.Height, bit.Width, bit.Height, bit.Canvas.Handle, 0, 0, SRCCOPY); {...} end; PaintBox1.Canvas.Draw(0 , 0, bit2); finally bit2.Free; bit.Free end; end; |
Teste es mal und sag das Ergebnis.