Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Gemaltes aus einem Panel löschen (https://www.delphipraxis.net/194188-gemaltes-aus-einem-panel-loeschen.html)

Enddrew 26. Okt 2017 09:47

Delphi-Version: 5

Gemaltes aus einem Panel löschen
 
Guten Morgen,
Ich habe folgendes Problem: Ich male mit panel1.canvas Linien und so weiter auf mein Panel. Diese möchte ich durch einen Klick auf einen Button löschen, um danach wieder was neues zu malen. Wie erreiche ich das?
panel1.clear geht zum Beispiel nicht.

Vielen Dank schon mal für alle Antworten.

hsg 26. Okt 2017 09:49

AW: Gemaltes aus einem Panel löschen
 
Indem du ein mit der Hintergrundfarbe gefülltes Rechteck über die gesamte Fläche malst.
Ist natürlich Blödsinn :(
Theoretisch reicht ein Invalidate(), denn dann muss sich das Panel neu malen. Und damit hast du dann wieder ein leeres Panel.
Falls du die Koordinaten der Linien gespeichert hast, musst du diese natürlich vorher löschen.

DeddyH 26. Okt 2017 10:12

AW: Gemaltes aus einem Panel löschen
 
Oder mit einer zuweisbaren Bitmap. Beispiel (ein Formular mit einem Panel und 2 Buttons, schnell heruntergeschrieben, Standardbenennungen beibehalten):
Delphi-Quellcode:
unit Unit6;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
  TPanel = class(Vcl.ExtCtrls.TPanel)
  private
    FBitmap: TBitmap;
    procedure SetBitmap(const Value: TBitmap);
  protected
    procedure Paint; override;
  public      
    property Bitmap: TBitmap read FBitmap write SetBitmap;
  end;

  TForm6 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FBitmap: TBitmap;
  public
    { Public-Deklarationen }
  end;

var
  Form6: TForm6;

implementation

{$R *.dfm}

{ TPanel }

procedure TPanel.Paint;
begin
  inherited;
  if Assigned(FBitmap) then
    Canvas.Draw(0, 0, FBitmap);
end;

procedure TPanel.SetBitmap(const Value: TBitmap);
begin
  FBitmap := Value;
  Invalidate;
end;

procedure TForm6.Button1Click(Sender: TObject);
begin
  Panel1.Bitmap := nil;
end;

procedure TForm6.Button2Click(Sender: TObject);
begin
  Panel1.Bitmap := FBitmap;
end;

procedure TForm6.FormCreate(Sender: TObject);
begin
  FBitmap := TBitmap.Create;
  FBitmap.Width := Panel1.Width;
  FBitmap.Height := Panel1.Height;
  FBitmap.Canvas.Brush.Color := clRed;
  FBitmap.Canvas.FillRect(Rect(0, 0, FBitmap.Width, FBitmap.Height));
  Panel1.Bitmap := FBitmap;
end;

procedure TForm6.FormDestroy(Sender: TObject);
begin
  FBitmap.Free;
end;

end.

Enddrew 26. Okt 2017 10:20

AW: Gemaltes aus einem Panel löschen
 
Danke für die Antworten :wink:, ich werde es auf diese Weisen versuchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz