Du könntest entweder eine Private Bitmap deiner Klasse hinzufügen, und auf die Zeichnen (Ganz normal in den Mouse Events über MyBitmap.Canvas), und dann im OnPaint Event das auf das Control zeichnen (Control.Canvas.Draw(0, 0, MyBitmap)) oder du verwendest ein TImage (was letztlich genau das tut) hier mal ein kleines Beispiel meinerseits:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
);
procedure Image1Resize(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Image1.Picture.Bitmap.Canvas.MoveTo(X, Y);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Picture.Bitmap:=TBitmap.Create;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
Image1.Picture.Bitmap.Canvas.LineTo(X, Y);
end;
procedure TForm1.Image1Resize(Sender: TObject);
var tmp: TBitmap;
begin
tmp:=TBitmap.Create;
try
tmp.Width:=Image1.ClientWidth;
tmp.Height:=Image1.ClientHeight;
tmp.Canvas.Brush.Color:=clWhite;
tmp.Canvas.FillRect(0,0, Image1.Width,Image1.Height);
tmp.Canvas.Draw(0, 0, Image1.Picture.Bitmap);
Image1.Picture.Bitmap.Assign(tmp);
finally
tmp.Free;
end;
end;
end.