C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
FormMouseDown и Cursor, Левая кнопка не работает
vitavita
Отправлено: 25.04.2005, 09:52


Дежурный стрелочник

Группа: Участник
Сообщений: 59



Простой пример:
CODE

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if (Shift.Contains(ssLeft) && !Shift.Contains(ssRight))
Form1->Cursor= crHandPoint; // не работает

if (Shift.Contains(ssRight) && !Shift.Contains(ssLeft))
Form1->Cursor= crSizeAll; // все нормально — работает
}

при нажатии на правую кнопку все работает — курсор меняется
при нажатии на левую кнопку не работает — курсор не меняется

Но если немного переписать код и добавить ShowMessage("Down"); то курсор изменится
CODE

if (Shift.Contains(ssLeft) && !Shift.Contains(ssRight))
{Form1->Cursor= crHandPoint;
ShowMessage("Down"); } // нормально- левая кнопка изменила курсор

Почему ? Не понимаю я чего-то

Отредактировано vitavita — 25/04/2005, 09:53
FataLL
Отправлено: 25.04.2005, 13:32


Дежурный стрелочник

Группа: Участник
Сообщений: 37



Опробовал твой пример — все работает. Билдер 6. Попробуй сделай Rebuild All, какой-то странный глюк...
vitavita
Отправлено: 25.04.2005, 17:59


Дежурный стрелочник

Группа: Участник
Сообщений: 59



сделал Rebuild All — тоже самое все осталось попрежнему . Билдер 6 (Build 10.157)
неужели это только у меня такое ? Как исправить?
vitavita
Отправлено: 25.04.2005, 18:06


Дежурный стрелочник

Группа: Участник
Сообщений: 59



Забыл еще дописать у меня ещё при отпуске мыши
CODE

void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{ Cursor= crDefault; }

но все равно не понятно .

Отредактировано vitavita — 25/04/2005, 18:07
Sl@Sh
Отправлено: 25.04.2005, 18:19


Мастер участка

Группа: Участник
Сообщений: 383



А зачем вы используете ssRight и ssLeft ?
Для чего тогда TMouseButton Button ?
Тут тогда так — mbRight и mbLeft
vitavita
Отправлено: 25.04.2005, 19:12


Дежурный стрелочник

Группа: Участник
Сообщений: 59



Переписал
CODE
if (Button == mbLeft)
Form1->Cursor= crHandPoint;

все равно тоже самое

Отредактировано vitavita — 25/04/2005, 19:13
vitavita
Отправлено: 25.04.2005, 19:45


Дежурный стрелочник

Группа: Участник
Сообщений: 59



Сделал так , принудительно
CODE
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
     TShiftState Shift, int X, int Y)
{
  if (Shift.Contains(ssLeft) && !Shift.Contains(ssRight))
{Form1->Cursor= crHandPoint;
Screen->Cursor=crHandPoint;        }

 if (Shift.Contains(ssRight) && !Shift.Contains(ssLeft))
   Cursor= crSizeAll;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
     TShiftState Shift, int X, int Y)
{     Cursor= crDefault;
     Screen->Cursor=crDefault;
}

Теперь работает
Sl@Sh
Отправлено: 26.04.2005, 15:29


Мастер участка

Группа: Участник
Сообщений: 383



Странно, вот эта строчка кода у меня работает 100% (проверял)
CODE
if (Button ==  mbLeft) Cursor = crCross; else Cursor = crHandPoint;


Это я писал в OnMouseDown.

Вернуться в Вопросы программирования в C++Builder