Bazaprogram.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Код backspace delphi

Коды клавиш Delphi

Таблица кодов клавиш, которыми можно пользоваться при проверке параметра Key в обработчиках событий OnKeyDown и OnKeyUp :

Клавиша

Дес.

число

Шест.

число

Символическое

имя

Сравнение по

функции ordF1112$70VK_F1F2113$71VK_F2F3114$72VK_F3F4115$73VK_F4F5116$74VK_F5F6117$75VK_F6F7118$76VK_F7F8119$77VK_F8F9120$78VK_F9F10121$79VK_F10пробел32$20VK_SPACEBackSpace8$8VK_BACKTab9$9VK_TABEnter13$0DVK_RETURNShift16$10VK_SHIFTCtrl17$11VK_CONTROLAlt18$12VK_MENUCapsLock20$14VK_CAPITALEsc27$1BVK_ESCAPEInsert45$2DVK_INSERTPageUp33$21VK_PRIORPageDown34$22VK_NEXTEnd35$23VK_ENDHome36$24VK_HOMEСтрелка назад37$25VK_LEFTСтрелка вверх38$26VK_UPСтрелка вперед39$27VK_RIGHTСтрелка вниз40$28VK_DOWNDelete46$2EVK_DELETEPrintScreen44$2CVK_SNAPSHOTScrollLock145$91VK_SCROLLPause19$13VK_PAUSENumLock144$90VK_NUMLOCK0,)48$30Ord(‘0’)1!49$31Ord(‘1’)2@50$32Ord(‘2’)3#51$33Ord(‘3’)4$52$34Ord(‘4’)5%53$35Ord(‘5’)6^54$36Ord(‘6’)7&55$37Ord(‘7’)8*56$38Ord(‘8’)9(57$39Ord(‘9’)`

192$C0-_189$BD=+187$BB[ <219$DB]>221$DD:;186$BA‘”222$DE|220$DC,190$BE/?191$BFA a65$41Ord(‘A’)B b66$42Ord(‘B’)С с67$43Ord(‘С’)D d68$44Ord(‘D’)E e69$45Ord(‘E’)F f70$46Ord(‘F’)G g71$47Ord(‘G’)H h72$48Ord(‘H’)I i73$49Ord(‘I’)J j74$4AOrd(‘J’)K k75$4BOrd(‘K’)L l76$4COrd(‘L’)M m77$4DOrd(‘M’)N n78$4EOrd(‘N’)O o79$4FOrd(‘O’)P p80$50Ord(‘P’)Q q81$51Ord(‘Q’)R r82$52Ord(‘R’)S s83$53Ord(‘S’)T t84$54Ord(‘T’)U u85$55Ord(‘U’)V v86$56Ord(‘V’)W w87$57Ord(‘W’)X x88$58Ord(‘X’)Y y89$59Ord(‘Y’)Z z90$5AOrd(‘Z’)

Правая клавиатура при выключенной клавише NumLock:

Код backspace delphi

Этот урок содержит ответ на вопрос в одном из комментариев. Вот как он был сформулирован:

Иван, добавлено 21.04.10, 16:02:29
Привет. Я хочу сделать так, чтобы при вводе так сказать пароля в окно edit, выводились звездочки, но звездочками не значились. Т.е. ввел 50, при нажатии «Ок» к примеру, у меня все было нормально. Как бы пароль принят. Я пробовал пример и мне интересно, за что отвечает » Pass:=Pass+Key; «. Что это действие выполняет. И где и каким типом объявлена переменная Pass.
Ответ: Для того чтобы при вводе пароля вместо вводимых символов появлялись звёздочки, нужно переопределять переменную Key в обработчике OnKeyPress. Она имеет тип Char (т.е. символ):
Key:=’*’;
Предварительно нужно сохранить вводимый символ в предварительно обнулённой глобальной переменной Pass типа String:
Pass:=Pass+Key;
Таким образом, обработчик будет выглядеть так:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Pass:=Pass+Key;
Key:=’*’;
end;

В дальнейшем на совпадение с паролем нужно анализировать переменную Pass.

Иван, добавлено 21.04.10, 22:45:56
Понятно. Спасибо. Но из этого вытекает другой вопрос. При наборе текста выводятся звездочки, это отлично, т.к. и хотели именно этого, но если после ввода чего-то в edit мне захотелось стереть то, что написал, клавишей «Backspace», то вместо стирания происходит ввод. И это видно по тому, что ничего не стирается, а звездочки увеличиваются.
Ответ: Для решения этой задачи нам нужно отлавливать нажатие клавиши «Backspace«. Но обработчик OnKeyPress обрабатывает только нажатие клавиш с символами. Значит, нужно воспользоваться обработчиком OnKeyDown или OnKeyUp. В них переменная Key имеет тип Word, то есть число. Клавиша «Backspace» кодируется числом 8. Код любой клавиши можно узнать и без справочников, выполнив в одном из этих обработчиков:

Читать еще:  Отступ текста сверху css

Caption:=IntToStr(Key); //Код клавиши выводится в заголовок Формы

Итак, при нажатии «Backspace» нужно стирать по последнему символу и в Edit, и в Pass:

if(Key=8) then
begin
Edit1.Text:=copy(Edit1.Text, 1, Length(Edit1.Text)-1);
Pass:=copy(Pass, 1, Length(Pass)-1); //На самом деле, здесь отнимать нужно 2, далее увидите сами!
end;

Правда, выясняется, что при этом всё равно происходит ввод. Следовательно, нужно вообще запретить ввод в Edit через обработчик OnKeyPress, присвоив переменной Key пустой символ #0, а менять Edit здесь же. Далее, возникает следующая проблема: при изменении в Edit курсор перемещается в начало. Значит, нужно самим перемещать его в конец! Вот что получилось в итоге:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Pass:=Pass+Key;
Key:=#0;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if(Key=8) then
begin
Edit1.Text:=copy(Edit1.Text, 1, Length(Edit1.Text)-1);
Pass:=copy(Pass, 1, Length(Pass)-2); //Да, здесь именно минус 2, попробуйте сами, отнимите 1!
end
else Edit1.Text:=Edit1.Text+’*’;
Edit1.SelStart:=Length(Edit1.Text); //Перемещение курсора в конец
Caption:=Pass; //Просто проверка, в реальной программе удалить
end;

Однако, при нажатии некоторых служебных клавиш наш Edit меняется. Чтобы этого не происходило, нужно коды этих клавиш собрать во множество, и менять Edit только если Key не принадлежит этому множеству. Вот как объявить множество:

var SlaveKey: set of 9..123;

Вот какие коды в него включить (если какие забыл, добавьте!):

SlaveKey:=[9, 13, 16..20, 27, 33..40, 45..46, 112..123];

Вот где проверять:

else if (not(Key in SlaveKey)) then Edit1.Text:=Edit1.Text+’*’;

Однако замечаем, что при нажатии Escape (Esc, код 27) переменная Pass меняется, Edit нет. Исправляем здесь:

Теперь последний символ можно стереть не только нажатием Backspace, но и Escape. Это нам не мешает.

Эти принципы использованы в демонстрационной программе, предоставляющей по паролю доступ к редактированию текста. Её можно скачать, и использовать модуль проверки пароля в своих проектах.

Необходимо сказать о том, что пароль в открытом виде хранить небезопасно, хоть в файле на диске, хоть в самой программе. Стоит открыть любой файл или даже запароленную программу простым Windows-блокнотом, и сохранённый пароль можно легко отыскать. Поэтому перед сохранением пароль шифруют функцией необратимого шифрования — то есть, зная зашифрованный пароль, исходную форму восстановить невозможно. Для шифрования часто применяют хеш-функцию md5, которая реализована и в Delphi:

function md5(s: string): string;
begin
Result := »;
with TIdHashMessageDigest5.Create do
try
Result := AnsiLowerCase(AsHex(HashValue(s)));
finally
Free;
end;
end;

Для работы этой функции необходимо добавить в список используемых модулей модуль IdHashMessageDigest из пакета Indy. Теперь введённый пользователем текст необходимо зашифровать и только потом сравнивать с сохранённым в файле также зашифрованным паролем. А злоумышленник, даже найдя зашифрованный пароль, не сможет по нему восстановить оригинальную фразу пароля!

Ctrl+Backspace в элементах управления Delphi

сочетание клавиш Ctrl+Backspace обычно удаляет слово слева от курсора. Но он не работает ни в одном из стандартных элементов управления Delphi, которые вы ожидаете ( TEdit , TMemo , TComboBox ect.). Интересно, что Ctrl+Delete работает просто отлично.

Кто-нибудь знает, как легко исправить это поведение?

Я знаю, что переопределение процедуры KeyDown сделает это, но это довольно сложно, поскольку KeyDown должен быть переопределен для каждого компонента.

Читать еще:  Linux защита от вирусов

1 Ответ

Это не проблема Delphi-specific. Действительно, TEdit и другие элементы управления являются просто оболочками для собственных элементов управления Microsoft Windows, и они ведут себя так. Попробуйте, например, поле редактирования в диалоговом окне ‘Select Font’ Блокнота. Редактирование элементов управления с включенным автозавершением, однако, примите горячую клавишу Ctrl+Backspace. Я думаю, что вы можете включить это легко

Похожие вопросы:

Если я попытаюсь нажать CTRL + A (чтобы выбрать весь текст в textbox), он создает шум ошибки windows. Если я попытаюсь нажать CTRL + Backspace (чтобы удалить последнее слово вместо последнего.

Хорошо, что ctrl-backspace в emacs удалит все whitespace. Однако на этом дело не заканчивается! Кажется, он останавливается только после удаления хотя бы одного слова . Это означает, например, что.

В Eclipse есть хорошая функция удаления слова до следующей заглавной буквы, когда вы нажимаете Ctrl + Backspace . Например: ThisIsSomeText Если вы нажмете Ctrl + Backspace , будет удалено только.

У меня есть приложение, которое использует PreviewKeyDown для захвата CTRL X нажатий клавиш (где X -любая буква) вдоль линий: Key key = (e.Key == Key.System ? e.SystemKey : e.Key); if.

Я пытаюсь создать Brainfuck IDE с электроном JS. Часть редактирования текста — это элемент

HTML. Прямо сейчас, когда я нажимаю Ctrl + Backspace , весь скрипт удаляется из-за того.

Есть несколько мест, где вы можете ввести этот символ, введя ctrl-backspace, в том числе windows loggon password. Какой символ это и могу ли я использовать его в пароле?

возвышенный текст 3 Ctrl + Backspace не работает мой возвышенный keymap, как это, но все равно не работает < keys: [ctrl+backspace], command: delete_word, args: < forward: false >>,

У меня есть сервер, написанный на C++, и при получении строки чата я хотел бы удалить странные специальные символы, такие как созданный Ctrl + Backspace (хотя и не другие символы, такие как :)]>_ и.

В MonoDevelop (linux версия), сочетание клавиш Ctrl+клавиша Backspace удаляет все переносы строк и до последнего слова/Чара блокируют и удаляют, что. Например: qwe asd . . . _ (где _ — это мой фокус.

Недавно я обновился до Visual Studio 2010 и обнаружил, что когда я нажимаю Ctrl + Backspace на пустой строке, он удалит строку, что и было сделано в 2008 году, но затем он также удалит последний.

Delphi 2010. Работа с клавиатурой в условиях Unicode.

Как я уже отмечал, начиная с Delphi 2009 введена полная поддержка Unicode. Это замечательно, необходимо и важно. Однако, как ни крути, но не все толком понимают как работать-то? Я сейчас не имею ввиду профессиональных программистов, работающих постоянно с Delphi. Речь идёт о простых любителях, начинающих программистах, которые большую часть информации получают из Сети, в результате чего возникают всякие непредвиденные ситуации. Вот, например, ситуация — надо написать программу, которая будет отлавливать нажатия клавиш клавиатуры и записывать их в лог. В Интернет есть масса примеров как организовать глобальный хук на клаву и считывать в лог виртуальные и скан-коды клавиш (подобная статья есть и у нас в блоге). Естественно, начинающий программист просто качает готовый пример и пробует транслировать эти самые коды в буковки…а они просто так не транслируются — получаем либо «кракозябры» либо нормальные буквы но не те. И сидит такой начинающий программист, чешет затылок и другие части тела, не понимая что он делает не так? В лучшем случае лезет в опять в Сеть и с огромной вероятностью натыкается на подобного рода «рецепты-объяснения»:

В событиях OnKeyDown и OnKeyUp, Key является беззнаковым двухбайтовым (Word) значением, которое представляет виртуальную клавишу Windows. Для получания значения символа можно воспользоваться функцией Chr. В событии OnKeyPress параметр Key является значением Char, которое представляет символ ASCII.

Вроде все правильно. НО не для Delphi 2009-2010, при работе с русскими символами, так как во-первых, введена поддержка Unicode, а во-вторых ASCII никогда с роду не содержала русских букв (см.историю разработки кодировок). И никогда, ни при каких обстоятельствах Вы не сможете перевести просто так виртуальную клавишу в русский символ функцией Chr.

Если не верите — проделайте такой простой эксперимент: откройте Delphi 2009-2010, создайте новое приложение и в событии onKeyUp для главной формы напишите такой код:

Читать еще:  Setwindowpos delphi пример

Теперь запустите приложение, переключитесь на русский язык и нажмите любую клавишу.

Вот результат нажатия русской буквы «Ы»:


Спрашивается: Чё за фигня? Где моя буковка «Ы»? И, что самое интересное, я ведь нажимал букву без Shift и CapsLock, а мне чего-то буква в верхнем регистре упала? Давайте разбираться в определениях. Так как без четкого знания определений мы с Вами в этих лабиринтах и хитросплетениях не разберемся никогда.

1. Скан-коды, виртуальные код и коды символов

Итак, с клавиатурой связано как минимум три разновидности кодов: скан-код, символьный код и виртуальный код. И далеко не все начинающие программисты понимают различия между ними.
Самая большая путаница со скан-кодами. Для начала, их существует две разновидности. Есть скан-коды «настоящие» — это то, что получает система прямо от клавиатуры, а есть скан-коды которые выдаются после того, как они будут обработаны в BIOS, которая интерпретирует, например, одновременное нажатие клавиш-модификаторов, а также справляется с текущей таблицей кодов символов и отправляет эти скан-коды в буфер клавиатуры.
Теперь посмотрим, как выглядит скан-код в принципе. На рисунке представлена оригинальная 84-кнопочная клавиатура IBM PC. Вот во времена существования этой клавиатуры и назначались скан-коды клавишам. Причем присваивались они слева-направо, начиная с клавиши Esc. Так клавиша Esc получила скан-код 1, а клавиша 1 — код 2 и т.д. Пока не будем кидаться в дебри дополнительных клавиш, которые появились на современных клавиатурах (там есть свои особенности присвоения скан-кодов), а уясним для себя следующее:

Скан-код — это идентификатор клавиши на клавиатуре и он один в чистом виде никак не может сам по себе описать символ в условиях unicode

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

Виртуальные коды — это то, что использует система (Windows) для идентификации клавиш.

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

С некоторыми из констант, определяющих виртуальный код клавиш Вы можете ознакомиться в модуле windows.pas Delphi. Но, там отсутствуют коды для буквенно-цифровых клавиш, т.к. они совпадают с соответствующими символами из таблицы ASCII .

Теперь, я думаю, становится более-менее ясно почему при нажатии клавиши с буквой «ы» мы в примере получили заглавную букву «S»? Delphi в этом случае сработала идеально правильно — выдала именно виртуальный код клавиши, как и полагается.

А для того, чтобы получить русскую букву нам необходимо знать третий код — код символа в таблице символов Unicode или, как мы посмотрим ниже, скан-код, виртуальный код и ещё один параметр — состояние клавиатуры.

Для того, чтобы продемонстрировать правильность работы Delphi, немного допишем наш пример.

Ссылка на основную публикацию
Adblock
detector