Главная страница
    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.047 c
1-1104151339
MTsv DN
2004-12-27 15:42
2005.01.16
Рекурсивный проход дерева каталогов


9-1096361464
VasyaPupkin
2004-09-28 12:51
2005.01.16
DelphiX


14-1103707677
infom
2004-12-22 12:27
2005.01.16
Играете ли вы на работе в Counter Strike ?


14-1103871379
Aleksander
2004-12-24 09:56
2005.01.16
База данных C++Builder (исходники)


14-1104325636
alless
2004-12-29 16:07
2005.01.16
Трабл: Install Delphi 6





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