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

Вниз

TEdit - программно отразить символ клавиатуры   Найти похожие ветки 

 
ЕК   (2004-12-31 10:16) [0]

Как эмитировать нажатие клавиши клавиатуры программно в компаненте
наследнике TEdit.  Собственно необходимо отразить набранный символ
клавиатуры при известном коде клавиши(Key:Word), да это
необходимо сделать так чтобы в TEdit отразился именно тот
символ как при реальном нажатии- с учетом раскладки клавиатуры?


 
Sandman25 ©   (2004-12-31 10:17) [1]

Зачем?


 
ЕК   (2004-12-31 10:28) [2]

Пишу компанент что типа THotKey


 
Jay1982 ©   (2004-12-31 10:31) [3]

<Sandman25 ©   (31.12.04 10:17) [1]

За шкафом


 
P.N.P. ©   (2004-12-31 10:46) [4]

Несовсем понятно...
Может это имеется ввиду?

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if AnsiUpperCase(Chr(Key))[1] in ["А".."Я", "A".."Z"] then
   Label1.Caption := Chr(key) else
   Label1.Caption := "";
 if ssShift in Shift then Label1.Caption := "Shift + " + Label1.Caption;
 if ssAlt in Shift then Label1.Caption := "Alt + " + Label1.Caption;
 if ssCtrl in Shift then Label1.Caption := "Ctrl + " + Label1.Caption;
end;


 
Jay1982 ©   (2004-12-31 10:55) [5]

Скорее не определять нажатую, а именно нажимать, програмно


 
Jay1982 ©   (2004-12-31 10:57) [6]


procedure SetKey(Key: Integer);
begin
 keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
 keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0);
 keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;

где key - VK_HOME, VK_F1...


 
P.N.P. ©   (2004-12-31 10:57) [7]

SendMessage(Edit.Handle,WM_CHAR,Key,0);


 
ЕК   (2004-12-31 10:59) [8]

В том то и дело что Chr не пойдет, так как не учитывает раскладку

клавиатуры, да и например нажимаем клавишу c символами (""Ээ)-Код 222,

а
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 Text:=Chr(Key)
end;
даст символ Ю а на клавише его нет.


 
Jay1982 ©   (2004-12-31 11:04) [9]

Проверяй состояние раскладки, и соответственно изменяй код выводимой клавиши


 
ЕК   (2004-12-31 11:16) [10]

To
P.N.P. ©   (31.12.04 10:57) [7]
SendMessage(Edit.Handle,WM_CHAR,Key,0);
так я делал ситуацию выше с символом Ю я описал.

To

procedure SetKey(Key: Integer);
begin
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;

что то не эмулирует   код выше нажатие, как его реализовать в компаненте?


 
Jay1982 ©   (2004-12-31 11:32) [11]

Попробуй так:

procedure TForm1.SetKey(Key: Integer);
begin
 keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,  0);
 keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY, 0);
 keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;


 
P.N.P. ©   (2004-12-31 11:33) [12]

См. Jay1982 ©   (31.12.04 11:04) [9]


var
P:PChar;
begin
GetMem(p,255);
GetKeyboardLayoutName(P);
 if P="00000409"  then //English
 if P="00000419"  then //Russian
FreeMem(P);
end;


 
ЕК   (2004-12-31 11:49) [13]

To
Jay1982 ©   (31.12.04 11:32) [11]
Код работает. Но вот как реализовать его в компаненте при смене
свойства Key из инспектора объектов или  например при смене его
в ходе выполнения программы.


 
Jay1982 ©   (2004-12-31 11:55) [14]


procedure VFORM.SetKey(Key: Integer);
begin
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,  0);
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY, 0);
keybd_event(Key, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;

где VFORM - переменная (текущая форма), наверное можно так:

var
 VFORM: TForm;

 VFORM := Self

и естественно не забывай проверять раскладку клавиатуры
P.N.P. ©   (31.12.04 11:33) [12]


 
Jay1982 ©   (2004-12-31 11:58) [15]

Или же VFORM := Form1...


 
ЕК   (2004-12-31 12:19) [16]

Спасибо Jay1982 ©   и P.N.P. © что откликнулись, буду досканально разбираться- надо время для этого.



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

Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
14-1103890757
asafr
2004-12-24 15:19
2005.01.16
Сколько брать, чтоб потом не бегать...


3-1103016178
HDM
2004-12-14 12:22
2005.01.16
ПОИСК ПО БАЗЕ


1-1103885197
ivc_andr
2004-12-24 13:46
2005.01.16
Check в DBGrid


1-1104079743
Dmitry
2004-12-26 19:49
2005.01.16
Как округлить число вверх до первого, которое делится на 5.


1-1104149785
markers
2004-12-27 15:16
2005.01.16
На тему ini файлов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский