Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.03 c
3-1139197590
Ольга
2006-02-06 06:46
2006.05.14
Получить значение OUTPUT параметра из хран. процедуры


3-1140688549
PVR
2006-02-23 12:55
2006.05.14
Статистика запроса Interbase


2-1146026542
severnij_nur
2006-04-26 08:42
2006.05.14
winexec


15-1145541172
Ketmar
2006-04-20 17:52
2006.05.14
php-форум на файлах


2-1145691993
News
2006-04-22 11:46
2006.05.14
параметры ОЗУ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский