Autor Beitrag
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 10.02.04 00:34 
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:

ausblenden Delphi-Quelltext
1:
Canvas.FillRect(Rect);					


Wobei es, wenn man die ganze Fläche löschen will, besser so geht:

ausblenden 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

ausblenden 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{Popov}


Beispiel:

Formular mit roter Farbe löschen:

ausblenden 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)

ausblenden 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:

ausblenden 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(100100, Bitmap);
  finally
    Bitmap.Free;
  end;
end{Popov}



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.

_________________
Popov