Александр Чиртик - Программирование в Delphi. Трюки и эффекты

Тут можно читать онлайн Александр Чиртик - Программирование в Delphi. Трюки и эффекты - бесплатно ознакомительный отрывок. Жанр: comp_programming, издательство Array Издательство «Питер», год 2010. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование в Delphi. Трюки и эффекты
  • Автор:
  • Жанр:
  • Издательство:
    Array Издательство «Питер»
  • Год:
    2010
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-49807-118-3
  • Рейтинг:
    5/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Александр Чиртик - Программирование в Delphi. Трюки и эффекты краткое содержание

Программирование в Delphi. Трюки и эффекты - описание и краткое содержание, автор Александр Чиртик, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Как и все издания данной серии, эта книга адресована тем, кто хочет научиться делать с помощью уже знакомых программных пакетов новые интересные вещи. Издание будет полезно и новичкам, и опытным программистам. Автор описывает удивительные возможности, скрытые в языке, и на примерах учит читателя программистским фокусам – от «мышек-невидимок» и «непослушных окон» до воспроизведения MP3 и управления офисными программами Word и Excel из приложений Delphi. Купив эту книгу, вы пройдете непростой путь к вершинам программистского мастерства весело и интересно.

Программирование в Delphi. Трюки и эффекты - читать онлайн бесплатно ознакомительный отрывок

Программирование в Delphi. Трюки и эффекты - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Александр Чиртик
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Ограничение области перемещения указателя

С помощью несложных манипуляций можно ограничить перемещение указателя мыши определенной областью экрана (прямоугольником). Для этого используется API-функция ClipCursor. Она принимает в качестве параметра структуру TRect с координатами прямоугольника, в пределах которого может перемещаться указатель. Если ограничивающая область движения курсора заданна успешно, то функция возвращает ненулевое значение.

С функцией ClipCursor тесно связана функция GetClipCursor, позволяющая получить координаты прямоугольника, которым ограничено перемещение указателя в данный момент.

Способ использования функций ClipCursor и GetClipCursor показан в листинге 3.6.

Листинг 3.6. Ограничение области перемещения указателя

var

lastRect: TRect;

cursorClipped: Boolean = False;

procedure SetCursorRect(newRect: TRect);

begin

if not cursorClipped then

begin

//Сохраняем старую область перемещения указателя

GetClipCursor(lastRect);

//Устанавливаем ограничение на перемещения указателя

cursorClipped:= ClipCursor(Addr(newRect)) <> False;

end;

end;

procedure RestoreCursorRect();

begin

if cursorClipped then

begin

//Восстанавливаем область перемещения указателя

cursorClipped:= ClipCursor(Addr(lastRect)) = False;

end;

end;

В данном примере реализованы две функции. Первая (SetCursorRect) ограничивает перемещение указателя мыши заданной областью экрана (параметр newRect). Перед ограничением на перемещения указателя в процедуре SetCursorRect происходит сохранение области перемещения, установленной ранее, чтобы действие процедуры можно было отменить. Для отмены ограничения перемещения указателя служит вторая функция – RestoreCursorRect.

Примечание

Вообще, задание ограничения на перемещение указателя мыши не считается хорошим тоном. Потому для использования такой возможности в реальном приложении должны быть действительно веские причины.

Изменение назначений кнопок мыши

Как известно, операционная система Windows предоставляет возможность работать с компьютером широкому кругу людей. Большинство производителей манипуляторов типа «мышь» предусматривают возможность простой адаптации манипулятора под правшу или левшу. К тому же, мышь адаптировать к таким различиям намного проще, нежели выпускать манипуляторы различных типов: конструкцию изменять не надо, достаточно программно поменять функции кнопок мыши.

Способ программного изменения функций левой и правой кнопок мыши продемонстрирован в листинге 3.7.

Листинг 3.7. Изменение назначений кнопок мыши

procedure TForm1.Button1Click(Sender: TObject);

begin

//Меняем местами функции левой и правой кнопок мыши

SwapMouseButton(True);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

//Восстанавливаем функции кнопок мыши

SwapMouseButton(False);

end;

В коде листинга 3.7 не учтен тот факт, что инверсия кнопок мыши может быть изначально установлена при запуске программы (например, если за компьютером работает левша). Чтобы точно знать, была ли ранее применена инверсия к кнопкам мыши, можно использовать значение, возвращаемое функцией SwapMouseButton. Если это значение отлично от нуля, то функции кнопок мыши ранее были инвертированы.

Подсчет расстояния, пройденного указателем мыши

Далее будет рассмотрена небольшая программа, которая носит скорее познавательный, нежели практический характер. Она подсчитывает количество метров (в буквальном смысле), пройденное указателем мыши за время ее работы. Внешний вид формы приложения показан на рис. 3.1.

Рис 31 Программа для измерения пробега указателя мыши Использование этой - фото 31

Рис. 3.1. Программа для измерения пробега указателя мыши

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

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

Таблица 3.1.Параметры элементов управления формы, показанной на рис. 3.1
В коде листинга 38 объявляются переменные члены класса TForm1 и методы - фото 32

В коде листинга 3.8 объявляются переменные (члены класса TForm1) и методы, добавленные вручную.

Листинг 3.8. Форма для измерения пробега указателя

type

TForm1 = class(TForm)

...

private

isUp dating: Boolean; //Если равен False, то показания в txtDistance

//не обновляются

lastPos: TPoint; //Координаты указателя во время прошлого замера

distance: Real; //Пройденное расстояние в пикселах

procedure StartUpdating();

procedure StopUpdating();

procedure ShowDistance();

end;

Суммарное расстояние в пикселах, пройденное указателем, сохраняется в переменной distance. Ниже представлен способ перевода этого расстояния в метры (листинг 3.9).

Листинг 3.9. Перевод расстояния в метры с учетом масштаба

procedure TForm1.ShowDistance();

var

scale: Real;

distanceMetters: Real;

begin

//Пересчитываем текущий пробег в метры и показываем его

//в текстовом поле

//..определяем масштаб для перевода измерений в метры

scale:= 0.001 * StrToInt(txtWidth.Text) / Shape1.Width;

//..подсчитываем расстояние с учетом масштаба

distanceMetters:= scale * distance;

//..округляем до трех знаков (мм) и показываем

distanceMetters:= Int(distanceMetters * 1000) * 0.001;

txtDistance.Text:= FloatToStr(distanceMetters);

end;

Главная процедура приложения – обработчик для таймера Timer1. Таймер срабатывает с максимальной для него частотой (около 18 раз в секунду). Текст обработчика Timer1Timer приведен в листинге 3.10.

Листинг 3.10. Подсчет разницы между положениями указателя мыши

procedure TForm1.Timer1Timer(Sender: TObject);

var

curPos: TPoint;

delta: Real;

begin

if (curPos.X <> lastPos.X) or (curPos.Y <> lastPos.Y) then

begin

GetCursorPos(curPos);

//Вычисляем разницу между текущим и прошлым положением мыши

delta:= Sqrt(Sqr(curPos.X – lastPos.X) + Sqr(curPos.Y – lastPos.Y));

distance:= distance + delta;

//Не забываем сохранить новые координаты указателя

lastPos:= curPos;

if isUpdating then

begin

//Обновим показания в текстовом поле

ShowDistance();

end;

end;

end;

Из данного листинга видно, что обновление показаний происходит при истинном (True) значении переменной isUpdating. Значение этой переменной устанавливается в False во время изменения масштаба, чтобы во время ввода значений в текстовые поля не выводились неправильные цифры (листинг 3.11).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


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

Александр Чиртик - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование в Delphi. Трюки и эффекты отзывы


Отзывы читателей о книге Программирование в Delphi. Трюки и эффекты, автор: Александр Чиртик. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x