Mit Zeichenfläche ist hier die Canvas gemeint. Eigentlich ist das kein Tipp wie man eine Bitmap lösch, sondern die Canvas. Allerdings wollen die meisten immer wissen wie man das Bild einer Bitmap löscht. Deshalb Bitmap löschen.
Hier gibt es zwei Möglichkeiten. Beide nutzen:
Delphi-Quelltext
1:
| Canvas.FillRect(Rect); |
Wobei es, wenn man die ganze Fläche löschen will, besser so geht:
Delphi-Quelltext
1:
| with Canvas do FillRect(ClipRect); |
Ob jetzt vor Canvas Bitmap steht oder Form1 ist egal.
FillRect ist eigentlich schon der Tipp. Allerdings sollte man einige Punkte beachten, denn sonnst löscht FillRect mit irgendetwas. Es gibt die Möglichkeit entweder mit Farbe zu löschen oder mit einer Bitmap.
Mit Farbe löschen:
Löscht man mit der Farbe, dann ist die Canvas.Brush.Color Farbe dafür zuständig. Wird jetzt FillRect ausgeführt, dann wird mit der aktuellen Farbe "gelöscht", bzw. die Fläche gefüllt. Damit man keine bösen Überaschungen erlebt und mit den Farben durcheinander kommt, ist es besser das ganze über eine Prozedur zu machen. Hier merkt sich die Prozedur die alte Brush Farbe und stellt sie nach den Löschvorgang wieder zurück:
Es werden zwei Parameter erwartet:
- Canvas der zu löschenden Bitmap (oder sonstigen Objekt)
- Farbe mit der gelöscht werden soll, z.B. clWhite
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure CanvasClearCol(Canvas: TCanvas; Color: TColor); var ColMemo: TColor; StyMemo: TBrushStyle; begin with Canvas do begin ColMemo := Brush.Color; StyMemo := Brush.Style; Brush.Color := Color; Brush.Style := bsSolid; FillRect(ClipRect); Brush.Color := ColMemo; Brush.Style := StyMemo; end; end; |
Beispiel:
Formular mit roter Farbe löschen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin CanvasClearCol(Form1.Canvas, clRed); end; |
Mit Bitmap löschen:
Die zweite Möglichkeit ist mit einer Bitmap zu löschen. Hier sollte die Bitmap maximal 8x8 Pixel sein:
Es werden zwei Parameter erwartet:
- Canvas der zu löschenden Bitmap (oder sonstigen Objekt)
- Bitmap (Pinsel) mit der gefüllt wird (max. 8x8 Pixel)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure CanvasClearBmp(Canvas: TCanvas; Bmp: TBitmap); begin with Canvas do try Brush.Bitmap := Bmp; FillRect(ClipRect); finally Brush.Bitmap := nil; end; end; |
Beispiel:
Formular mit einer Bitmap löschen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try Bitmap.LoadFromFile('c:\mask.bmp'); CanvasClearBmp(Form1.Canvas, Bitmap); Canvas.Draw(100, 100, Bitmap); finally Bitmap.Free; end; end; |
Noch ein kleiner Hinweis zu FillRect: hat jetzt mit dem Tipp nicht zu tun, aber ist doch interresant. Gefüllt wird immer mit dem was zuletzt zugewiesen wurde. Wurde mach Bitmap eine Brush Farbe zugewiesen, dann füllt FillRect mit Farbe (bzw. mit Style Muster unter verwendung der Farbe). Wurde zuerst die Farbe zugewiesen und dann die Bitmap, dann wird mit der Bitmap gefüllt.