Linia podążająca za kursorem w Tbitmap

0

Witam!

Piszę prosty programik graficzny oparty na Timage i mam elementarny problem. Chcę stworzyć narzędzie do rysowania linii i nie wiem jak oprogramować zdarzenie OnMouseMove aby móc rysować linię "ciągnącą się" za kursorem i nie wymazującą tła które jest pod spodem??? Tzn potrafię to zrobić ale działa strasznie powoli!

Robię to tak:

Var
Tlo :Tbitmap; \Tutaj zapisuje tlo którego nie chcę zamazać
Rys :Timage; \Tutaj będę tymczasowo rysował tło razem z moją linią

Zdarzenie ONMouseMove wygląda mniej więcej tak:

Rys.picture.bitmap.assign(tlo); //Czyszczę tło po poprzedniej linii

with Rys.picture.Bitmap.Canvas do
begin
MoveTo(LiniaPoczX, LiniaPoczY); //Rysuje tymczasową linię
Lineto(x,y);
end;

No i teraz Rys.picture.bitmap.assign(tlo) działa strasznie powoli. Chyba koncepcja nie jest najlepsza? Jak to zrobić?

Tomek

0

W demos jest przykład rysowania - Graphex.

0

w onMousedown Image wpisz costakiego

if (Form1.poczatek_rysowania=true) then
begin
      Form1.Image3.Canvas.MoveTo(X,Y);
      Form1.poczatek_rysowania:=false;
      poczatek_linii.X:=X;
      poczatek_linii.Y:=Y;
end
else
begin
      Form1.Image3.Canvas.LineTo(X,Y);
      Form1.poczatek_rysowania:=true;
end;

a w onMove Image cośtakiego

if Form1.poczatek_rysowania=false then
begin
       Form1.Image3.Canvas.Pen.Mode:=pmNotXor;
       Form1.Image3.Canvas.MoveTo(poczatek_linii.X, poczatek_linii.Y);
       Form1.Image3.Canvas.LineTo(koniec_linii.X, koniec_linii.Y); { usuń starą linię }
       Form1.Image3.Canvas.MoveTo(poczatek_linii.X, poczatek_linii.Y);
       Form1.Image3.Canvas.LineTo(X, Y); { rysuje nową linię }
end;
koniec_linii:=Point(X,Y);

czyli jak widaćcała idea polega na tym zę rysujemy linię ustawiając wcześniej opcję rysowania na Form1.Image3.Canvas.Pen.Mode:=pmNotXor; a jak przesuniemy kursor gdzieś indziej to zalalowujemy tę linię uzyskując z powrotem tło

0

Dziękuję bardzo!

To jest chyba to o co mi chodziło. Boję się tylko, że to też okaże się trochę za wolne. Na moim komputerze (a jest to dosyć szybka maszyna z dobrą kartą graficzną) linia nadal nie wygląda na "przylepioną do kursora" tylko podąża za kursorem z pewnym opóźnieniem. Nie wiem jak to będzie zachowywało się na czymś wolniejszym.

0

I jeszcze jedno
Gdzie znajdę ten przykład o którym pisał Dominik?

Jak w serwisie daję szukaj Graphex to niczego nie znajduje. Przeszukałem też programy do ściągnięcia i niczego nie znalazłem.

W demach do Delphi też nie mam niczego takiego (Delphi 5.0);

Tomek

0

Delphi5\Demos\Doc\Graphex :)

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