Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как в цикле запомнить 10 позиций клика мышью


Автор: ershovdy 4.4.2012, 15:42
Подскажите пожалуйста, как в цикле организовать ввод и запоминание 10 позиций курсора мыши после клика левой кнопки на экране?

То есть: 
Я кликаю левой кнопкой мыши по экрану в позиции №1 - программа запоминает координаты курсора и присваивает их соответственно X1, Y1
Я кликаю левой кнопкой мыши по экрану в позиции №2 - программа запоминает координаты курсора и присваивает их соответственно X2, Y2
...
Я кликаю левой кнопкой мыши по экрану в позиции №10 - программа запоминает координаты курсора и присваивает их соответственно X10, Y10

Значения координат  всех 10 точек мне будут нужны для дальнейшей работы. 
 smile 










Автор: borisbn 4.4.2012, 16:11
Код

int mouse_xs[ 10 ];
int mouse_ys[ 10 ];
int mouse_coords_i = 0;

void функция_обработчик_нажатия_мыши( int x, int y ) {
    mouse_xs[ mouse_coords_i ] = x;
    mouse_ys[ mouse_coords_i ] = y;
    mouse_coords_i = ( mouse_coords_i + 1 ) % 10;
}

Автор: ershovdy 4.4.2012, 18:31
borisbn, что надо написать вместо слов

"функция_обработчик_нажатия_мыши"

???


Автор: borisbn 5.4.2012, 08:21
Код

void __fastcall TForm1::Form1MouseDown(TObject *, TMouseButton /*Button*/, TShiftState /*Shift*/, int x, int y )


Автор: ershovdy 6.4.2012, 14:36
borisbn, СПАСИБО за ответ, но НЕ работает...    smile 

пишет что:
[C++ Warning] Unitl .cpp(4): W8058 Cannot create pre-cornpiled header: write failed
[C++ Error] Unitl.cpp(25): E2188 Expression syntax
[C++ Error] Umt1.cpp(31): E2379 Statement missing ;
[C++ Warning] Unitl ,cpp(31): W8004 'rnouse_coords_i' is assigned a value that is never used

и в строке 

void__fastcall TForm1::Form1MouseDown(TObject *, TMouseButton /*Button*/, TShiftState /*Shift*/, int x, int y )

слова   "Form1MouseDown"   как я понимаю подразумевают клик мышью на форме (Form1), а мне надо брать координаты в любой другой части экрана, но не на форме "Form1"


Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::sButton1Click(TObject *Sender)
{
int mouse_xs[ 10 ];
int mouse_ys[ 10 ];
int mouse_coords_i = 0;

void__fastcall TForm1::Form1MouseDown(TObject *, TMouseButton /*Button*/, TShiftState /*Shift*/, int x, int y )
{
    mouse_xs[ mouse_coords_i ] = x;
    mouse_ys[ mouse_coords_i ] = y;
    mouse_coords_i = ( mouse_coords_i + 1 ) % 10;
}
}
//---------------------------------------------------------------------------


Автор: was3110 8.4.2012, 14:30
Да...

Не надо было процедуру-обработчик мыши в процедуру-обработчик кнопки совать.

Автор: ershovdy 8.4.2012, 23:08
was3110, ты бы лучше написал как надо БЫЛО

Автор: xvr 9.4.2012, 13:47
Цитата(ershovdy @  8.4.2012,  23:08 Найти цитируемый пост)
was3110, ты бы лучше написал как надо БЫЛО 

Для начала надо было создать именно обработчик, т.е. пойти в Event'ы формы и сделать там event на MouseDown, а уж IDE сама поместит вам заготовку функции обработчика куда надо

Цитата(ershovdy @  6.4.2012,  14:36 Найти цитируемый пост)
а мне надо брать координаты в любой другой части экрана, но не на форме "Form1"

Тогда вам надо активизировать Mouse Capture для формы - все события от мыши будут сыпаться в форму, где бы мышь не находилась

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)