Форум: "Основная";
Текущий архив: 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