Brainer Napisano Lipiec 6, 2008 Zgłoś Share Napisano Lipiec 6, 2008 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. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 6, 2008 Zgłoś Share Napisano Lipiec 6, 2008 eventy MainForm ida gdy ruszasz myszka nad main formem. Jak ruszasz nad PaintBoxem to pewnie to nie zadziala bo nie dostaniesz zdarzenia na MainFormie. Takie jest moje wrazenie patrzac na ten kod. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 6, 2008 Autor Zgłoś Share Napisano Lipiec 6, 2008 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ł. Co może być nie tak? .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 6, 2008 Zgłoś Share Napisano Lipiec 6, 2008 skoro przesuwasz obiekt do wspolrzednych x,y to jego lewy gorny rog jest pod myszka, wiec ruch w prawo/dol nastepuje po PaintBoxie czy po TATImagebox ? Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Lipiec 7, 2008 Zgłoś Share Napisano Lipiec 7, 2008 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) Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 7, 2008 Autor Zgłoś Share Napisano Lipiec 7, 2008 CYTAT(Toster @ nie, 06 lip 2008 - 23:12) skoro przesuwasz obiekt do wspolrzednych x,y to jego lewy gorny rog jest pod myszka, wiec ruch w prawo/dol nastepuje po PaintBoxie czy po TATImagebox ? Po TATImageBox. Dzięki za kod, ale niestety nadal jest to samo. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Lipiec 7, 2008 Zgłoś Share Napisano Lipiec 7, 2008 Brainer, moim zdaniem jednak Toster ma racje... czyli ruch w prawo/dol następuje po PaintBoxie. Pozdrawiam! Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 7, 2008 Autor Zgłoś Share Napisano Lipiec 7, 2008 Brainer, moim zdaniem jednak Toster ma racje... czyli ruch w prawo/dol następuje po PaintBoxie. Tak, obaj mieliście jednak rację. Zwracam honor Toster i dzięki jeszcze raz wam obu! .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 7, 2008 Zgłoś Share Napisano Lipiec 7, 2008 No Problem Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 7, 2008 Autor Zgłoś Share Napisano Lipiec 7, 2008 A jeszcze jedno pytanko - w jaki sposób mogę przestrzec się przed sytuacją przedstawioną na rysunku poniżej (prostokąt selekcji wyszedł poza obszar rysunku)? .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Lipiec 7, 2008 Zgłoś Share Napisano Lipiec 7, 2008 Jak jak 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 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 Ciabah! Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 8, 2008 Autor Zgłoś Share Napisano Lipiec 8, 2008 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. .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Lipiec 8, 2008 Zgłoś Share Napisano Lipiec 8, 2008 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. 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.