diff options
author | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-03-15 21:17:57 +0000 |
---|---|---|
committer | graemeg <graemeg@ae50a9b5-8222-0410-bf8d-8a13f76226bf> | 2008-03-15 21:17:57 +0000 |
commit | e76e7ea8878edbd3f2ef6820d0722c929bca827f (patch) | |
tree | cde871675337977d03e9f5af5bb8d3e8a30abeae /src | |
parent | ee05419cdb81c237f21d6e81f4379cc2dca4166e (diff) | |
download | fpGUI-e76e7ea8878edbd3f2ef6820d0722c929bca827f.tar.xz |
* GDI backend did not detect Alt keypress events.
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/gdi/gfx_gdi.pas | 25 |
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 |