Главная страница
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.5 MB
Время: 0.044 c
1-1104440915
Kolan
2004-12-31 00:08
2005.01.16
Как проверить истек ли TimeOut при работе с портом


1-1104720522
Nes
2005-01-03 05:48
2005.01.16
Как программку, которая формирует нелинейный список?


1-1104301279
Тимур
2004-12-29 09:21
2005.01.16
ListView.CustomSort


1-1103891555
swinole
2004-12-24 15:32
2005.01.16
Поиск по TreeView


1-1104055515
Jrek
2004-12-26 13:05
2005.01.16
Перетаскивание