Obługa myszy i zapisywanie kordynatów

0

Potrzebuje warunek, który będzie czekał na wciśnięcie klawisza lewego klawisza myszy (tylko raz) . Jaka to funkcja, jak to napisać?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        klawisz=0;



        if (klawisz==0)
        {
        licznik++;
        klawisz= GetKeyState( VK_LBUTTON );
        GetCursorPos( & pos );
        Label1->Caption=pos.x;
        Label2->Caption=pos.y;
        Label3->Caption=klawisz;
        Label4->Caption=licznik;
        }
        licznik=0;
}

Dlaczego licznik nie jest zerowany? To jest przycisk, dlaczego po ponownym kliknięciu licznik nie jest zerowany?

for (int i=0; i<100000; i++) {
        licznik++;
        Label4->Caption=licznik;  }

Dlaczego takie coś nie wprowadza zmian na bieżąco do labela? Używam C++ Builder

0

Mam wrażenie, że źle się do tego zabierasz. Dlatego może opisz najpierw co chcesz osiągnąć, a potem zobaczymy czy jest ok.

Co do 2 pytania. Dlaczego pętla nie wyświetla Ci po kolei liczb w komponencie TLabel. Najprościej wymusić obsługę komunikatów w każdym przebiegu pętli. Robisz to w ten sposób:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  int licznik = 0;
  for (int i=0; i<100000; i++)
  {
    licznik++;
    Label1->Caption=licznik;
    Application->ProcessMessages();
  }
}
//---------------------------------------------------------------------------
0
  1. Klikam na przycisk
  2. Program jest w gotowości i czeka aż kliknę lewym klawiszem myszy na ekranie
  3. Następuje zapisanie kordynatów
  4. Klikam myszką po ekranie i po każdym kliknięciu program wraca na kordynaty i klika prawym przyciskiem myszy (użytkownik tego nie widzi i nie odczuwa).

Dlaczego to nie może wyglądać tak?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        int x=0, y=0;
        POINT pos;

               while (true){
                if  (VK_LSHIFT){
                        GetCursorPos (& pos);
                        Label1->Caption=pos.x;
                        Label2->Caption=pos.y;
                        x=pos.x;
                        y=pos.y;
                         }

                if (WM_LBUTTONDOWN) {
                        SetCursorPos( x, y);
                         }

                           }


} 
1

No dobrze. Prawdopodobnie musisz założyć hooka na mysz. Po tym, jak użytkownik klika Ci button, zakładasz hooka na mysz. Po tym, jak przechwytujesz kliknięcie, zdejmujesz hooka z myszy i robisz sobie, co chcesz. O zakładaniu hooków doczytasz w necie: "Winapi mouse hook"

0

Dokładnie to co Juhas napisał to poprawny sposób rozwiązania problemu. Nie mówiąc już o tym, że Twoja metoda @Adisek nie zadziała jak focus będzie na innym oknie.

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