Simak hat folgendes geschrieben: |
| Zitat: |
Ich denke, Du musst es im OnPaint-Event neu zeichnen
|
Wie meinst du das genau im OnPaint-Event neu Zeichnen? |
Du musst das, was vorher auf der Canvas war, auch wieder auf die Canvas drauf zeichnen.
Ich mache nicht so viel mit Grafik-Zeugs, es kann daher sein, dass es elegantere Möglichkeiten gibt, aber ich würde das als erste Idee so realisieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| type TForm1 = class(TForm) PaintBox1: TPaintBox; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); private fBuffer : TBitmap; end;
procedure TForm1.Button1Click(Sender: TObject); begin fBuffer.Canvas.Rectangle(10,10,100,100); paintBox1.Repaint; end;
procedure TForm1.FormCreate(Sender: TObject); begin fBuffer := TBitmap.Create; fBuffer.Width := paintBox1.Width; fBuffer.Height := paintBox1.Height; end;
procedure TForm1.PaintBox1Paint(Sender: TObject); begin BitBlt(paintBox1.Canvas.Handle, 0, 0,paintBox1.Width, paintBox1.Height, fBuffer.Canvas.Handle,0,0,SRCCOPY); end; |
Ich habe eine Paintbox und einen Button auf der Form. Mit dem Button wird in die PaintBox ein Quadrat gezeichnet. Allerdings nicht direkt in die Paintbox, sondern in ein Bitmap im Speicher (fBuffer). Dann veranlasse ich die PaintBox, sich neu zu zeichnen. Immer, wenn sich die PaintBox neu zeichnet, wird fBuffer auf die Canvas der Paintbox gezeichnet.
Keine Ahnung, ob das besonders elegant ist, aber es funktioniert

Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".