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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.034 c
1-1104263376
forgery
2004-12-28 22:49
2005.01.16
конвертация графических форматов


14-1104350832
Hypercube
2004-12-29 23:07
2005.01.16
Inno Setup 5


14-1103869505
Rouse_
2004-12-24 09:25
2005.01.16
C Днем Рождения 24 Декабря


9-1094706205
Wasp
2004-09-09 09:03
2005.01.16
Как сделать след от объекта


1-1104474929
begin...end
2004-12-31 09:35
2005.01.16
PByteArray: непонятности





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