Georg |
Отправлено: 12.11.2003, 17:55 |
|
Не зарегистрирован
|
Мне нужно обрабатывать нажатие кнопок мыши. Для простоты рассмотрения, будем при нажатии кнопки мыши менять курсор на крестообразный, а при отпускании возрашать форму курсора, заданную по умолчании. На первый взгляд все просто:
//Кнопка нажата
void __fastcall TViewForm1::FormMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//Какая кнопка нажата?
if(Button==mbRight)
{
Cursor = crCross;
}
}
//Кнопка отпушена
void __fastcall TViewForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
//Какая кнопка нажата?
if(Button==mbRight)
{
Cursor = crDefault ;
}
}
И на самом деле этот фрагмент кода работает, но мне надо обрабатывать нажатие левой кнопки мыши, и когда я вместо mbRight пишу mbLeft, все перестает работать. Может ктонибудь сталкивался с проблемой и знает, как заставить работать левую клавишу мыш |
|
Gedeon |
Отправлено: 12.11.2003, 18:25 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Georg @ 12/11/2003, 18:57) | Для простоты рассмотрения, будем при нажатии кнопки мыши менять курсор на крестообразный, а при отпускании возрашать форму курсора, заданную по умолчании. |
Все тут нормально отрабатывает, просто неудачный выбор для простоты. Попробуй так:
CODE |
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft)
Beep(1000,100);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft)
Beep(1000,1000);
}
//---------------------------------------------------------------------------
|
И ты все услышишь, по каким причинам в момент OnMouseDown курсор не меняется с mbLeft сказать не могу.
Отредактировано Gedeon — 12/11/2003, 19:29
|
|
Georg |
Отправлено: 13.11.2003, 17:44 |
|
Не зарегистрирован
|
Попробывал не гудит ((::. |
|
Gedeon |
Отправлено: 13.11.2003, 18:30 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Тяни проект, попробуй, у меня все как надо:
|
|
Samual |
Отправлено: 13.11.2003, 22:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Да-а-а-а! Мистика! Я сам ох...!
Но выход я тебе нашел:
Повесь комп. ApplicationEvents. У него есть событие OnMessage.
И тут пиши:
CODE |
void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
if (Msg.message == WM_LBUTTONDOWN)
{
Cursor = crCross;
}
if (Msg.message == WM_LBUTTONUP)
{
Cursor = crDefault;
}
|
У меня работает. Good luck. |
|
Georg |
Отправлено: 14.11.2003, 11:16 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 34
|
Большое всем спасибо за помощь. Скачав пример от Gedeon, неудалось скомпелировать, ладно по совету Samualе удалось пробится с помощью ApplicationEvents. Далее стал разбираться, со скаченым примером, напрямую не компилируется, почему не понятно. Перетаскиваю, по частям в другой проект, компиляция проходит, запускаю РАБОТАЕТ!!!. Дале опять создаю собственый проект, опять все работает. Возращаюсь к старой проге, откуда все началось, собираю заново, опять работает. мистика |
|
Gedeon |
Отправлено: 14.11.2003, 11:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Я тут дома подумал: может не гудеть т.к. у тебя похоже стоит Win98 или WinMe или даже Win95 а там:
CODE |
Remarks
Windows 95:
The Beep function ignores the dwFreq and dwDuration parameters. On computers with a sound card, the function plays the default sound event. On computers without a sound card, the function plays the standard system beep.
|
В NTях в отличии от тех ОС параметры передаваемые функции не игнорируются и пиликает именно спикер, а не звуковуха если она есть.
Т. е. тут неудачный пример выбрал я. Помести на форму Edit1 и попробуй так:
CODE |
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft){
Edit1->Text = "MouseDown";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Button==mbLeft){
Edit1->Text = "MouseUp";
}
}
//---------------------------------------------------------------------------
|
Но вообще как бы не поняно зачем так извращаться для простого теста, для этого есть BreakPointы, которые ставь и смотри, что происходит, а что нет.
|
|
Samual |
Отправлено: 14.11.2003, 18:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Gedeon, я это же пробовал у себя на 2000ном и у соседа на XP — не работает... |
|
Gedeon |
Отправлено: 14.11.2003, 18:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Samual @ 14/11/2003, 19:36) | Gedeon, я это же пробовал у себя на 2000ном и у соседа на XP — не работает... |
Ну тогда это действительно мистика какая-то, а BreakPointы ставил, как с ними, останавливается или нет?
Отредактировано Gedeon — 14/11/2003, 19:53
|
|
knatz |
Отправлено: 15.11.2003, 23:51 |
|
Не зарегистрирован
|
У меня не Миллениуме с 6-м Билдером все работает, за исключением изменения курсора. Вот пример:
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
//Какая кнопка нажата?
if(Button==mbLeft)
{
// Cursor = crCross;
Form1->Show();
MessageBox (0,"Кнопка нажата",0,MB_ICONWARNING);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
//Какая кнопка нажата?
if(Button==mbLeft)
{
// Cursor = crDefault ;
MessageBox (0,"Кнопка отпущена",0,MB_ICONWARNING);
}
}
P.S. Загадочный эффект однако... |
|
Waters |
Отправлено: 16.11.2003, 09:20 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE | ...все работает, за исключением изменения курсора. |
Попробуйте
CODE |
Screen->Cursor=crCross;
|
wbr |
|
Samual |
Отправлено: 16.11.2003, 12:02 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
QUOTE |
Ну тогда это действительно мистика какая-то, а BreakPointы ставил, как с ними, останавливается или нет?
|
Ставил. Нихрена. Он при нажатии не риагирует, а при отпускании прыгает на нажатие. Такого я еще не видел! |
|
Samual |
Отправлено: 21.11.2003, 21:35 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 39
|
Товарищи!!! Вот вам!!!
CODE |
OnMouseDown...
...
MouseCapture = false; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (Button == mbLeft)
{
...
}
|
Спасибо за помощь Шевякову В. М. |
|
|