summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-03-15 21:17:57 +0000
committergraemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf>2008-03-15 21:17:57 +0000
commite76e7ea8878edbd3f2ef6820d0722c929bca827f (patch)
treecde871675337977d03e9f5af5bb8d3e8a30abeae /src
parentee05419cdb81c237f21d6e81f4379cc2dca4166e (diff)
downloadfpGUI-e76e7ea8878edbd3f2ef6820d0722c929bca827f.tar.xz
* GDI backend did not detect Alt keypress events.
Diffstat (limited to 'src')
-rw-r--r--src/corelib/gdi/gfx_gdi.pas25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/corelib/gdi/gfx_gdi.pas b/src/corelib/gdi/gfx_gdi.pas
index 41505413..a9d05438 100644
--- a/src/corelib/gdi/gfx_gdi.pas
+++ b/src/corelib/gdi/gfx_gdi.pas
@@ -367,6 +367,20 @@ begin
((Win32MajorVersion >= 6) and (Win32MinorVersion >= 0)));
end;
+function WinkeystateToShiftstate(keystate: cardinal): TShiftState;
+begin
+ result:= [];
+ if GetKeyState(vk_menu) < 0 then begin
+ Include(result, ssAlt);
+ end;
+ if GetKeyState(vk_shift) < 0 then begin
+ Include(result, ssShift);
+ end;
+ if GetKeyState(vk_control) < 0 then begin
+ Include(result, ssCtrl);
+ end;
+end;
+
function fpgWindowProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
w: TfpgWindowImpl;
@@ -508,7 +522,9 @@ begin
case uMsg of
WM_CHAR,
WM_KEYUP,
- WM_KEYDOWN:
+ WM_SYSKEYUP,
+ WM_KEYDOWN,
+ WM_SYSKEYDOWN:
begin
{$IFDEF DEBUG} write(w.ClassName + ': '); {$ENDIF}
{$IFDEF DEBUG} writeln('wm_char, wm_keyup, wm_keydown'); {$ENDIF}
@@ -516,10 +532,11 @@ begin
if kwg <> nil then
w := kwg;
- msgp.keyboard.shiftstate := GetKeyboardShiftState;
+ msgp.keyboard.shiftstate := WinkeystateToShiftstate(lparam);
+// msgp.keyboard.shiftstate := GetKeyboardShiftState;
msgp.keyboard.keycode := VirtKeyToKeycode(wParam);
- if uMsg = WM_KEYDOWN then
+ if (uMsg = WM_KEYDOWN) or (uMsg = WM_SYSKEYDOWN) then
begin
fpgSendMessage(nil, w, FPGM_KEYPRESS, msgp);
@@ -556,7 +573,7 @@ begin
// end;
end
- else if uMsg = WM_KEYUP then
+ else if (uMsg = WM_KEYUP) or (uMsg = WM_SYSKEYUP) then
fpgSendMessage(nil, w, FPGM_KEYRELEASE, msgp)
else if uMsg = WM_CHAR then
begin