(Общие вопросы) Как ограничить перемещение курсора заданной областью?

Вопрос: (Общие вопросы) Как ограничить перемещение курсора заданной областью?

Ответ:

Иногда вам может потребоваться органичение перемещения курсора мыши заданой прямоугольной областью. Рассмотрим, как это делается, на примере формы (Form1), а далее вы сможете переделать данный код так, как вам необходимо.

Добавьте в заголовочный файл формы в секцию private два следующих объявления:

TCursor FCursor;
bool FFlag;

А в cpp-файле напишите три следующих обработчика:


//--------------------------------------------------------------------------- 
       void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
  {
    if(FFlag)
      {
        if(Mouse->CursorPos.x <= (Left + 50))
          SetCursorPos((Left + 50), Mouse->CursorPos.y);

        if(Mouse->CursorPos.x >= (Left + Width - 50))
          SetCursorPos((Left + Width - 50), Mouse->CursorPos.y);

        if(Mouse->CursorPos.y <= (Top + 50))
          SetCursorPos(Mouse->CursorPos.x, (Top + 50));

        if(Mouse->CursorPos.y >= (Top + Height - 50))
          SetCursorPos(Mouse->CursorPos.x, (Top + Height - 50));
      }
  }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
  {
    FFlag = true;
    FCursor = Cursor;
    Screen->Cursor = crDrag;
  }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
  {
    FFlag = false;
    Screen->Cursor = FCursor;
  }
//---------------------------------------------------------------------------

Теперь область перемещения курсора внутри формы при удерживаемой нажатой кнопке мыши будет на 50 пикселей меньше относительно каждой из границ формы, то есть, вы не сможете переместить курсор при нажатой кнопке мыше к краю формы ближе, чем на 50 пикселей.

Информаци о записи: (Общие вопросы) Как ограничить перемещение курсора заданной областью?

Добавлен DeVoid | Сайт http://devoid.com.ua/ | Добавлена 26 Августа 2007

  • Digg it!
  • Delicious
  • +МоёМесто.ru
  • Добавить страницу к Мистеру Вонгу
  • Добавить страницу к Мистеру Вонгу