-
Подскажите как программно узнать на каком элементе формы находится фокус ввода ?
-
Form.ActiveControl
Screen.ActiveControl
-
постараюсь обрисовать проблему:
На форме кнопка и edit
procedure TFormMain.BitBtnScaleClick(Sender: TObject);
// чтение веса с весов считал и устанавливаю фокус в edit
// в отладчике can focus =true
IF EditSK.CanFocus THEN EditSK.SetFocus;
end
у формы стоит keypreview
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); // hot key
IF .....
программно вызываю процедуру кнопки
ELSE IF key =121 THEN BEGIN IF BitBtnScale.Enabled THEN BitBtnScale.OnClick(Sender) END //F10
end
end
если интерактивное нажатие не кнопку мышкой все нормально.
Если через горячую кнопку, то полноценный фокус ввода в edit не устанавливается.
Курсор в edite стоит, но не моргает!
Form.ActiveControl
Screen.ActiveControl возвращают активный эмемент edit, но если нажать кнопку на клаве ввод текста в edit не происходит
повторное нажатие горячей клавиши заставляет заморгать курсор в edite и все вводится.
Но надо с первого раза, подскажите может что-то перерисовывается, обновляется и курсор не совсем полноценный
-
ну вызвать еще раз сетфокус после вызова, который не сетфокусит. а ваще, странная логика - кэнфокус-некэнфокус... все енабленные инпутные должны быть кэнфокусные, иначе это бэдинтерфейс.
-
еще раз вызываю setfocus после анализа горячих кнопок- изменений нет.
курсор в edite, НО НЕ МОРГАЕТ- как называется это состояние я не знаю...
Иногда (в других случаях) этот edit недоступен, поэтому в него фокус не может быть установлен, поэтому и предварительно проверяю на доступность фокуса
-
пробовал refresh и repaint чтоб "разбудить" edit, но наблюдаю странное поведение- вертикальная черта курсора отрисована в едите, но не моргает. Если начать что-то набирать, первый символ не вводится, со второго вводится
-
долго наблюдая за форумом, сделал открытие.
в мире есть пользователи без обеих рук, для которых погромисты без головы сочиняют интерфейсы с переключением фокуса.
-
> dim12345 (15.06.17 23:50) [2]
RTFM delphi help: TAction.ShortCut.
See also: ActiveControl := EditSK;
--
Regards, LVT.
-
> rrrrrrrrrr Вы угадали! В моем случае пользователь- весовщик на морозе, руки в рукавицах держат бутыль с "огненной водой" и он нажимает педаль = "горячая кнопка" получения веса. Бутыль выпустить из рук нельзя- грузчики рядом ему завидуют.
-
а зачем ему фокус в едите, если он в рукавицах?
-
Там еще сканер ШК usb-hid
-
а сканеру зачем фокус в едите?
-
> Kilkennycat © (17.06.17 07:50) [11]
> а сканеру зачем фокус в едите?
Видимо, сканер эмулирует клавиатурный ввод.
Однако, если в руках есть сканер, то ни клавиатура, ни фокус,
ни даже эдит не нужны. Достаточно нескольких служебных штрихкодов,
задающих необходимые команды.
Оные коды можно нанести хоть на рукав(ицу).
--
Regards, LVT.
-
> Leonid Troyanovsky © (17.06.17 09:59) [12]
в случае с hid-usb даже штрихкоды не нужны.
-
Ура ! ActionList помог решить проблему по горячей клавише курсор в edite как-то непривычно моргает однократно, но фокус устанавливается и ввод ШК (эмуляция клавиатуры) проходит нормально.
Всем спасибо!!!!!!!!!
-
а я бы всё-таки стремился к типа такому: hiddevice(vid,pid).event(e) {edit.text = e.data}