Delphi rysowanie problem

0

Witam mam taki problem z delphi zrobiłem sobie coś jak pędzel i kod działa jest tylko jedna rzecz jeśli za szybko przesunę myszkę to robią się przerwy jeśli przesuwamy powoli to jest ok tworzy się linia

oto mój kod potrzebuje rady jak to poprawic :/

procedure TForm3.ObrazMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
      mouse_down:=false;
end;
procedure TForm3.ObrazMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    mouse_down:=true;
end;
procedure TForm3.ObrazMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);

begin
      if (mouse_down) then
        rysuj_pedzel(x,y,Obraz.Canvas.Pen.Color,styl_pedzla);
end;


procedure TForm3.rysuj_pedzel(x,y,kolor,rodzaj:integer);
var sr:integer;
    tbcolor,tpcolor:integer;
begin
    tbcolor:=Obraz.Canvas.Brush.Color;
    tpcolor:=Obraz.Canvas.Pen.Color;

    if rodzaj=0 then
         sr:=18
    else if rodzaj=1 then
         sr:=7
    else if rodzaj=2 then
         sr:=5
    else if rodzaj=3 then
         sr:=3;

    Obraz.Canvas.Brush.Color:=kolor;
    Obraz.Canvas.Pen.Color:=kolor;
    Obraz.Canvas.Brush.Style:=bsSolid;
    if rodzaj=0 then
      Obraz.Canvas.Rectangle(x,y,x+sr,y+sr)
    else Obraz.Canvas.Rectangle(x-sr,y-sr,x+sr,y+sr);
    Obraz.Canvas.FloodFill(x+1,y+1,clblack,fsSurface);

    Obraz.Canvas.Pen.Color:=tpcolor;
    Obraz.Canvas.Brush.Color:=tbcolor;
    Obraz.Canvas.Brush.Style:=typ_wypelnienia;
end;
0

bo rysujesz tylko w punktach w ktorych jest kursor myszy. tak juz jest, ze kursor troche "skacze" przy szybszych ruchach.
dlatego musisz rysowac w linii prostej pomiedzy tymi punktami.

aha. w samym mouseMove, mozna zamiast korzystac ze zmiennej dac:
if (ssLeft in Shift) then ...

0

Poczytaj o Canvas.MoveTo(); i Canvas.LineTo();.

0

Co do komentarza, nie prawda. Może zrobić tak

var
  A, B: TPoint;
procedure TForm1.ImageMouseDown(Sender: TObject; //coś tam, nie pamiętam);
begin
  mouse_down := True;
  A := Point(X, Y);
end;
procedure TForm1.ImageMouseMove(Sender: TObjectl //coś tam);
begin
  B := A;
  A := Point(X, Y);
  
  Canvas.Pen.Width := 3 //lub inna grubość
  Canvas.MoveTo(B.X, B.Y);
  Canvas.LineTo(A.X, A.Y);
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1