Bonjour à tous,

voilà j'ai un problème j'écris un programme pour tracer une ligne en maintenant le bouton de la souris enfonce et en la déplacant. j'utilise une procédure qui efface le PaintBox à chaque mouvement avec bouton enfoncé pour éviter de faire des miliers de lignes. Le problème, c'est que quand je fais une ligne ca va mais qd j'en fait une autre, la précédente est effacé ce qui est normal mais je sais pas comment faire pour pouvoir en tracer plusieurs sans quelles soient effacées.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
 
type
  TDessinForm = class(TForm)
    PaintBox1: TPaintBox;
    procedure FormCreate(Sender: TObject);
    procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  DessinForm: TDessinForm;
  Enfonce : Boolean;
  DepartPosition, FinPosition: TPoint;
 
implementation
 
{$R *.dfm}
 
procedure TDessinForm.FormCreate(Sender: TObject);
begin
  Enfonce:=false;
end;
 
procedure TDessinForm.PaintBox1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Enfonce:=true;
  DepartPosition.X:=X;
  DepartPosition.Y:=Y;
end;
 
procedure TDessinForm.PaintBox1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
  procedure ViderCanvas;
  begin
    PaintBox1.Canvas.Brush.Color:=RGB(255,255,255);
    PaintBox1.Canvas.FillRect(Canvas.ClipRect);
  end;
begin
  if (Enfonce) then
  begin
    ViderCanvas;
    PaintBox1.Canvas.MoveTo(DepartPosition.X, DepartPosition.Y);
    PaintBox1.Canvas.LineTo(X, Y);
  end;
end;
 
procedure TDessinForm.PaintBox1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Enfonce:=false;
end;
 
end.
Si vous avez une alternative, je suis ouvert à toute propositions

Merci d'avance