Главная страница
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.047 c
2-1146066746
chai
2006-04-26 19:52
2006.05.14
Аналог IntToStr в Win API


15-1145188119
Tirael
2006-04-16 15:48
2006.05.14
вход


3-1142856484
GL00m
2006-03-20 15:08
2006.05.14
Не работает INSERT при работе с БД Access...


1-1144150939
VIB1
2006-04-04 15:42
2006.05.14
MS SQL 2005 QuickReport


15-1145424597
SPeller
2006-04-19 09:29
2006.05.14
Резюме