Ĺadny brzuch
Witam !! Czy wie moz ktos jak zrobic cos takiego: Mam wczytany obrazek do Image i chce zeby po najechaniu na niego kursor nie wchodził na obrazek tylko poruszal po jego brzegach. Potrzebuje tego po to ,zeby wybrac wspólrzedne dwoch dowolnyc punktow i poprowadzic miedzy nimi linie ale te punkty musza byc na brzegach obrazka i chce to zrobic myszka a nie wpisywac wspolrzene z klawiatury. Z gory dziekuje za pomoc
POZDRAWIAM !!
Witam
Po pierwsze nalezaloby wiedziec gdzie sa krawedzie obrazka i tutaj mamy cos takiego jak Left, Top, width i heigt . Jesli dla Image ustawisz stretch na true to wtedy Image zawsze bedzie tego rozmiaru co wczytany obrazek. Co dalej nalezaloby zrobic to mozna roznie sie za to zabrac.
Najlatwiej chyba skorzystac z funcji mousemove.
Ewentualnie jesli chodzi o klikanie to dobrze byloby w zdarzeniu mousedown zapamietac gdzie kliknieto.
Wiem ze to jest ogolnie ale mam malo czasu bo musze wyjsc
Jak nie dasz rady to daj znac to sprobuje jakies kody sklecic.
Pozdriawiam ;)
Witam
Po pierwsze nalezaloby wiedziec gdzie sa krawedzie obrazka i tutaj mamy cos takiego jak Left, Top, width i heigt . Jesli dla Image ustawisz stretch na true to wtedy Image zawsze bedzie tego rozmiaru co wczytany obrazek. Co dalej nalezaloby zrobic to mozna roznie sie za to zabrac.
Najlatwiej chyba skorzystac z funcji mousemove.
Ewentualnie jesli chodzi o klikanie to dobrze byloby w zdarzeniu mousedown zapamietac gdzie kliknieto.
Wiem ze to jest ogolnie ale mam malo czasu bo musze wyjsc
Jak nie dasz rady to daj znac to sprobuje jakies kody sklecic.
Pozdriawiam ;)
ja obstawiam, ze sie nie da tego zrobic, a przynajmniej nie spotkalem sie z kodem realizujacym cos takiego w estetyczny sposob. popatrz na ponizszy kod:
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if ( X > 50 ) { int x = ClientToScreen(TPoint(50,Y)).x; int y = ClientToScreen(TPoint(50,Y)).y; SetCursorPos(x,y); } }Jest to obsluga zdarzenia onmousemove dla glownego formularza. jesli sobie to skompilujesz i odpalisz to nie bedziesz mogl przejechac za 50 pixel od lewej krawedzi, jednakze pojawiaja sie szpetne migotanie kursora myszki, no i jak na razie nie widzialem kodu, ktory by to niwelowal, jezeli ktos chce sie podzielic, no to bardzo chetnie ;)
jest jeszcze funkcja ClipCursor, no ale ona dziala odwrotnie, nie pozwala wyjsc z jakiegos prostokata, a nie do niego wejsc :/
ja bym ci radzil rozwiazac te kropki jakos inaczej... na przyklad mozesz zmieniac wyglad kursora gdy jest przy krawedzi:
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { int fs = 10; TRect rect(fs, fs, Image1->Width-fs, Image1->Height-fs); if ( PtInRect(rect, TPoint(X,Y)) ) Image1->Cursor = crDefault; else Image1->Cursor = crCross; }
jezeli ktos teraz bedzie jezdzil mycha po obrazku to przy krawedziach bedzie mu sie zmienial kursor na celowniczek :], w zdarzeniu onmousedown bedziesz sprawdzac jaki jest rodzaj kursora i na tej podstawie wstawiac punkt lub nie.
Dzieki, twoj pomysł ze zmiana kursora nawet mi sie lepiej sprzyda niz moj z niemozliwoscia wejscia na obszar obrazka.
POZDRAWIAM :)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
POZDRAWIAM !!
Witam
Po pierwsze nalezaloby wiedziec gdzie sa krawedzie obrazka i tutaj mamy cos takiego jak Left, Top, width i heigt . Jesli dla Image ustawisz stretch na true to wtedy Image zawsze bedzie tego rozmiaru co wczytany obrazek. Co dalej nalezaloby zrobic to mozna roznie sie za to zabrac.
Najlatwiej chyba skorzystac z funcji mousemove.
Ewentualnie jesli chodzi o klikanie to dobrze byloby w zdarzeniu mousedown zapamietac gdzie kliknieto.
Wiem ze to jest ogolnie ale mam malo czasu bo musze wyjsc
Jak nie dasz rady to daj znac to sprobuje jakies kody sklecic.
Pozdriawiam ;)
Witam
Po pierwsze nalezaloby wiedziec gdzie sa krawedzie obrazka i tutaj mamy cos takiego jak Left, Top, width i heigt . Jesli dla Image ustawisz stretch na true to wtedy Image zawsze bedzie tego rozmiaru co wczytany obrazek. Co dalej nalezaloby zrobic to mozna roznie sie za to zabrac.
Najlatwiej chyba skorzystac z funcji mousemove.
Ewentualnie jesli chodzi o klikanie to dobrze byloby w zdarzeniu mousedown zapamietac gdzie kliknieto.
Wiem ze to jest ogolnie ale mam malo czasu bo musze wyjsc
Jak nie dasz rady to daj znac to sprobuje jakies kody sklecic.
Pozdriawiam ;)

ja obstawiam, ze sie nie da tego zrobic, a przynajmniej nie spotkalem sie z kodem realizujacym cos takiego w estetyczny sposob. popatrz na ponizszy kod:
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if ( X > 50 ) { int x = ClientToScreen(TPoint(50,Y)).x; int y = ClientToScreen(TPoint(50,Y)).y; SetCursorPos(x,y); } }Jest to obsluga zdarzenia onmousemove dla glownego formularza. jesli sobie to skompilujesz i odpalisz to nie bedziesz mogl przejechac za 50 pixel od lewej krawedzi, jednakze pojawiaja sie szpetne migotanie kursora myszki, no i jak na razie nie widzialem kodu, ktory by to niwelowal, jezeli ktos chce sie podzielic, no to bardzo chetnie ;)
jest jeszcze funkcja ClipCursor, no ale ona dziala odwrotnie, nie pozwala wyjsc z jakiegos prostokata, a nie do niego wejsc :/
ja bym ci radzil rozwiazac te kropki jakos inaczej... na przyklad mozesz zmieniac wyglad kursora gdy jest przy krawedzi:
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { int fs = 10; TRect rect(fs, fs, Image1->Width-fs, Image1->Height-fs); if ( PtInRect(rect, TPoint(X,Y)) ) Image1->Cursor = crDefault; else Image1->Cursor = crCross; }
jezeli ktos teraz bedzie jezdzil mycha po obrazku to przy krawedziach bedzie mu sie zmienial kursor na celowniczek :], w zdarzeniu onmousedown bedziesz sprawdzac jaki jest rodzaj kursora i na tej podstawie wstawiac punkt lub nie.
Dzieki, twoj pomysł ze zmiana kursora nawet mi sie lepiej sprzyda niz moj z niemozliwoscia wejscia na obszar obrazka.
POZDRAWIAM :)