![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка OnKeyPressed [D5]
greenrul © (2002-03-06 17:29:00)Работаю с компонентой GpSysHook которая при нажатии клавиши выдает её Integer значение - как из него в строке получить F12,Shift и прочее?
пример как я делал:
case VirtualKeyCode of
17:str:=str+"Ctrl+";
16:str:=str+"Shift+";
18:str:=str+"Alt+";
end;
Чтобы вот так все нестандартные клавиши не обрабатывать а сразу в текст "обращались"
Как мне дядюшка Help рассказалChr(VirtualKeyCode)выдает текстовое "значение" но только для БУКВ - F11,Ctrl и прочие в эту категорию не попадают 8(
P*L*E*A*S*E**H*E*L*P!!!
greenrul (2002-03-07 15:05:00) [1]У*Р*А!!
Спасибо тебе, McSimm!
MBo (2002-03-07 14:57:00) [2]не вдаваясь глубоко, посоветую завести константный массив, внеся в него под индексом соотв. строчки
McSimm (2002-03-07 14:55:00) [3]Не знаю, получше или нет, попробуй
ShortCutToText(ShortCut(Key, []))
greenrul (2002-03-07 14:51:00) [4]Есть спосов получше или мне писать процедурку с 101 строчкой кода 8)?
greenrul (2002-03-07 14:41:00) [5]Господа, примите мои искренние извинения 8(
1.
procedure TMainForm.HookKeyAction(Sender: TObject; VirtualKeyCode: Integer;
RepeatCount: Word; ScanCode: Byte; isExtendedKey, altIsDown,
keyWasDownBefore, keyIsBeingPressed: Boolean; var filterEvent: Boolean);
var ar:array[0..255] of char; ps:PChar;
begin
GetKeyNameText(VirtualKeyCode,@ar[0],256);
ps:=ar;
ShowMessage(ps);
end;
2.
procedure TMainForm.HookKeyAction(Sender: TObject; VirtualKeyCode: Integer;
RepeatCount: Word; ScanCode: Byte; isExtendedKey, altIsDown,
keyWasDownBefore, keyIsBeingPressed: Boolean; var filterEvent: Boolean);
var p: PChar;
begin
GetMem(p, 50);
GetKeyNameText(VirtualKeyCode, p, 50);
ShowMessage(string(p));
end;
НЕ ПОМОГАЕТ....
greenrul (2002-03-06 18:01:00) [6]Спасибо
DieHard (2002-03-06 18:00:00) [7]var ar:array[0..255] of char;
ps:PChar;
...
GetKeyNameText(VirtualKeyCode,@ar[0],256);
ps:=ar;
ShowMessage(ps);
Виктор Щербаков (2002-03-06 17:59:00) [8]Разбираться с компонентом некогда. Вот рабочий пример:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TForm1 }
procedure TForm1.WMKeyDown(var Message: TWMKeyDown);
var p: PChar;
begin
GetMem(p, 50);
GetKeyNameText(Message.KeyData, p, 50);
Form1.Caption := string(p);
FreeMem(p);
end;
end.
greenrul (2002-03-06 17:54:00) [9]
int GetKeyNameText(
LONG lParam, // second parameter of keyboard message
LPTSTR lpString, // address of buffer for key name
int nSize // maximum length of key-name string length
);
Уже читал ..
у меня с английским ничего, конечно... но...
короче я новичок, если можете помочь, помогите 8)
greenrul (2002-03-06 17:52:00) [10]Даже если в качестве третьего параметра идет 100 или иное число
Виктор Щербаков (2002-03-06 17:52:00) [11]Ты бы хоть прочитал про эту функцию в SDK!
Или пытаешься угадать смысл её параметров.
greenrul (2002-03-06 17:50:00) [12]
var s:string;
...
GetKeyNameText(VirtualKeyCode,PChar(s),0);
ShowMessage(s);
не помогает 8(
а функцияGetKeyNameTextвсегда 0 возвращает 8(
greenrul (2002-03-06 17:43:00) [13]СПАСИБО!
иду тестить
Виктор Щербаков (2002-03-06 17:35:00) [14]GetKeyNameText