Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66

KeyPreview. Поймать слово

28.07.2014, 14:44. Показов 3630. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
С клавиатуры вводятся строки.
Если эта строка имеет префикс(10 известных программе символов), то отправить без префикса в edit.
Если в строке нет этого префикса, отправить строчку куда она шла.
Я понимаю, что можно запомнить предыдущий символ и делать проверку, но для 10 символов получается очень толсто.
Кто-нибудь подскажет способ попроще? Желательно, с примером.
Заранее благодарю.

Добавлено через 12 минут
Забыл добавить:
Длинна строки неизвестна, но гарантируется что она будет введена менее, чем за секунду.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2014, 14:44
Ответы с готовыми решениями:

Не работает KeyPreview
Когда в форму добавляю кнопку, картинка перестают двигаться, хотя в свойстве формы стоит KeyPreview true. Нужно чтобы картинка двигалась...

Поймать редирект ссылку
Делаю запрос на одну ссылку,и меня перенаправляет на другую ссылку,как эту другую ссылку получить? пробывал так: ...

Поймать сообщение wm_copy
Нужно ловить все wm_copy всех приложений. Я понимаю, что делать это через хук, но какой именно использовать? И какой параметр...

18
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
28.07.2014, 15:39
TigerMax, событие KeyPreview сработает на ввод символа, а не строки. Надо только несколько переменных. Я вот не понимаю, как это человек может ввести строку длиной более 10 символов меньше чем за секунду?
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
28.07.2014, 15:54  [ТС]
саша40, не человек
Спасибо за ответ. Значит, попру влобовую.
Если у кого будут идеи - пишите.
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
28.07.2014, 20:20
TigerMax, Если хотел не дать ввести эти 10 символов, то так и написал бы. Я просто не знаю, в каком порядке вводятся эти 10 символов. Можно просто просканировать строку из edit на содержания этих 10 символов и удалить их из неё. Можно не дать их ввести, или ввести их сочетание(слово). Тут куча вариантов. Телепатов на форуме нет, дружок.
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
28.07.2014, 21:50  [ТС]
саша40, вы правы. Попробую сформулировать иначе.
Фокус может находиться где угодно. Вводится слово из десяти символов(это слово,префикс,заранее известно)
И вслед за этим словом в течении 0,5-1 секунды быстро с клавиатуры набираются символы.
Нужно поймать этот момент, удалить кодовое слово, остатки вывести в нужный edit.

Можно решить в лоб: массив из 10 символов. Каждый входящий символ встает в массив и сдвигает оставшиеся.
Когда символы в массиве образуют слово, выполнить процедуру.

Сканер штрих кода с префиксом из 10 символов, порядок которых не меняется. Поэтому и вводится меньше, чем за секунду)
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.07.2014, 10:04
Цитата Сообщение от саша40 Посмотреть сообщение
событие KeyPreview сработает на ввод символа
очередной "пёрл"!

да будет тебе известно, что KeyPreview - это не событие, а свойство, которое разрешает форме реагировать на события KeyUp/Down, даже если фокус находится в дочернем компоненте

Добавлено через 3 минуты

Не по теме:

мне иногда кажется, что саша40 - это не человек, а большой толстый тролль. хотя нет, для качественного троллинга тоже нужно много знать



Добавлено через 3 минуты
Цитата Сообщение от TigerMax Посмотреть сообщение
с префиксом из 10 символов, порядок которых не меняется
в каком-то месте проверить, если длина введенной строки больше 10 символов, скопировать первые десять, сравнить с образцом, по результатам сравнения сделать вывод

Добавлено через 4 минуты
и вообще, нужно было сразку сказать, что сканер

Цитата Сообщение от TigerMax Посмотреть сообщение
Фокус может находиться где угодно
если сканер простой, то символы и будут вводиться туде "где угодно"
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
29.07.2014, 10:52
DenNik, вообще-то я знаю. Когда я это писал, я ещё не задал это свойство в яндекс.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.07.2014, 10:57
саша40, ты по яндексу делфи изучаешь?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
29.07.2014, 11:07
TigerMax, Сканер штрихкодов дает двоичную комбинацию(сочетание 1 и 0, иначе включено и выключено). Тут всё зависит от нескольких физических факторов. От светоотражательной способности чтоли? Ну вроде, если сканер наткнулся на полоску, то это 1 и 1 пойдут пока сканер идет по полоске. если бумага не закрашена, то это 0. А что за префикс у сканера?

Добавлено через 5 минут
DenNik, а какая разница. Я использую Яндекс, потому что ненавижу Google!
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.07.2014, 11:56
Цитата Сообщение от саша40 Посмотреть сообщение
TigerMax, Сканер штрихкодов дает двоичную комбинацию(сочетание 1 и 0, иначе включено и выключено). Тут всё зависит от нескольких физических факторов. От светоотражательной способности чтоли? Ну вроде, если сканер наткнулся на полоску, то это 1 и 1 пойдут пока сканер идет по полоске. если бумага не закрашена, то это 0.
как это относится к теме?

Цитата Сообщение от саша40 Посмотреть сообщение
Я использую Яндекс
а надо использовать учебники
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
29.07.2014, 14:29
Лучший ответ Сообщение было отмечено TigerMax как решение

Решение

Сканер ш/к - это просто разновидность клавиатуры.
Считывает ш/к в нескольких известных ему стандартах и формирует текстовую строку.
Ну и по умолчанию ентер в конце (#13)
Абсолютно то же, что Ctrl+V
заводим строку
в FormKeyPress добавляем в нее символы
если длина >10 первый символ удаляем
все время проверяем на совпадение с шаблоном
1
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
29.07.2014, 14:29
Цитата Сообщение от DenNik Посмотреть сообщение
как это относится к теме?
потому что автор может об этом не знать!
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
29.07.2014, 14:30
но чаще в ш/к 13 цифр
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
30.07.2014, 15:49  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
в каком-то месте проверить, если длина введенной строки больше 10 символов, скопировать первые десять, сравнить с образцом, по результатам сравнения сделать вывод
Длинна строки? Нет никакой строки, фактически. Просто вводятся символы

Добавлено через 4 минуты
Цитата Сообщение от krapotkin Посмотреть сообщение
Сканер ш/к - это просто разновидность клавиатуры.
Считывает ш/к в нескольких известных ему стандартах и формирует текстовую строку.
Ну и по умолчанию ентер в конце (#13)
Абсолютно то же, что Ctrl+V
заводим строку
в FormKeyPress добавляем в нее символы
если длина >10 первый символ удаляем
все время проверяем на совпадение с шаблоном
Спасибо. Собственно, как я и планировал.
Но ведь сканер вводит символы очень быстро. Если ставить проверки в процедуру, не могут ли,случайно, символы перемешаться?
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
30.07.2014, 16:22
Цитата Сообщение от TigerMax Посмотреть сообщение
Просто вводятся символы
куда?! где они хранятся? в строке или в массиве символов, который суть есть строка
так что не путай бабушку

Добавлено через 2 минуты
Цитата Сообщение от TigerMax Посмотреть сообщение
Но ведь сканер вводит символы очень быстро. Если ставить проверки в процедуру, не могут ли,случайно, символы перемешаться?
не могут. сканер же не дурак и передает символы по очереди

Добавлено через 2 минуты
Цитата Сообщение от TigerMax Посмотреть сообщение
Если ставить проверки в процедуру
тебе же написали
Цитата Сообщение от krapotkin Посмотреть сообщение
Сканер ш/к - это просто разновидность клавиатуры.
Считывает ш/к в нескольких известных ему стандартах и формирует текстовую строку.
только он не формирует строку, а эмулирует нажатие клавиши клавиатуры. т.о. перехват можно сделать, к примеру в событии OnEditChange, если поставить фокус в Edit и пикнуть сканером
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
30.07.2014, 19:04  [ТС]
Цитата Сообщение от DenNik Посмотреть сообщение
тебе же написали
Тогда, нубский вопрос следом.
KeyPreview перевел в true;
Объявил процедуру
Delphi
1
2
3
  public
  procedure FormKeyPress(Sender: TObject; var Key: char);
  end;
Но сама процедура не выполняется(Проверил через дебаггер)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm2.FormKeyPress(Sender: TObject; var Key: char);
begin
line:=line+key;
if length(line)>10 then delete(line,0,1);
if metrocheck()=true then scanmode:=true;
if scanmode=true then
begin
barcode:=barcode+key;
  if key=#13 then
  begin
  scanmode:=false;
  Label1.Caption:=barcode;
  end;
key:=#0;
end;
end;
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
30.07.2014, 21:54
Лучший ответ Сообщение было отмечено TigerMax как решение

Решение

у меня рабочий проект - касса.
там все сделано именно так.

вот
Цитата Сообщение от TigerMax Посмотреть сообщение
delete(line,0,1);
должно быть так
Цитата Сообщение от TigerMax Посмотреть сообщение
delete(line,1,1);
ну и
Delphi
1
2
scanmode:=metrocheck();
if (scanmode) then
и вот интересно - объявил ты процедуру. ладно. а слабо ее назначить обработчиком события OnKeyPress для формы?

более ленивые люди делают это двойным кликом по соотв. событию в инспекторе объектов
1
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
30.07.2014, 22:12  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
и вот интересно - объявил ты процедуру. ладно. а слабо ее назначить обработчиком события OnKeyPress для формы?
*Фейспалм*
Спасибо!
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
30.07.2014, 22:22
))
бывает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.07.2014, 22:22
Помогаю со студенческими работами здесь

Поймать вывод консоли
Здравствуйте. Есть приложение с командным интерфесом. Оно делает вывод. Вопрос в том, как запустить из кода это приложение так, чтобы...

Свойство KeyPreview не срабатывает
Был у меня на форме встроенный ActiveX в котором был RichTextBox и встроенный броузер IE. И в ActiveX и в форме свойство KeyPreview =...

Странное описание свойства Form.KeyPreview
Наверное многие из уважаемых участников форума видели это разъяснение свойства KeyPreview, помещенное внизу окна свойства, а именно: ...

В тексте заменить слово А(любое слово) на слово В(любое слово). А и В разной длинны
Не могу сообразить как написать программу: Пользователь вводит текст Необходимо замениь слово А(любое слово) на слово В(любое...

Поймать 3G
Я живу в деревне, с интернетом там очень тяжко. 3G ловит только на крыше дома, а лазит на крышу всегда когда нужно хорошее соединение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru