Przesuwanie obiektów TImage

0

Witam
Piszę program wieże hanoi w środowisku Borland c++ Builder 6. Mam problem z przesuwaniem obiektów typu TImage tworzonych dynamicznie. Czy ktoś mógłby napisać w jaki sposób mogę przesuwać obiekty TImage na formularzu na konkretne określone miejse. Będę wdzięczny za pomoc. Zdarzenia OnMouseDown i OnDragDrop i OnDragOver nie działają, nie wiem dlaczego. To mój pierwszy poważniejszy programik graficzny męczę się nad tym już dwa tygodnie.

0

Jeśli nikt nie jest w stanie pomóc to proszę przynajmniej o podanie adresu jakiegoś tutoriala

0

jeśli chodzi o poradnik to poradziłbym Ci namierzyć jakąś książkę o "delphi" - są tam bardzo dobrze opisane używane przez Borlanda komponenty. Być może teraz jest lepiej i jest jakaś dobra książka do C++ Biuldera, ale nie przypuszczam, aby to się bardzo zmieniło. Dalphi (nowa wersja) zawsze było gdzieś o rok wcześniej wydawane.

Ja po długim boju z C++ Bulider 3 a potem 4 zobaczyłem "delphi 4 vademecum experta"
i stwierdziłem, że wszystko co rozgryzałem jest tam dokładnie opisane (jeśli chodzi o zasadę działania).
wystarczyłyby 2 wieczory, a nie 6 miesięcy prób i błędów.

teraz widzę dostęp tylko do Delphi 6 Vademecum Profesjonalisty, ale przypuszczam, ze zajrzenie tam Ci nie zaszkodzi.

Zdarzenia OnMouseDown i OnDragDrop i OnDragOver nie działają
wrzuć do nich Message i zobacz kiedy faktycznie się wykonują.
np. ShowMessage("teraz OnMouseDown");

przesuwanie obiektów typu TImage
http://programowanie.cal.pl/cyfbar/grafika.html
...I to byłoby już wszystko, teraz przy wciśniętym lewym klawiszu myszy można będzie przesuwać obiekt 'Image' po formularzu...

  1. ewentualnie poszukaj : timage move in form c++ builder
    https://www.google.pl/?gws_rd=ssl#q=timage+move+in+form+c%2B%2B+builder

Teraz nie używam C++ Builidera dlatego nie mogę więcej pomóc (tzn. sprawdzić jak to można zrobić)

0

Dzięki za pomoc Darko. Problem udało mi się rozwiązać, po prostu wykorzystuje dla obiektów TImage tylko zdarzenia OnMouseDown, ale tu pojawia się nowy problem. Może pokażę kawałek kodu

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Image1->Picture->Bitmap->LoadFromFile("stoswejsciowy.bmp");

Image2->Picture->Bitmap->LoadFromFile("stospomocniczy.bmp");

Image3->Picture->Bitmap->LoadFromFile("stoswyjsciowy.bmp");
 

tutaj inicjuję 3 Obiekty TImage o nazwach jak odpowiednio, następnie wywołuję zdarzenie OnMouseDown dla pierwszego obiektu TImage (stosu wejściowego na razie wykonuję to dla jednego krążka), ale tu jest problem bo zdarzenie jest wywoływane tylko wtedy gdy klikam lewym przyciskiem myszy na określony obszar obiektu Image1 dokładniej jest to lewa i prawa krawędź szerokości obydwie ok 20 pikseli od lewej i prawej strony. Jak to rozwiązać, żeby zdarzenie działało też wtdy gdy klikam środek obszaru obiektu Image1? Nie za bardzo wiem jak to ugryźć.

0

wywołuję zdarzenie OnMouseDown dla pierwszego obiektu TImage...
gdy klikam ... na określony obszar obiektu Image1 ... lewa i prawa krawędź szerokości... ok 20 pikseli działa, a w środku TImage nie

zacznij od sprawdzenia czy w tym miejscu nie masz jakiegoś innego obiektu, który przechwytuje obsługę tego zdarzenia. Obiekt ten może być niewidoczny, ale jest na wierzchu i klikanie w dany obszar to klikanie na niego, a nie w widoczną część TImage.

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