Главная страница
    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.035 c
1-1103098374
kingdom
2004-12-15 11:12
2005.01.16
Как найти пересечение фигур


4-1101382736
Vladko
2004-11-25 14:38
2005.01.16
Как узнать разрешение монитора через Api


4-1101726107
NetDigger
2004-11-29 14:01
2005.01.16
Траблы с NamedPipes


6-1098888843
boban
2004-10-27 18:54
2005.01.16
Приложение видит, юзер - нет. Как сделать ?


1-1103913677
Pabse
2004-12-24 21:41
2005.01.16
эдитить html





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