spiegel-keyman/windows/src/support/keycodetester/main.pas
Marc Durdin b65b982584 Keyman Desktop and Keyman Developer open source 10.0 alpha seed (#121)
* Keyman for Windows 10.0 Open Source

* Squashed 'windows/src/ext/jedi/jedi/' content from commit f444ad2

git-subtree-dir: windows/src/ext/jedi/jedi
git-subtree-split: f444ad2da4693851e523f1ea6bd541f701904c24

* Squashed 'windows/src/ext/jedi/jcl/' content from commit d63d3c9fd

git-subtree-dir: windows/src/ext/jedi/jcl
git-subtree-split: d63d3c9fd9ff84efdd8159084ec6a60313644243

* Squashed 'windows/src/ext/jedi/jvcl/' content from commit bee19f3b4

git-subtree-dir: windows/src/ext/jedi/jvcl
git-subtree-split: bee19f3b46909fde2fa92c06cd2706f41d99f6c3

* Add required .res files

* Add required .res files

* Add docbook files (forced)

* Add required libxslt

* Add required jedi files

* Add installation files

* Tweak .gitignore for open

* CI

* Remove KMW from Developer source (#122)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Remove KMW from Developer source (copies during build)

* Fixup release build and copy license, readme from kmw during build

* Remove obsolete build help documentation

* Keyman Engine 10 on Windows regression for shift states (#129)

* Improve #128 -- cleaner debug messages

* Fixes #127, shift state now resets correctly; and more work for #128

* Fixes #130 (#131)
2017-07-25 10:53:06 +07:00

83 lines
1.9 KiB
ObjectPascal

unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
memoLog: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure AppMsg(var Message: Tmsg; var Handled: Boolean);
procedure LogKeyEvent(msg: Cardinal; wParam, lParam: Integer);
procedure LogKeyPress(msg: Cardinal; wParam, lParam: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
application.OnMessage := AppMsg;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Application.OnMessage := nil;
end;
procedure TForm1.AppMsg(var Message: Tmsg; var Handled: Boolean);
begin
Handled := False;
case Message.message of
WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, WM_SYSKEYUP:
if Message.hwnd = memo1.Handle then LogKeyEvent(Message.message, Message.wParam, Message.lParam);
WM_CHAR, WM_SYSCHAR:
if Message.hwnd = memo1.Handle then LogKeyPress(Message.message, Message.wParam, Message.lParam);
end;
end;
procedure TForm1.LogKeyPress(msg: Cardinal; wParam, lParam: Integer);
begin
end;
procedure TForm1.LogKeyEvent(msg: Cardinal; wParam, lParam: Integer);
var
amsg: string;
sc: DWord;
ext: Integer;
bt: TKeyboardState;
buf: array[0..2] of Word;
ch: Char;
chs: string;
begin
if Msg = WM_KEYDOWN then
amsg := 'WM_KEYDOWN' else amsg := 'WM_KEYUP';
sc := (lParam and $00FF0000) shr 16;
if (lParam and $01000000) = $1000000 then ext := 1 else ext := 0;
GetKeyboardState(bt);
ToAscii(wParam, sc, bt, @buf, 0);
ch := Chr(buf[0]); if ch = #0 then chs := '' else chs := ch;
memoLog.Lines.Add(Format('%s: key: 0x%x scan: 0x%x ext: %d char: ''%s'' [0x%08.8X, 0x%08.8x]',
[amsg, wParam, sc, ext, chs, wParam, lParam]));
end;
end.