Миша в delphi

Головна Статті Програми Reshix: математика

Див. Також: Кольори в Delphi Морський бій DivTimer

/ * TODO: Learn programming * /

У Delphi є два основні підходи отримання інформації про курсорі миші: через набір функцій і через інтерфейс TMouse (можливо більш зручний). Але все ж я збираюся розповісти про обидва. Тим більше, що TMouse працює через ці самі функції.

положення курсору

Для початку варто розібратися з системою координат. Вона у нас глобальна, з початком в лівому верхньому кутку екрану, вісь X спрямована вправо, вісь Y вниз. Максимальне значення координат X і Y буде, відповідно, ширина і висота вашого екрану в пікселях. Їх найпростіше отримати використовуючи Screen з модуля "Forms":

Зауважте, що координати правого нижнього кута залежать від дозволу.

Для отримання координат

Перейдемо до отримання самих координат. Для цього є функція GetCursorPos з модуля "Windows":

Мабуть, використовувати її не дуже зручно - змінна, куди записується потрібна інформація, передається в функцію у вигляді параметра. Однак, я згоден з тим, що зберігати координати разом зручніше, використовуючи тип TPoint. Для тих, хто не знає як працювати в TPoint (про всяк випадок?), Отримання координат здійснюється приблизно так:

Ні, все-таки незручно. Давайте краще скористається другим методом: для цього в модулі "Controls" оголошений об'єкт Mouse.

З нею працювати вже приємніше, адже не обов'язково заводити зайві змінні, тому що Mouse.CursorPos вже і є та змінна типу TPoint. Разом:

переміщення курсора

На цей раз, мабуть, у першого варіанту перевага. Досить взяти і просто викликати SetCursorPos. все з того ж модуля "Windows":

З другим варіантом, втім, теж особливих проблем не виникає. Досить перетворити пару чисел (x, y) в TPoint і зберегти його:

Варто зауважити, що не вийде просто змінити тільки одну з координат:

Ось, що дуже зручно - переміщення курсору відбувається моментально, без проходження проміжних точок.

Натискання кнопок миші

Перейдемо до більш активних дій мишею. Розглянемо функцію mouse_event з модуля "Windows":

Взагалі, це досить складна функція, їй можна і курсор рухати, але я обмежуся натисканнями. Куди більш повний опис є тут.

Натискання завжди відбувається під курсором, тому передавати координати сюди марно, треба лише переміститися в потрібну точку до того, як натискати. Ось список констант, що визначають, що саме ми хочемо натиснути:

Частина з них точно вже є у Вашій версії Delphi в модулі "Windows", тут вони наведені на випадок, якщо чогось не вистачає.

Увага! Не забувайте відпускати натиснуті кнопки!

Разом, що ми маємо: в dwFlags визначаємо дію; dx і dy це 0; в dwData код Х-кнопки, яку натискаємо, інакше 0; dwExtraInfo теж 0. Можливі значення коду X-кнопки:

Прокрутка коліщатка

Користуючись все тієї ж функцією mouse_event можна прокручувати коліщатко. Для цього є дві константи:

Застосування таке: dwFlags - код події прокрутки; dx і dy - 0; dwData - величина, на яку прокручуємо; dwExtraInfo - 0. Значення dwData може бути як кратно WHEEL_DELTA:

Що зробить прокрутку в три кроки коліщатка; так і може бути куди менше, наприклад:

Що зробить прокрутку в 1/5 кроку. Знак dwData визначає напрямок прокрутки: позитивне означає рух вгору, обертання від користувача; негативне - вниз, обертання на користувача. Однак, через те, що у цього параметра вказано беззнаковий тип DWORD (діапазон 0..4294967295), то, якщо у Вас не вийшло використовувати негативні значення, - скористайтеся приведенням типів до DWORD:

приховування курсора

Спеціальна функція ShowCursor з модуля "Windows", як параметр приймає стан, яке повинен прийняти курсор (True - видимий, False - невидимий):

Приклад 1: Перемістити курсор 120 пікселів вправо і на 40 вгору.

Приклад 2: Натиснути ліву кнопку, якщо курсор розташований строго в лівому нижньому кутку.

До речі, код можна трохи вкоротити, передавши разом натиснення і відпуск в якості одного дії:

Не знаю, чи передбачено це, але у мене прекрасно працює

Матеріал цієї сторінки доступний на умовах ліцензії CC BY-SA 4.0

Схожі статті