Delphi коды. Delphi - Делфи коды. Клавиши редактирования в Delphi
Начиная с самого рассвета компьютерной
промышленности, клавиатура была первичным
устройством ввода информации, и вероятнее всего
сохранит свою позицию ещё долгое время.
События клавиатуры, наряду с событиями мыши,
являются основными элементами взаимодействия
пользователя с программой. В данной статье
пойдёт речь о трёх событиях, которые позволяют
отлавливать нажатия клавиш в приложении Delphi: OnKeyDown
,
OnKeyUp
и OnKeyPress
.
Коды виртуальных клавиш идентифицируют различные виртуальные ключи. Виртуальные ключи в основном состоят из фактических клавиш клавиатуры, но также включают в себя «виртуальные» элементы, такие как три кнопки мыши. Как перевести код виртуального ключа в символ.
Перехват ввода клавиатуры для элементов управления, которые не могут получить фокус ввода. Поэтому почему бы не использовать их для навигации между полями. Коды перечислены в цифровом порядке. Однако, за кулисами, это совершенно новый инструмент. Параметры редактора, используемые для каждого файла, зависят от расширения открытого файла. Эти параметры можно настроить на новой странице «Параметры источника» в диалоговом окне «Свойства редактора», отображаемой на рисунке. Еще одна особенность редактора, шаблоны кода, теперь зависит от языка.
Для получения ввода с клавиатуры, приложения
Delphi могут использовать два метода. Самый простой
способ, это воспользоваться одним из
компонентов, автоматически реагирущем на
нажатия клавиш, таким как Edit. Второй способ
заключается в создании процедур в форме, которые
будут обрабатывать нажатия и отпускания клавиш.
Эти обработчики могут обрабатывать как нажатия
одиночных клавиш, так и комбинаций. Итак, вот эти
события:
OnKeyDown
- вызывается, когда на клавиатуре
нажимается любая клавиша. OnKeyUp
- вызывается,
когда любая клавиша на клавиатуре отпускается. OnKeyPress
- вызывается, когда нажимается клавиша,
отвечающая за определённый ASCII символ.
В контекстном меню редактора также есть команда «Страницы», в которой перечислены все доступные страницы в подменю. Вы также можете открыть несколько окон редактора, каждый из которых содержит несколько вкладок. Это единственный способ увидеть исходный код двух блоков рядом друг с другом.
Комбинации клавиш в Delphi - горячие клавиши в среде программирования Delphi
Несколько параметров влияют на редактор, как вы можете видеть в диалоговом окне «Свойства редактора» на рисунке. Однако вам нужно перейти на страницу «Настройки» диалогового окна «Параметры среды», чтобы установить функцию автосохранения редактора. Этот параметр заставляет редактор сохранять все файлы исходного кода при каждом запуске программы, предотвращая потерю данных в случае плохой сбой программы в отладчике.
Теперь самое время посмотреть, как выглядят в программе заголовки обработчиков:
procedure TForm1.FormKeyDown (Sender: TObject; var procedure TForm1.FormKeyUp (Sender: TObject; var Key: Word; Shift: TShiftState); ... procedure var Key: Char); |
Все события имеют один общий параметр, обычно называемый Key . Этот параметр используется для передачи кода нажатой клавиши. Параметр Shift (в процедурах OnKeyDown и OnKeyUp), указывает на то, была ли нажата клавиша в сочетании с Shift , Alt , и Ctrl .
Обратите внимание, что страница справки, описывающая сочетания клавиш, доступна в целом, только если вы посмотрите на элемент индекса ярлыков. Вся информация обновляется сразу же после ввода текста в редакторе. Вы также можете изменять имена переменных, свойств и методов непосредственно в проводнике кода. У вас есть полный контроль над макетом информации. И вы можете уменьшить глубину дерева, обычно отображаемого в это окно, настроив Проводник кода.
Вы можете настроить проводник кода, используя соответствующую страницу параметров среды, как показано на рисунке. Рисунок 5: Вы можете настроить проводник кода в диалоговом окне «Параметры среды». Поскольку каждый элемент дерева проводника кода имеет значок, обозначающий его тип, размещение по полю и методу кажется менее важным, чем организация с помощью спецификатора доступа. Вы можете использовать «Навигация по модулю», чтобы перейти от определения метода или процедуры к ее полному определению.
Фокус
Фокус, это способность получать
пользовательский ввод через мышь или клавиатуру.
Получать события от клавиатуры могут только те
объекты, которые имеют фокус. На форме активного
приложения в один момент времени может быть
активным (иметь фокус) только один компонент.
Некоторые компоненты, такие как TImage, TPaintBox, TPanel и TLabel не могут получать фокус, другими словами, это компоненты, наследованные от TGraphicControl. Так же не могут получать фокус невидимые компоненты, такие как TTimer.
Переместите указатель мыши над символом в редакторе, а всплывающая подсказка покажет вам, где объявлен идентификатор. Эта функция может быть особенно важна для отслеживания идентификаторов, классов и функций в приложении, которое вы пишете, а также для ссылки на исходный код библиотеки. Однако реальный бонус этой функции заключается в том, что вы можете превратить ее в навигационную помощь, называемую просмотром кода. Эти ссылки отображаются с синим цветом и подчеркиванием, которые типичны для ссылок в веб-браузерах, и указатель меняется на руку, когда он расположен на ссылке.
OnKeyDown, OnKeyUp
События OnKeyDown и OnKeyUp обеспечивают самый низкий
уровень ответа клавиатуры. Обработчики OnKeyDown и
OnKeyUp могут реагировать на все клавиши клавиатуры,
включая функциональные и комбинации с клавишами
Shift, Alt, и Ctrl.
События клавиатуры - не взаимоисключающие. Когда пользователь нажимает клавишу, то генерируются два события OnKeyDown и OnKeyPress, а когда отпускает, то только одно: OnKeyUp. Если пользователь нажмёт одну из клавиш, которую OnKeyPress не сможет определить, то будет сгенерировано только одно событие OnKeyDown, а при отпускании OnKeyUp.
Эта функция генерации кода применяется к общим методам, методам обработки сообщений и свойствам. Например, если вы введете следующий код в объявлении класса. Самым важным и полезным примером завершения класса является автоматическая генерация кода для поддержки свойств, объявленных в классах. Например, если вы вводите класс.
Вы найдете больше в свойствах в следующей главе. В совокупности методы анализа кода основаны на постоянном анализе фона как исходного кода, который вы пишете, так и исходного кода системных единиц, на которые ссылается исходный код. Проникновение кода состоит из пяти возможностей: завершение кода, шаблоны кода, параметры кода, оценка выражения всплывающей подсказки и прорисовка значков подсказки. Эта последняя функция уже была рассмотрена в разделе «Просмотр в редакторе»; остальные четыре обсуждаются в следующих подразделах.
OnKeyPress
OnKeyPress возвращает различные значения ASCII для "g" и
"G,". Однако, OnKeyDown и OnKeyUp не делают различия между
верхним и нижним регистром.
Параметры Key и Shift
Параметр Key можно изменять, чтобы приложение
получило другой код нажатой клавиши. Таким
образом можно ограничивать набор различных
символов, которые пользователь может ввести с
клавиатуры. Например разрешить вводить только
цифры. Для этого добавьте в обработчик события
OnKeyPress следующий код и установите KeyPreview в True (см.
ниже).
Вы можете включать, отключать и настраивать каждую из этих функций на странице «Анализ кода» диалогового окна «Свойства редактора». По завершении кода вы можете выбрать свойство или метод объекта, просто просмотрев его в списке или набрав его начальные буквы. Кодовое завершение также позволяет вам искать правильное значение в задании присваивания. Когда вы начинаете вводить текст, список фильтрует его содержимое в соответствии с начальной частью элемента, который вы вставили. В списке завершения кода используются цвета и более подробная информация, чтобы помочь вам различать разные элементы.
if Key in ["a".."z"] + ["A".."Z"] then Key:=#0 |
Это выражение проверяет, содержит ли параметр
Key символы нижнего регистра ("a".."z") и символы
верхнего регистра ("A".."Z"). Если так, то в параметр
заносится значение нуля, чтобы предотвратить
ввод в компонент Edit (например).
В Windows определены специальные константы для
каждой клавиши. Например, VK_RIGHT соответствует
коду клавиши для правой стрелки.
Еще одна особенность заключается в том, что в случае функций с параметрами в сгенерированный код включаются скобки, а подсказка списка параметров отображается немедленно. Просто выберите один из они добавят надлежащий метод в объявление класса. В этом конкретном случае список завершения кода допускает множественный выбор. Кодовое завершение включает в себя некоторые дополнительные функции, которые легко обнаружить. Когда вы вызываете его по пустой строке, список также включает символы из общих единицы, которые еще не включены в инструкцию использования текущего устройства.
Чтобы получить состояния специальных клавиш, таких как TAB или PageUp можно воспользоваться API функцией GetKeyState . Клавиши состояния могут находиться в трёх состояниях: отпущена, нажата, и включена. Если старший бит равен 1, то клавиша нажата, иначе отпущена. Для проверки этого бита можно воспользоваться API функцией HiWord . Если младший бит равен 1, то клавиша включена. Вот пример получения сосотояния специальной клавиши:
Вы можете добавить настраиваемые шаблоны кода, чтобы вы могли создавать свои собственные ярлыки для часто используемых блоков кода. Символ вертикальной линии указывает позицию в исходном коде, где курсор будет в редакторе после расширения шаблона. Вы должны выбрать позицию, в которой вы хотите начать печатать, чтобы завершить код, сгенерированный шаблоном. Хотя шаблоны кода могут казаться, что сначала соответствуют языковым ключевым словам, они являются более общим механизмом.
Просто введите имя функции или метода и открытую скобку, а имена и типы параметров появятся сразу во всплывающем подсказке. В качестве дополнительной помощи текущий параметр отображается жирным шрифтом. Выражение выражения всплывающей подсказки - это функция отладки. Он показывает вам значение идентификатора, свойства или выражения, которое находится под курсором мыши. В случае выражения вам обычно нужно выбрать его в редакторе, а затем переместить указатель мыши над выделенным текстом.
if HiWord(GetKeyState(vk_PageUp)) <> 0 then ShowMessage("PageUp - DOWN") else ShowMessage("PageUp - UP"); |
В событиях OnKeyDown и OnKeyUp, Key является беззнаковым двухбайтовым (Word) значением, которое представляет виртуальную клавишу Windows. Для получания значения символа можно воспользоваться функцией Chr. В событии OnKeyPress параметр Key является значением Char, которое представляет символ ASCII.
События OnKeyDown и OnKeyUp имеют параметр Shift с типом TShiftState. В Delphi тип TShiftState определён как набор флагов, определяющих состояние Alt, Ctrl, и Shift при нажатии клавиши.
В редакторе есть еще несколько клавиш быстрого доступа, которые зависят от стиля редактора, который вы выбрали. Вот несколько из менее известных ярлыков. Полезность закладок в редакторе ограничена фактами, что новая закладка может переопределить существующую и что закладки не являются постоянными. Количество используемых пробелов устанавливается с помощью параметра «Отступ блока» на странице «Редактор» диалогового окна «Параметры редактора». Макрос записывает все операции ввода, перемещения и удаления, выполняемые в файле исходного кода. Воспроизведение макроса просто повторяет последовательность - операцию, которая может иметь мало смысла, когда вы переходите к другому файлу исходного кода. Макросы редактора весьма полезны для повторного выполнения многоступенчатых операций, таких как переформатирование исходного кода или организация данных более разборчиво в исходном коде. Диаграмма не построена автоматически.
Например, следующий код (из обработчика OnKeyUp) соединяет строку "Ctrl +" с нажатой клавишей и отображает результат в заголовке формы:
Переадресация событий
клавиатуры в форму
Клавиатурный обработчик может работать на двух
уровнях: на уровне компонентов и на уровне формы.
Свойство формы KeyPreview
определяет, будут ли
клавиатурные события формы вызываться перед
клавиатурными событиями компонентов, так как
форма может получать все нажатия клавиш,
предназначенные для компонента имеющего в
данный момент фокус.
Клавиши навигации по коду в Delphi
Хорошо, что вы можете устанавливать свойства, просто рисуя стрелки между компонентами. Эта ситуация изображена на рисунке. Рисунок 6: Диаграмма показывает отношения между компонентами. Как вы можете видеть, настройка свойств направлена: если вы перетаскиваете линию отношений свойств из редактирования на метку, вы в конечном итоге пытаетесь использовать метку в качестве значения свойства поля редактирования. Поскольку это невозможно, вы увидите сообщение об ошибке, указывающее на проблему, и предложите подключить компоненты в обратном порядке.
Чтобы перехватить нажатия клавиш на уровне формы, до того как они будут переданы компонентам на форме, необходимо установить свойство KeyPreview в True. После этого компонент как и раньше будет получать события, однако сперва они будут попадать в форму, чтобы дать возможность программе разрешить или запретить ввод различных символов.
Хотя вы можете использовать представление «Диаграмма» для установления отношений, его основная роль - документировать ваш дизайн. По этой причине важно иметь возможность печатать содержимое этого представления. Вы можете настроить вывод разными способами. Рисунок 7: Параметры печати для диаграммы.
Все эти файлы, очевидно, бесполезны во время выполнения. Сегодняшний первый совет, который мы покажем, представляет собой довольно простой и довольно интересный эффект с иконкой приложения. Конечно, каждое приложение обычно имеет масштабированную иконку в своем главном окне на панели субтитров рядом с названием окна. Один и тот же значок можно увидеть и на главной панели. В довольно простой форме мы можем изменить значок, и мы можем легко создать небольшую анимацию, используя соответствующие значки.
Допустим, У Вас на форме есть несколько компонентов Edit и процедура Form.OnKeyPress выглядит следующим образом:
procedure TForm1.FormKeyPress (Sender: TObject; var Key: Char); begin if Key in ["0".."9"] then Key:= #0 end ; |
Если один из компонентов Edit имеет фокус и свойство KeyPreview установлено в False, то этот код не будет выполнен - другими словами, если пользователь нажмёт клавишу "5", то в компоненте Edit, имеющем фокус, появится символ "5".
Сначала мы сначала сохраним используемые значки. Вы можете использовать практически любой компонент, который может удерживать изображение. После этого просто убедитесь, что значок изменяется регулярно, например, мы можем использовать таймер. Мы покажем вам простое решение для замены двух значков. Теперь вам просто нужно установить соответствующий интервал таймера и сделать небольшую анимацию. Очень простой наконечник, поэтому без каких-либо больших интродукций. Практическое использование может быть не столь распространенным, однако эта функция иногда может быть полезна.
Однако, если KeyPreview установлено в True, то событие формы OnKeyPress будет выполнено до того, как компонент Edit увидит нажатую клавишу. Поэтому, если пользователь нажмёт клавишу "5", то в Key будет подставлено нулевое значение, предотвращая тем самым попадание числовых символов в Edit.
ПРИЛОЖЕНИЕ: Таблица кодов виртуальных клавиш.
Symbolic constant name |
Value (hexadecimal) |
Keyboard (or mouse) equivalent |
---|---|---|
VK_LBUTTON | 01 | Left mouse button |
VK_RBUTTON | 02 | Right mouse button |
VK_CANCEL | 03 | Control-break processing |
VK_MBUTTON | 04 | Middle mouse button (three-button mouse) |
VK_BACK | 08 | BACKSPACE key |
VK_TAB | 09 | TAB key |
VK_CLEAR | 0C | CLEAR key |
VK_RETURN | 0D | ENTER key |
VK_SHIFT | 10 | SHIFT key |
VK_CONTROL | 11 | CTRL key |
VK_MENU | 12 | ALT key |
VK_PAUSE | 13 | PAUSE key |
VK_CAPITAL | 14 | CAPS LOCK key |
VK_ESCAPE | 1B | ESC key |
VK_SPACE | 20 | SPACEBAR |
VK_PRIOR | 21 | PAGE UP key |
VK_NEXT | 22 | PAGE DOWN key |
VK_END | 23 | END key |
VK_HOME | 24 | HOME key |
VK_LEFT | 25 | LEFT ARROW key |
VK_UP | 26 | UP ARROW key |
VK_RIGHT | 27 | RIGHT ARROW key |
VK_DOWN | 28 | DOWN ARROW key |
VK_SELECT | 29 | SELECT key |
VK_PRINT | 2A | PRINT key |
VK_EXECUTE | 2B | EXECUTE key |
VK_SNAPSHOT | 2C | PRINT SCREEN key |
VK_INSERT | 2D | INS key |
VK_DELETE | 2E | DEL key |
VK_HELP | 2F | HELP key |
30 | 0 key | |
31 | 1 key | |
32 | 2 key | |
33 | 3 key | |
34 | 4 key | |
35 | 5 key | |
36 | 6 key | |
37 | 7 key | |
38 | 8 key | |
39 | 9 key | |
41 | A key | |
42 | B key | |
43 | C key | |
44 | D key | |
45 | E key | |
46 | F key | |
47 | G key | |
48 | H key | |
49 | I key | |
4A | J key | |
4B | K key | |
4C | L key | |
4D | M key | |
4E | N key | |
4F | O key | |
50 | P key | |
51 | Q key | |
52 | R key | |
53 | S key | |
54 | T key | |
55 | U key | |
56 | V key | |
57 | W key | |
58 | X key | |
59 | Y key | |
5A | Z key | |
VK_NUMPAD0 | 60 | Numeric keypad 0 key |
VK_NUMPAD1 | 61 | Numeric keypad 1 key |
VK_NUMPAD2 | 62 | Numeric keypad 2 key |
VK_NUMPAD3 | 63 | Numeric keypad 3 key |
VK_NUMPAD4 | 64 | Numeric keypad 4 key |
VK_NUMPAD5 | 65 | Numeric keypad 5 key |
VK_NUMPAD6 | 66 | Numeric keypad 6 key |
VK_NUMPAD7 | 67 | Numeric keypad 7 key |
VK_NUMPAD8 | 68 | Numeric keypad 8 key |
VK_NUMPAD9 | 69 | Numeric keypad 9 key |
VK_SEPARATOR | 6C | Separator key |
VK_SUBTRACT | 6D | Subtract key |
VK_DECIMAL | 6E | Decimal key |
VK_DIVIDE | 6F | Divide key |
VK_F1 | 70 | F1 key |
VK_F2 | 71 | F2 key |
VK_F3 | 72 | F3 key |
VK_F4 | 73 | F4 key |
VK_F5 | 74 | F5 key |
VK_F6 | 75 | F6 key |
VK_F7 | 76 | F7 key |
VK_F8 | 77 | F8 key |
VK_F9 | 78 | F9 key |
VK_F10 | 79 | F10 key |
VK_F11 | 7A | F11 key |
VK_F12 | 7B | F12 key |
VK_F13 | 7C | F13 key |
VK_F14 | 7D | F14 key |
VK_F15 | 7E | F15 key |
VK_F16 | 7F | F16 key |
VK_F17 | 80H | F17 key |
VK_F18 | 81H | F18 key |
VK_F19 | 82H | F19 key |
VK_F20 | 83H | F20 key |
VK_F21 | 84H | F21 key |
VK_F22 | 85H | F22 key |
VK_F23 | 86H | F23 key |
VK_F24 | 87H | F24 key |
VK_NUMLOCK | 90 | NUM LOCK key |
VK_SCROLL | 91 | SCROLL LOCK key |
VK_LSHIFT | A0 | Left SHIFT key |
VK_RSHIFT | A1 | Right SHIFT key |
VK_LCONTROL | A2 | Left CONTROL key |
VK_RCONTROL | A3 | Right CONTROL key |
VK_LMENU | A4 | Left MENU key |
VK_RMENU | A5 | Right MENU key |
VK_PLAY | FA | Play key |
VK_ZOOM | FB | Zoom key |
Не секрет, что современный язык программирования Делфи был основан на более распространённом Pascal и некоторое время не имел самостоятельности. Тем не менее, сейчас Delphi является полноценным развивающимся языком программирования, тогда как ранее он был всего лишь производной Pascal, созданным для обозначения диалекта этого языка.
Под этим, возможно, с совершенно понятным заголовком, нечего делать, чем программируемое перемещение мыши в рабочей области с возможностью «щелчка» правой или левой кнопкой. В простом примере мы покажем вам активацию кнопки «Пуск». Поэтому он обнаруживается с использованием экрана.
Увеличьте размер изображения и снова вычитайте около 20 пикселей, чтобы получить кнопку «Пуск». Затем мы можем «щелкнуть» левую кнопку. Конечно, этот пример будет работать только в том случае, если у вас есть кнопка «Домой» с кнопкой «Пуск» в «классической» позиции в нижней части экрана, возможно, мне не нужно напоминать вам. Как только мы немного коснулись основной панели, мы покажем вам, как можно отключить часы. Простой параметр определяет, показывать ли часы.
Delphi, оснащённый собственной средой программирования, имеет все необходимые условия и отличительные черты самостоятельного языка, в том числе и персональные исходные коды. К слову, Delphi коды размещены и публично доступны на странице разработчиков, сопровождаемые необходимыми комментариями относительно возможности изменения исходных кодов и создания собственных приложений при помощи Delphi.
Отображение дополнительных окон на панели задач. Вы можете обнаружить, что это неприятно, когда вторичные окна вашего приложения сводятся к нижнему левому углу рабочего стола. Мало того, что это не выглядит красиво, но возобновление окна немного неудобно.
Клавиши общей навигациив Delphi
Вы можете использовать следующую функцию для определения частоты процессора. Результат не будет абсолютно точным, но если вы сделаете в среднем несколько результатов, вы окажетесь достаточно близко к реальности. Например, вы можете красть своих младших братьев и сестер или детей с помощью небольшого приложения, которое будет постоянно напоминать им, как долго они уже сидят на этом компьютере. В следующий раз мы рассмотрим сочетания клавиш, узнаем, как запустить приложение в полноэкранном режиме, как убедиться, что работает только один экземпляр программы и другие детали.
Исходный код Delphi можно разделить на модули и файлы проекта. Эти элементы подчинены одинаковым соглашениям. Файлы проекта Delphi имеют расширения DPR . Такие файлы разработаны как главные исходные файлы для всех проектов. Все модули, которые могут использоваться в проекте, всегда имеют расширение PAS . Так же в проектах могут использоваться и дополнительные файлы (например, командные, html, DLL и так далее). Такие файлы зачастую очень важны, но к нашей теме имеют совсем малое отношение.
Для того, чтобы оперироваться исходными файлами, над ними, без сомнения, необходимо производить какие-то важные действия. К таким действиям можно отнести задание имени или переименование. Для языка Delphi предусмотрена большая длина имени файла, что делает работу значительно удобнее. Если в названии файла используется несколько слов, для написания первой буквы каждого слова следует использовать заглавные буквы. Такой способ именования файлов называется InfixCaps или по-другому: CamelCaps .
Чтобы организовать исходные файлы, вам потребуется знать, какие элементы могут содержаться в модулях. Список таких элементов в необходимом порядке представлен ниже:
- Информация о правах (Copyright/ID);
- Имя модуля (Unit Name);
- Объявление включаемых файлов (Include files);
- Секцию интерфейса (Interface section);
- Дополнительные определения (Additional defines);
- Реализацию (Implementation)
- Объявление используемых модулей (Uses clause);
- Закрывающий оператор и точку (A closing end and a period).
Элементы дополнительного характера можно структурировать по желанию пользователя. Однако, даже в этом случае существует необходимость соблюдения некоторых условий относительно порядка написания копирайта, имени модуля, условных директив и определений, директив компилятора и файлов включения, определения подключения. Именно в таком порядке должны располагаться перечисленные выше элементы.