FreeBasic
Главная
Вход
Регистрация
Пятница, 29.03.2024, 02:55Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Вопросы по языку FreeBasic » Мышка (Мышка и как обрабатывать события с ней)
Мышка
RoloverДата: Вторник, 30.07.2013, 17:59 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 45
Репутация: 0
Статус: Offline
GetMouse
Наверное самый простой для понимания оператор (функция) для обработки событий мышки, в который передаются по ссылке параметры.
x, y, kolesiko_vrashenie, knopki, clips

вот этот clips наверное самый непонятный .. для чего он??..толком перевести не удалось

приведу чуток модифицированный код из справочника.. можно так сказать пробы
Код
Dim As Integer x, y, wheels, buttons , clips, doble
Screen 18,32,2
ScreenSet 1
Do
        
      Cls
      Getmouse (x, y,wheels, buttons, clips)
        
      '******новая часть*********************************
'    IF buttons <> 3 THEN   
'        ? "buttons : " & buttons ;
'    ELSE   
'        ?"buttons : 0 ";
'    END IF
'    ?
'    ? "clips : " & clips   
'      
'    ? "two buttons : ";
'      
'    if buttons = 3 THEN   
'        ? buttons;   
'    ELSEIF buttons <>1 and buttons <>2 and buttons <>4 THEN   
'        ? buttons;
'    ELSE ? " 0";
'    END IF
'    ?
'    ? "x : " & x
'    ? "y : " & y
'    ? "kolesiko :" & wheels
      '**********конец новой части********************
        
        
        
      'стараячасть*******************************************

      If x < 0 Then
          Print "Myshka vne okna"
      Else
'       Print Using "Poziciya myshki: ###:### Buttons: "; x; y;
        If buttons And 1 Then Print "Levaya ";  'нулевой бит это 1-ца ... если устанавливается и левая кнопка мыши
         IF buttons And 2 Then Print "Pravaya "; 'первый бит  это 2-ка клик правой кнопкой
            
          '*******************************
          'IF buttons And  3 Then
              'Print " Dve Knopki ";
          'Else
              '? "";
          'END IF
          '********************************
            
            
        If buttons And 4 Then Print "Kolesiko"; 'второй бит это  4-ка   клик колесиком
'        Print " "
      End If
        
       '********************************
      'Line(100,150) -(200,200),rgb(180,180,180),bf
        
      'проверка координат курсора и если они  в нужной нам области то закрашиваем квадрат другим цветом
      'if (x > 100 and  x<200  ) and (y>150 and y<200) then Line(100,150) - (200,200),rgb(150,150,250),bf
        '********************************
      ScreenCopy
Loop While InKey$ = ""
End

строки что закомментированы можно раскомментировать и посмотреть на результаты..

Оказывается кнопки передаются битовой маской
buttons

бит                              значение
001                                     1   левая     |
011                                                         > 3 две кнопки сразу
010                                     2   правая   |

100                                     4   колесико нажатие

Теперь понятно откуда эти все цифры 1, 2, 4

В примере больше всего удивила строка, их там несколько такого содержания.. но возьмем любую
Код
IF buttons And 2 Then Print "Pravaya "; 'первый бит  это 2-ка клик правой кнопкой

странно то что IF  button AND 2
Если button  не ноль И 2
А что это  2 ????  button = 2  или что другое равно 2-м
но как ни странно это работает... как он так вообще может сравнивать ????
Да  а если одновременно 2 кнопки нажать???
Та даже если запустите пример то сразу заметите что надпись
Dve Knopki появляется при нажатии любой кнопки.
Просто  не понятно откуда он знает что после And надо проверять Buttons равно 2 или нет?


Объяснив другому, поймешь, что понял сам.

Сообщение отредактировал Rolover - Вторник, 30.07.2013, 18:01
 
haavДата: Вторник, 30.07.2013, 22:06 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата
вот этот clips наверное самый непонятный .. для чего он??..толком перевести не удалось


В этом параметре возвращается значение, которое указывает захватывает ли графическое окно мышь или нет. То есть если мы установим с помощью SetMouse в параметре clips значение 1 , то мышь не выходит за рамки окна (если конечно не применять переключение задач с помощью ALT+TAB, клавиши WIN и пр.)

Цитата (Rolover)
странно то что IF button AND 2
Если button не ноль И 2
А что это 2 ???? button = 2 или что другое равно 2-м
но как ни странно это работает... как он так вообще может сравнивать ????
Да а если одновременно 2 кнопки нажать???
Та даже если запустите пример то сразу заметите что надпись
Dve Knopki появляется при нажатии любой кнопки.
Просто не понятно откуда он знает что после And надо проверять Buttons равно 2 или нет?


Вообще-то то что находится между IF и THEN это одно условие. То есть данное выражение:

buttons AND 2

это результат работы битового оператора AND, к примеру:

buttons = 3 (нажаты 2 кнопки)

3 в битовом представлении 11
2 в битовом представлении 10

получается 11 AND 10

11
and (умножить каждый бит друг под другом стоящий)
10
---
10 <- 2

Так определятся наверняка нажата ли кнопка , независимо нажата ли еще какая. Если мы применим:

if buttons = 2 then

то у нас при нажатии двух кнопок сразу получится if 3=2 then

что неверно и условие никогда не выполнится


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
RoloverДата: Среда, 11.09.2013, 22:53 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 45
Репутация: 0
Статус: Offline
Подскажите пожалуйста, а какими способами можно изменить внешний вид курсора мышки ??? просто хотелось бы его на "лету" менять

Объяснив другому, поймешь, что понял сам.

Сообщение отредактировал Rolover - Среда, 11.09.2013, 22:55
 
haavДата: Четверг, 12.09.2013, 09:07 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: Offline
Цитата (Rolover)
Подскажите пожалуйста, а какими способами можно изменить внешний вид курсора мышки ??? просто хотелось бы его на "лету" менять


Прячешь курсор с помощью SetMouse , определяешь его координаты с помощью GetMouse и рисуешь нужную картинку курсора по этим координатам.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Вопросы по языку FreeBasic » Мышка (Мышка и как обрабатывать события с ней)
  • Страница 1 из 1
  • 1
Поиск: