![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват ввода с клавиатуры [D7, WinXP]
kyn66 © (2006-04-05 13:28:00)Уважаемые мастера, на форме есть DBGrid, и Edit1. В поле Edit1 воодится текст, ля поиска по таблице, выводимой в DBGrid. Как мне сразу-же пернапрвить ввод в Edit1, если в данный момент активен DBGrid. Делая так:
procedure TMainFrm.DBGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FindEdit.SetFocus;
end;
вокус меняется, но съедается первая буква. Как правильно отловить ввод с клавиатуры, чтобы слово для поиска появлялось правильно???
Юрий Иванов (2006-04-05 18:33:00) [1]Вообще говоря, просить пользователя переключить раскладку клавиатуры не совсем правильно.
Если это нужно, то лучше принудительно установить правильную раскладку. Сделать это надо не в OnKeyPress (там уже поздно), а, скажем, в OnEnter для FindEdit, чтобы при входе в это поле всегда стоял "русский".
Собственно что делать см. в
_http_://delphiworld.narod.ru/base/switch_spreading_of_keyboard.html
kyn66 (2006-04-05 14:54:00) [2]Да, но в данном случае уже FindEdit активен и точка останова еменно на его событии срабатывает
Сергей М. (2006-04-05 14:45:00) [3]
> kyn66 © (05.04.06 14:24) [3]
При любом "тыке" код введенной клавиши обрабатывается текущим контролом, т.е. контролом имеющим фокус, т.е. гридом.
kyn66 (2006-04-05 14:31:00) [4]> Юрий Иванов
Все, проверил, работает как и нужно было, спасибо! Но сейчас хочу усилить проверку и при последующем вводе в FindEdit проверять раскладку клавы. Т.е. если ангельская - выдать предупреждение.
procedure TMainFrm.FindEditKeyPress(Sender: TObject; var Key: Char);
begin
if Key in(['a'..'Z', 'A'..'Z']) then
begin
ShowMessage('Перключитесь');
end;
end;
Но здесь опять засада... Пошагово проверяю Key. К примеру ввожу f... Вижу Key= 'f', но мессага не появляется. Почему?
kyn66 (2006-04-05 14:24:00) [5]> Сергей М.
Клавишу тыкаю любую, всмысле "буквенную". Получается, что припервом тыке обрабатывается событие и переводит фокус в Edit1, а потом уже со второй в Edit1 идет нориальный ввод.
> Юрий Иванов
На какое событие вешать? onKeyDown Grida?
Юрий Иванов (2006-04-05 14:12:00) [6]PostMessage(FindEdit.Handle, WM_KeyDown, Key, 0); {послать букву в FindEdit}
Key:=0; {чтобы не обрабатывался Key в текущем обработчике}
ActiveControl:=Edit1; {или SetFocus как было}
Сергей М. (2006-04-05 13:36:00) [7]
> съедается первая буква
Где, кем "съедается" ?
Клавишу при этом какую тычешь ?