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

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

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

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

Добавлено через 12 минут
Забыл добавить:
Длинна строки неизвестна, но гарантируется что она будет введена менее, чем за секунду.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2014, 14:44
Ответы с готовыми решениями:

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

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

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

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

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

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

Сканер штрих кода с префиксом из 10 символов, порядок которых не меняется. Поэтому и вводится меньше, чем за секунду)
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
29.07.2014, 10:04 6
Цитата Сообщение от саша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 7
DenNik, вообще-то я знаю. Когда я это писал, я ещё не задал это свойство в яндекс.
0
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
29.07.2014, 10:57 8
саша40, ты по яндексу делфи изучаешь?
0
157 / 300 / 47
Регистрация: 14.08.2012
Сообщений: 2,578
29.07.2014, 11:07 9
TigerMax, Сканер штрихкодов дает двоичную комбинацию(сочетание 1 и 0, иначе включено и выключено). Тут всё зависит от нескольких физических факторов. От светоотражательной способности чтоли? Ну вроде, если сканер наткнулся на полоску, то это 1 и 1 пойдут пока сканер идет по полоске. если бумага не закрашена, то это 0. А что за префикс у сканера?

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

Цитата Сообщение от саша40 Посмотреть сообщение
Я использую Яндекс
а надо использовать учебники
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
29.07.2014, 14:29 11
Лучший ответ Сообщение было отмечено TigerMax как решение

Решение

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от TigerMax Посмотреть сообщение
Если ставить проверки в процедуру
тебе же написали
Цитата Сообщение от krapotkin Посмотреть сообщение
Сканер ш/к - это просто разновидность клавиатуры.
Считывает ш/к в нескольких известных ему стандартах и формирует текстовую строку.
только он не формирует строку, а эмулирует нажатие клавиши клавиатуры. т.о. перехват можно сделать, к примеру в событии OnEditChange, если поставить фокус в Edit и пикнуть сканером
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 66
30.07.2014, 19:04  [ТС] 16
Цитата Сообщение от 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
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
30.07.2014, 21:54 17
Лучший ответ Сообщение было отмечено 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  [ТС] 18
Цитата Сообщение от krapotkin Посмотреть сообщение
и вот интересно - объявил ты процедуру. ладно. а слабо ее назначить обработчиком события OnKeyPress для формы?
*Фейспалм*
Спасибо!
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,157
Записей в блоге: 20
30.07.2014, 22:22 19
))
бывает
0
30.07.2014, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2014, 22:22
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru