Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.14;
Скачать: CL | DM;

Вниз

Перехват ввода с клавиатуры   Найти похожие ветки 

 
kyn66 ©   (2006-04-05 13:28) [0]

Уважаемые мастера, на форме есть DBGrid, и Edit1. В поле  Edit1 воодится текст, ля поиска по таблице, выводимой в DBGrid. Как мне сразу-же пернапрвить ввод в Edit1, если в данный момент активен DBGrid. Делая так:

procedure TMainFrm.DBGridKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 FindEdit.SetFocus;
end;

вокус меняется, но съедается первая буква. Как правильно отловить ввод с клавиатуры, чтобы слово для поиска появлялось правильно???


 
Сергей М. ©   (2006-04-05 13:36) [1]


> съедается первая буква


Где, кем "съедается" ?
Клавишу при этом какую тычешь ?


 
Юрий Иванов   (2006-04-05 14:12) [2]

PostMessage(FindEdit.Handle, WM_KeyDown, Key, 0); {послать букву в FindEdit}

  Key:=0; {чтобы не обрабатывался Key в текущем обработчике}

  ActiveControl:=Edit1; {или SetFocus как было}


 
kyn66 ©   (2006-04-05 14:24) [3]

> Сергей М.
Клавишу тыкаю любую, всмысле "буквенную". Получается, что припервом тыке обрабатывается событие и переводит фокус в Edit1, а потом уже со второй в Edit1 идет нориальный ввод.

> Юрий Иванов
На какое событие вешать? onKeyDown Grida?


 
kyn66 ©   (2006-04-05 14:31) [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", но мессага не появляется. Почему?


 
Сергей М. ©   (2006-04-05 14:45) [5]


> kyn66 ©   (05.04.06 14:24) [3]


При любом "тыке" код введенной клавиши обрабатывается текущим контролом, т.е. контролом имеющим фокус, т.е. гридом.


 
kyn66 ©   (2006-04-05 14:54) [6]

Да, но в данном случае уже FindEdit активен и точка останова еменно на его событии срабатывает


 
Юрий Иванов   (2006-04-05 18:33) [7]

Вообще говоря, просить пользователя переключить раскладку клавиатуры не совсем правильно.

Если это нужно, то лучше принудительно установить правильную раскладку. Сделать это надо не в OnKeyPress (там уже поздно), а, скажем, в OnEnter для FindEdit, чтобы при входе в это поле всегда стоял "русский".

Собственно что делать см. в
_http_://delphiworld.narod.ru/base/switch_spreading_of_keyboard.html



Страницы: 1 вся ветка

Текущий архив: 2006.05.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
4-1140438417
Pit
2006-02-20 15:26
2006.05.14
Процессы


15-1145340053
Некто_
2006-04-18 10:00
2006.05.14
ГОСТ Р 41.52-2001 (Правила ЕЭК ООН № 52)


15-1145572073
Труп Васи Доброго
2006-04-21 02:27
2006.05.14
Esperanto


3-1142616387
Silver...
2006-03-17 20:26
2006.05.14
Могу ли? Если да то как? Послать определенное сообшение...


15-1145310395
Галинка
2006-04-18 01:46
2006.05.14
Delphi 20xx Personal Edition Где взять бесплатно?