Коды горячих клавиш delphi. Клавиши навигации по коду в Delphi. Комбинации клавиш в Delphi - горячие клавиши в среде программирования Delphi
Начиная с самого рассвета компьютерной
промышленности, клавиатура была первичным
устройством ввода информации, и вероятнее всего
сохранит свою позицию ещё долгое время.
События клавиатуры, наряду с событиями мыши,
являются основными элементами взаимодействия
пользователя с программой. В данной статье
пойдёт речь о трёх событиях, которые позволяют
отлавливать нажатия клавиш в приложении Delphi: OnKeyDown
,
OnKeyUp
и OnKeyPress
.
Их следует отличать тремя точками за текстом элемента, что не является абсолютно необходимым, но, безусловно, хорошо следовать этому соглашению. Они отличаются треугольником справа.
- Команды: Элементы, используемые для оформления заказа для начала действия.
- Они не выделяются оптически.
- Конфигурация: элементы, используемые для выключения или включения опции.
- Включить выбор оптически выделяется галочкой слева от элемента.
- Диалоги: записи, которые вызывают появление диалогового окна.
Для получения ввода с клавиатуры, приложения
Delphi могут использовать два метода. Самый простой
способ, это воспользоваться одним из
компонентов, автоматически реагирущем на
нажатия клавиш, таким как Edit. Второй способ
заключается в создании процедур в форме, которые
будут обрабатывать нажатия и отпускания клавиш.
Эти обработчики могут обрабатывать как нажатия
одиночных клавиш, так и комбинаций. Итак, вот эти
события:
OnKeyDown
- вызывается, когда на клавиатуре
нажимается любая клавиша. OnKeyUp
- вызывается,
когда любая клавиша на клавиатуре отпускается. OnKeyPress
- вызывается, когда нажимается клавиша,
отвечающая за определённый ASCII символ.
Клавиши редактирования в 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 .
Необходимо также проявлять большую осторожность при изменении описаний во время выполнения. Например, если у вас есть опция «Показать таблицу» в меню, целесообразно изменить текст на Скрыть таблицу после того, как пользователь выберет этот элемент. Но не слишком разумно менять элементы «жестоким» способом, а не сохранять их логическое значение и изменять таблицу «Показать таблицу» для «Показать список». Для пользователей не так много запутанных действий.
Один из них, однако, скрывает пункты меню. Если вы полностью скрываете элемент, и если вы что-то время от времени повторяете, меню становится полностью непригодным. Пользователи часто ищут «попперы» только по своей позиции. Элементы меню должны быть логически разбиты на разделы. Максимальное количество элементов в одном разделе не должно превышать шести.
Фокус
Фокус, это способность получать
пользовательский ввод через мышь или клавиатуру.
Получать события от клавиатуры могут только те
объекты, которые имеют фокус. На форме активного
приложения в один момент времени может быть
активным (иметь фокус) только один компонент.
Некоторые компоненты, такие как 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
определяет, будут ли
клавиатурные события формы вызываться перед
клавиатурными событиями компонентов, так как
форма может получать все нажатия клавиш,
предназначенные для компонента имеющего в
данный момент фокус.
Это принципиально неудобно для пользователей, у которых нет подключения к Интернету. Этот тип защиты очень часто сочетается с защитой регистрационного номера. Как только вы введете правильный регистрационный номер, ограничение будет отменено. Опять же, это очень ненадежный и легко преодолеваемый тип защиты. Этот тип защиты имеет две недостатки. Во-первых, нетрудно найти код, который проверяет, истекло ли время ожидания. В основном, программа скрывает время, когда оно было установлено в реестре или какой-либо файл на вашем жестком диске.
Вторая проблема заключается в том, что программа должна каким-то образом получить текущую дату и время, поэтому не сложно найти эту процедуру и изменить возвращаемое значение или изменить инструкцию перехода, которая должна быть где-то там. Большая ошибка заключалась бы в использовании такой проверки.
Чтобы перехватить нажатия клавиш на уровне формы, до того как они будут переданы компонентам на форме, необходимо установить свойство KeyPreview в True. После этого компонент как и раньше будет получать события, однако сперва они будут попадать в форму, чтобы дать возможность программе разрешить или запретить ввод различных символов.
Например, резидентная защита пробной версии антивируса работает только некоторое время, прежде чем она выключится, а затем потребуется перезапустить систему. Это очень сильная защита и преодоление, это очень сложно. В ключевом файле программа запуска программы или программы декомпрессии может запускаться при запуске. Защита ключевых файлов также может сочетаться с ограничениями времени, которые будут отменены при загрузке ключевого файла.
Если эта защита запрограммирована администрацией, она почти непреодолима. Взломщик должен либо идеально имитировать аппаратный ключ с помощью программных средств, либо должен был бы начать делать аппаратный ключ. В первом случае вы можете эффективно защитить себя, а в последнем случае взломщик скопирует структуру аппаратного ключа и создаст такую же сумму денег, что и покупка юридической версии программы. Различия между ними минимальны.
Допустим, У Вас на форме есть несколько компонентов 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, созданным для обозначения диалекта этого языка.
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).
Элементы дополнительного характера можно структурировать по желанию пользователя. Однако, даже в этом случае существует необходимость соблюдения некоторых условий относительно порядка написания копирайта, имени модуля, условных директив и определений, директив компилятора и файлов включения, определения подключения. Именно в таком порядке должны располагаться перечисленные выше элементы.