Skocz do zawartości

[Delphi] Przeciąganie Paintboxa


Brainer

Polecane posty

Witam. :)

 

Mam taki problem. Mam komponent TATImagebox i komponent TPaintBox. W zdarzeniu ATImageBox.Image.OnMouseMove mam:

// w OnCreate formy mam ATImageBox.Image.OnMouseMove := MyOnMouseMove;
procedure TMainForm.MyOnMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if (Shift = [ssRight]) then
 begin
    PaintBox.Left := X;
    PaintBox.Top := Y;
 end;
end;

Jednak jak przenoszę tego Paintbox'a, to czasem dzieje się tak, jakby się zacinał. Co może być tego powodem i jak to naprawić?

 

Pozdrawiam.

Link do komentarza
Udostępnij na innych stronach

Napisałem przecież w komentarzu, do jakiego komponentu przypisane jest zdarzenie. A komponent pokrywa całą formę, więc wszystko trafia do niego.

 

Poza tym, problem nie leży w tym, czy komunikaty docierają (bo docierają), tylko w tym, że czasem ten PaintBox po prostu jakby się zacinał. :huh: Co może być nie tak?

Link do komentarza
Udostępnij na innych stronach

W OnMouseMove VCL podaje ci pozycję względną, na kontrolce...

Potrzebujesz pozycji względem formatki.

 

procedure TForm1.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var cur: TPoint;
begin
 if (ssCtrl in Shift) then
   begin
     GetCursorPos(cur);
     Memo1.Left:= Memo1.Left + (cur.X - oldpos.X);
     Memo1.Top:= Memo1.Top + (cur.Y - oldpos.Y);
   end;
 GetCursorPos(OldPos);
end;

 

Łapiesz gdzie chcesz i przesuwa ci odpowiednio...

Pisane teraz z pamięci więc nic nie gwarantuje (jest 2 w nocy) :P

Obrazek
Link do komentarza
Udostępnij na innych stronach

Jak jak :rolleyes::)

 

Znasz położenie rysunku oraz jego rozmiar

i przed przesunięciem prostokąta selekcji sprawdzasz czy możesz zrobić ruch w osi X oraz Y :rolleyes:

 

pseudo kod:

 

if (ProstokatSekcji.Left + ProstokatSekcji.Width + X<=Rysunek.Left+Rysunek.Width) then ProstokatSekcji.Left + X;
if (ProstokatSekcji.Top + ProstokatSekcji.Height + Y<=Rysunek.Topt+Rysunek.Height) then ProstokatSekcji.Top + Y;

 

jeśli dobrze zrozumiałem :rolleyes:

 

Ciabah!

Link do komentarza
Udostępnij na innych stronach

Nein, ten kod nie działa, bo tu dodatkowym utrudnieniem jest to, że gdy przewiniemy scroll w lewo lub w dół, wartości Top i Left się zmieniają i i tak wyjeżdża poza obrazek. :mellow:

 

u mnie działa dobrze nawet z suwakami

 

testowałem na ScrollBoxie z wstawionym Image do środka (oczywiście Image miał odpowiednio duży obrazek),

 

po tym wszystkim poruszałem TShapem.

 

Pozdrawiam!

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...