powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перемещение фокуса между Edit и VST
17 сообщений из 17, страница 1 из 1
Перемещение фокуса между Edit и VST
    #39976594
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, подскажите пожалуйста как решить проблему. Нужно делать перемещение фокуса между 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
Перемещение фокуса между Edit и VST
    #39976597
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так лови KeyDown в Edit и дальше по ситуации
...
Рейтинг: 0 / 0
Перемещение фокуса между Edit и VST
    #39976599
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТогда работает, но только для 1-й строки - фокус перемещается на Edit, но там естественно и остается
Напишите код в Edit, который при нажатии на стрелку возвращает курсор в VST
...
Рейтинг: 0 / 0
Перемещение фокуса между Edit и VST
    #39976610
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
арт2010,
что такое VST и Edit?
Наверное, название каких-то объектов?
Указывай тип объектов.
...
Рейтинг: 0 / 0
Перемещение фокуса между Edit и VST
    #39976710
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ - 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
Перемещение фокуса между Edit и VST
    #39976716
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010Сделал так

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

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

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

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

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

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

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

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

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


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