Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перемещение фокуса между Edit и VST / 17 сообщений из 17, страница 1 из 1
06.07.2020, 10:41
    #39976594
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Господа, подскажите пожалуйста как решить проблему. Нужно делать перемещение фокуса между Edit и VST следующим образом:
1. Перемещаюсь по строкам VST стрелками на клавиатуре вверх-вниз. При каждом нажатии на клавишу стрелки фокус должен перемещаться на Edit, где потом остается до получения результата сканирования сканером или нового нажатия на стрелку (если не надо сканировать).
2. Потом в зависимости отсканировали или нет:
2.1. Если что-то отсканировали, происходят действия по записи результата, потом фокус должен автоматически переместиться на
след. строку VST, чтобы она выделилилась и соответственно сразу снова перейти на Edit
2.2. Если ничего пока не отсканировали, то фокус остается в Edit сколько угодно долго до нового нажатия на клавишу стрелки
вверх или вниз на клавиатуре - тогда фокус также должен автоматически переместиться на след. строку VST, чтобы она
выделилилась и соответственно сразу снова перейти на Edit

Если делаю так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
procedure TfrmDocPost.VTKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (Key = VK_DOWN) or (Key = VK_UP) then
   begin
    if edDataMatrix.Text = '' then edDataMatrix.SetFocus
    else Label9.Caption := 'DataMatrix:' + edDataMatrix.Text;
   end;
end;



Тогда работает, но только для 1-й строки - фокус перемещается на Edit, но там естественно и остается (см. скрин)
Если добавить

Код: pascal
1.
2.
3.
4.
procedure TfrmDocPost.edDataMatrixEnter(Sender: TObject);
begin
   VT.SetFocus;
end;



Тогда фокус не остается в ожидании в Edit, а сразу возвращается на VST
Как можно сделать чтобы он оставался там до момента сканирования или нового нажатия на стрелку, а потом автоматически перемешался на нужную строку VST и снова сразу возвращался на Edit?

П.С. перехват нажатия курсорных клавиш на уровне приложения, а не через события VST
http://delphiworld.narod.ru/base/catch_cursors_keys2.html
дал тот же результат

П.П.С. Резюмируя, мне нужно следующее: юзер щелкает мышью на первую строку документа - фокус сразу перемещается на Edit - он сканирует код, который привязывается именно к этой строке документа (или не сканирует, если кода нет). Дальше уже на клаве нажимает стрелку вниз, переходит на второу строку документа, фокус снова автоматически перемещается на Edit, юзер снова скнирует или нет и так до самого конца документа. Возможно вообще это реализовать без нажатия доп. клавиш кроме стрелок вверх-вниз и события сканирования, результат которого отображается в Edit?
...
Рейтинг: 0 / 0
06.07.2020, 10:56
    #39976597
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Так лови KeyDown в Edit и дальше по ситуации
...
Рейтинг: 0 / 0
06.07.2020, 10:57
    #39976599
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
авторТогда работает, но только для 1-й строки - фокус перемещается на Edit, но там естественно и остается
Напишите код в Edit, который при нажатии на стрелку возвращает курсор в VST
...
Рейтинг: 0 / 0
06.07.2020, 11:18
    #39976610
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
арт2010,
что такое VST и Edit?
Наверное, название каких-то объектов?
Указывай тип объектов.
...
Рейтинг: 0 / 0
06.07.2020, 15:10
    #39976710
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
ъъъъъ - TVirtualStringTree и TEdit
DimaBr - точно! простейшее решение - оба события повесить на одну и ту же клавишу.

Сделал так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
procedure TfrmDocPost.VTKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if (Key = VK_DOWN) or (Key = VK_UP) then
   begin
    if edDataMatrix.Text = '' then edDataMatrix.SetFocus
    else 
      begin
        Vt.OnNewText(VT,VT.FocusedNode,21,edDataMatrix.Text);
        Label9.Caption := 'DataMatrix ' + edDataMatrix.Text;
        edDataMatrix.Text := '';
      end;
   end;
end;



Код: pascal
1.
2.
3.
4.
5.
procedure TfrmDocPost.edDataMatrixKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Key = VK_DOWN) or (Key = VK_UP) then  VT.SetFocus;
end;



Правда приходится нажимать стрелку 2 раза, то есть немного не то что я хотел, но результат тот же
Так что дальше наверное не буду копать
...
Рейтинг: 0 / 0
06.07.2020, 15:19
    #39976716
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
арт2010Сделал так

Key обнулить забыл чтобы стандартный обработчик не срабатывал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.07.2020, 15:28
    #39976719
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Dimitry Sibiryakov, добавил, благодарю
...
Рейтинг: 0 / 0
06.07.2020, 23:32
    #39976878
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Черезжопное решение. За каким хреном тебе вообще уходить из TEdit? Судя по посту чтоб переместится на следующую строку в VST и вернуться обратно? Открою секрет, переместится можно и без фокусировки VST
...
Рейтинг: 0 / 0
07.07.2020, 10:05
    #39976956
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
white_nigger, так точно! Мне нужно максимально ускорить вбивание кодов DataMatrix, которое будет происходит вручную. А так как в доке может быть сотня строк, нужно максимально избавиться от лишних нажатий клавиш. Алгоритм такоей - перемещение по VST как и было описано - стрелками, затем когда выбрана нужная строка, фокус должен быть на Edit - иначе не произойдет сканирование.
Но как узнать что сканирование завершилось и код нужно записать (пока что в само VST, потом при проводке дока - уже в БД)? Сначала у меня была запись кода по нажатию Enter - но это значит лишнее нажатие клавишы, то есть работа удваивается.
Либо как-то обрабатывать работу самого сканера, но некогда с этим заморчиваться.
Теперь вот подтверждение сделал тоже стрелкой - тоже двойная работа получается но хотя бы на одной клавише, что явно быстрее.
Но если есть возможность избавиться от лишнего нажатия стрелки, буду премного благодарен за подсказку - как это сделать?
При этом обязательные условия, которые есть сейчас, должны сохраниться:
1) перемещение по строкам VST должно сопровождаться выделением текущей выбранной строки цветом;
2) перемещаться стрелками можно как вверх так и вниз;
3) выделенная срока после сканирования не должна скидываться на первую строку VST
4) юзер может перемещаться по VST не только стрелками, но и выбрать любую строку мышью
...
Рейтинг: 0 / 0
07.07.2020, 11:09
    #39976987
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Я один не понимаю, как наличие фокуса в Edit связано с неким "сканированием"?
...
Рейтинг: 0 / 0
07.07.2020, 12:20
    #39977028
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
арт2010фокус должен быть на Edit - иначе не произойдет сканирование.

"Уже смешно." (с)
Даже если сканер прикидывается клавиатурой, это ещё не повод.

арт2010Но как узнать что сканирование завершилось и код нужно записать

Внезапно, но сканер обычно посылает признак "конец кода". Для случая выше клавиша
программируется и это может быть Enter, например.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.07.2020, 12:23
    #39977030
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Fr0sT-Brutal
Я один не понимаю, как наличие фокуса в Edit связано с неким "сканированием"?

Ручные сканеры штрих-кодов имитируют нажатие клавиш на клавиатуре.
Правда когда я похожую задаче решал - я просто делал обработчик символов и при нажатии на цифру (штрихкод) программно отправлял данные в нужное поле.
...
Рейтинг: 0 / 0
07.07.2020, 14:15
    #39977106
Fr0sT-Brutal
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
alekcvp
Ручные сканеры штрих-кодов имитируют нажатие клавиш на клавиатуре.
Правда когда я похожую задаче решал - я просто делал обработчик символов и при нажатии на цифру (штрихкод) программно отправлял данные в нужное поле.

Ясно. Только неясно, на кой нужен edit. Можно ловить непосредственно в VST, не говоря уже о более корректных решениях типа WM_KEY
...
Рейтинг: 0 / 0
07.07.2020, 14:37
    #39977109
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Сканирование в определённое окно (Edit или VST) уже само по себе не кошерно. Пользователь случайно ткнул мышкой в сторону и сканирование больше не работает.

Нужно переводить сканер в режим USB-HID и использовать компонент TJvHidDeviceController
...
Рейтинг: 0 / 0
07.07.2020, 14:37
    #39977110
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Fr0sT-Brutal, тогда встает проблема отслеживания к чему относится введенный символ - к DataMatrix или нет, потому что строки VST могут редактироваться. Также может редактироваться инфа в остальных Edit-ах в шапке документа
...
Рейтинг: 0 / 0
07.07.2020, 14:40
    #39977112
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Сканер (даже в режиме клавиатуры) посылает символ-префикс и символ-суффикс. Отслеживание
тривиально. Но, как уже сказали, лучше его таки вывести из клавиатурного режима.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.07.2020, 17:29
    #39977175
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение фокуса между Edit и VST
Fr0sT-Brutal
alekcvp
Ручные сканеры штрих-кодов имитируют нажатие клавиш на клавиатуре.
Правда когда я похожую задаче решал - я просто делал обработчик символов и при нажатии на цифру (штрихкод) программно отправлял данные в нужное поле.

Ясно. Только неясно, на кой нужен edit. Можно ловить непосредственно в VST, не говоря уже о более корректных решениях типа WM_KEY

Для чего он нужен автору я не знаю, а вообще - чтобы ввести вручную значение, которое не распознаёт сканер.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перемещение фокуса между Edit и VST / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]