Головна Статті Програми 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