Робота з клавіатурою та мишею у Delphi. Таймер.
Функции Delphi при работе с мышью При работе с мышью среда Delphi позволяет: определять координаты курсора мыши; изменять местоположение курсора на экране; скрывать и отображать курсор мыши; изменять назначение кнопок мыши; имитировать нажатие кнопок. var Form1: TForm1; Mouse: TMouse; При программировании мыши можно извлекать информацию из объекта Mouse типа TMouse.
Функции работы с мышью Получение координат курсора: Скрытие и отображение курсора: var x,y:integer; begin x:=Mouse.CursorPos.X; y:=Mouse.CursorPos.Y; end; ShowCursor(bShow:LongBool); ShowCursor(false); // скрытие курсора мыши //что то делаем ShowCursor(true); // отображение курсора мыши
Функции работы с мышью Изменение положения курсора: Изменение назначения кнопок мыши: Изменение курсора мыши в программе: SetCursorPos(100,100); // этот код моментально перенесет // курсор в координаты (100;100) SwapMouseButton(true); //меняем кнопки местами SwapMouseButton(false); //восстанавливаем обратно Sceen.Cursor := crHourGlass; //изменяет курсор на часы
Функции работы с мышью Имитация нажатия кнопок мыши Для этого есть специальная функция: Mouse_Event(dwFlags, dx, dy, dwData, dwExtraInfo: DWORD); Константы, которые есть для этой функции: //код моделирует щелчок левой кнопки мыши в // координатах (20,740) SetCursorPos(20,740); Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0); //код определяет разрешение экрана (x,y:integer) X:=Screen.Width; //ширина экрана в пикселях Y:=Screen.Height; //высота экрана в пикселях
Работа с клавиатурой Для работы с клавиатурой в Delphi используется событие onKeyDown или onKeyPress. onKeyPress – заносит в переменную Key (тип Char) символьное представление нажатой клавиши. onKeyDown - заносит в переменную Key (тип Word) код нажатой клавиши Это событие есть у любого визуального компонента в Delphi. При работе с этим событием следует обращать внимание на следующий ньюанс. Фокус может находиться на любом объекте. Поэтому необходимо всегда следить за фокусом. {Процедура нажатия клавиши (на примере нажатия на форме)} procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = {здесь должен быть код клавиши} then {действие} end;
Таблица кодов клавиш клавиатуры if FontDialog1. Execute then with RichEdit1. SelAttributes do //изменение атрибутов шрифта begin Color:=FontDialog1.Font.Color; Name:=FontDialog1.Font.Name; Size:=FontDialog1.Font.Size; Style:=FontDialog1.Font.Style; end; RichEdit1.SetFocus; //перевод фокуса в компонент RichEdit1
Таблица кодов клавиш клавиатуры if FontDialog1. Execute then with RichEdit1. SelAttributes do //изменение атрибутов шрифта begin Color:=FontDialog1.Font.Color; Name:=FontDialog1.Font.Name; Size:=FontDialog1.Font.Size; Style:=FontDialog1.Font.Style; end; RichEdit1.SetFocus; //перевод фокуса в компонент RichEdit1
Работа с клавиатурой {Процедура обработки нажатия клавиши Delete (на примере нажатия на форме) в обработчике событий OnKeyDown} procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = VK_DELETE then ShowMessage('Вы нажали клавишу DELETE'); end; {Процедура обработки нажатия клавиши A(на примере нажатия на форме) в обработчике событий OnKeyPress} procedure TForm1.KeyPress(Sender: TObject; var Key: Char); begin if key = A then ShowMessage('Вы нажали клавишу DELETE'); end;
Работа с клавиатурой {Использование кнопки ENTER в обработчике событий OnKeyPress} procedure TForm1.KeyPress(Sender: TObject; var Key: Char); begin if key = #13 then {действие} end; {Нажатие сочетания клавиш Ctrl+Shift в обработчике событий OnKeyDown} procedure TForm1.FormKeyDown(Sender: TObject; var Key:Word; Shift: TShiftState); begin if (ssCtrl in Shift) and (ssshift in Shift) then {действие} end;
Работа с клавиатурой {На примере компонента Memo отслеживаем нажатие комбинации клавиш Ctrlt+Space} procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssCtrl in Shift) and (Key = VK_SPACE) then ShowMessage('Нажата комбинация клавиш Ctrl+Space'); end; {Нажатие сочетания клавиш Ctrl+Shift+D} if (ssCtrl in Shift) and (ssShift in Shift) and (Key = Ord('D')) then begin // код обработки end Переменная Shift типа TShiftState является по сути множеством и может принимать значения: (ssShift, ssAlt, ssCtrl). Хоть одно значение, хоть два, хоть все вместе.
Компонент: таймер Timer Timer (таймер). Позволяет выполнять в приложении определенные действия через заданные интервалы времени. Относится к группе System. Таймер невизуальный компонент, который может размещаться в любом месте формы. Основные свойства компонента Timer Interval Интервал времени в миллисекундах через которое срабатывает таймер. Enabled Включение/выключение компонента. Вкл – true, Выкл - false Если задать Interval = 0 или Enabled = false, то таймер перестает работать. Чтобы запустить отсчет времени надо или задать Enabled = true, если установлено положительное значение Interval, или задать положительное значение Interval, если Enabled = true. Основное событие компонента Timer OnTimer Событие, которое срабатывает через промежутки времени, заданные в свойстве Interval
Пример использования в программе {обработчик события OnTimer для таймера Timer1} procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:=TimeToStr(time); end; {TimeToStr – функция преобразования времени в строку} {Time – функция возврата текущего времени в формате ЧЧ:ММ:СС}
Пример использования в программе {обработчик события OnTimer для таймера Timer1} procedure TForm1.Timer1Timer(Sender: TObject); begin SetCursorPos(30,Screen.Height-30); Mouse_Event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Mouse_Event(MOUSEEVENTF_LEFTUP,0,0,0,0); end; Процедура открывает и закрывает меню «Пуск» через определенный интервал времени.
Пример использования в программе {Бешеная мышка(у компонента Timer свойство Interval =500)} procedure TForm1.Button7Click(Sender: TObject); begin SetCursorPos(random(Screen.Width),random(Screen.Height)); end; {Бешеный CD-ROM (у компонента Timer свойство Interval=3000)} uses..., mmsystem; var kol:integer; procedure TForm1.Timer1Timer(Sender: TObject); begin if kol=0 then begin mciSendString('Set cdaudio door open wait', nil,0, handle); kol:=1; end else begin mciSendString('Set cdaudio door closed wait', nil,0, handle); kol:=0; end;