안녕하세요
MDI 의 메인 폼에서는 keypreview 가 동작을 안 하네요.
childform 에서는 되는데...
메인 폼에서 키보드 누름을 알수는 없나요?
shift / alt / ctrl 키를 조합해서 누르는 것을 할려고 하는데 안돼요..
SHIFT+ALT_F9 / CTRL+ALT_F9 이런걸 메인폼에서도 잡고 싶은데
방법 좀 알려 주세요..어딘가에서 구한 소스로는 조합키를 잡지 못합니다.
쉽게 얘기해서 CTRL+ALT_F9 하는거나 SHIFT+ALT_F9하는거나 F9를 누르는거나
동일한 결과가 나와요. 정확하게 키보드를 제어하고 싶은데..방법 좀 알려 주세요
참고로 제가 찾아서 테스트한 관련자료를 올립니다.
이걸로는 설명드린 결과만이 나오네요.
//======================================================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ChangminKeyInterceptor(var Msg: TMsg; var Handled: Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ChangminKeyInterceptor(var Msg: TMsg; var Handled: Boolean);
begin
if (Form1 <> nil) and
(Msg.Message = WM_KEYDOWN) then
begin
if (Msg.wParam = VK_DELETE) then ShowMessage('Delete 키를 눌렸다.');
if (Msg.wParam = VK_RETURN) then ShowMessage('Enter 키를 눌렸다.');
if (Msg.wParam = VK_F9) then showMessage('F9 키를 눌렀다.');
end;
if (Form1 <> nil) and
(Msg.Message = WM_KEYUP) then
begin
if (Msg.wParam = VK_DELETE) then ShowMessage('Delete 키를 뗏다.');
if (Msg.wParam = VK_RETURN) then ShowMessage('Enter 키를 뗏다.');
if (Msg.wParam = VK_F9) then ShowMessage('F9 Key 키를 뗏다.');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := ChangminKeyInterceptor;
end;
event 중 onkeydown 이벤트를 등록하고
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ( key =vk_delete) and ( shift =[ssShift]) then
showmessage('del + shift');
end;
이렇게 하면 del 키와 shift 키를 먹을 것입니다.
밑의 헥사 값을 쓸려면 key= $2E 와 같겠죠
10진 값은 key =46
밑에 키값을 정리했으니 참고하세요
이 값들은 나도 찾기 힘들어서 따로 저장해 두고 참고합니다.
좋은 하루..
Symbloic name Value(in hex) Mouse or keyboard equivalent
------------- ------------- ----------------------------
VK_LBUTTON 01 Left mouse button
VK_RBUTTON 02 Right mouse button
VK_CANCEL 03 Used for control break processing
VK_MBUTTON 04 Middle mouse button(three-button mouse)
-- 05-07 Undefined
VK_BACK 08 BACKSPACE key
VK_TAB 09 TAB key
-- 0A0B Undefined
VK_CLEAR 0C CLEAR key
VK_RETURN 0D ENTER key
-- 0E0F Undefined
VK_SHIFT 10 SHIFT key
VK_CONTROL 11 CTRL key
VK_MENU 12 ALT key
VK_PAUSE 13 PAUSE key
VK_CAPITAL 14 CAPS LOCK key
-- 15-19 Reserved for Kanji systems
-- 1A Undefined
VK_ESCAPE 1B ESC key
-- 1C-1F Reserved for Kanji systems
VK_SPACE 20 SPACEBAR
VK_PRIOR 21 PAGE UP key
VK_NEXT 22 PAGE DOWN key
VK_END 23 END key
VK_HOME 24 HOME key
VK_LEFT 25 LEFT ARROW key
VK_UP 26 UP ARROW key
VK_RIGHT 27 RIGHT ARROW key
VK_DOWN 28 DOWN ARROW key
VK_SELECT 29 SELECT key
-- 2A OEM specific
VK_EXECUTE 2B EXECUTE key
VK_SNAPSHOT 2C PRINT SCREEN key for Windows 3.0 and later
VK_INSERT 2D INS key
VK_DELETE 2E DEL key
VK_HELP 2F HELP key
VK_0 30 0 key
VK_1 31 1 key
VK_2 32 2 key
VK_3 33 3 key
VK_4 34 4 key
VK_5 35 5 key
VK_6 36 6 key
VK_7 37 7 key
VK_8 38 8 key
VK_9 39 9 key
-- 3A40 Undefined
VK_A 41 A key
VK_B 42 B key
VK_C 43 C key
VK_D 44 D key
VK_E 45 E key
VK_F 46 F key
VK_G 47 G key
VK_H 48 H key
VK_I 49 I key
VK_J 4A J key
VK_K 4B K key
VK_L 4C L key
VK_M 4D M key
VK_N 4E N key
VK_O 4F O key
VK_P 50 P key
VK_Q 51 Q key
VK_R 52 R key
VK_S 53 S key
VK_T 54 T key
VK_U 55 U key
VK_V 56 V key
VK_W 57 W key
VK_X 58 X key
VK_Y 59 Y key
VK_Z 5A Z key
-- 5B5F Undefined
VK_NUMPAD0 60 Numeric keypad 0 key
VK_NUMPAD1 60 Numeric keypad 1 key
VK_NUMPAD2 60 Numeric keypad 2 key
VK_NUMPAD3 60 Numeric keypad 3 key
VK_NUMPAD4 60 Numeric keypad 4 key
VK_NUMPAD5 60 Numeric keypad 5 key
VK_NUMPAD6 60 Numeric keypad 6 key
VK_NUMPAD7 60 Numeric keypad 7 key
VK_NUMPAD8 60 Numeric keypad 8 key
VK_NUMPAD9 60 Numeric keypad 9 key
VK_MULTIPLY 6A Numeric Multiply key
VK_ADD 6B Numeric Add key
VK_SEPARATOR 6C Numeric Separator key
VK_SUBTRACT 6D Numeric Subtract key
VK_DECIMAL 6E Decimal key
VK_DIVIDE 6F Divide key
VK_F1 70 F1 key
VK_F2 71 F2 key
VK_F3 72 F3 key
VK_F4 73 F4 key
VK_F5 74 F5 key
VK_F6 75 F6 key
VK_F7 76 F7 key
VK_F8 77 F8 key
VK_F9 78 F9 key
VK_F10 79 F10 key
VK_F11 7A F11 key
VK_F12 7B F12 key
VK_F13 7C F13 key
VK_F14 7D F14 key
VK_F15 7E F15 key
VK_F16 7F F16 key
VK_F17 80H F17 key
VK_F18 81H F18 key
VK_F19 82H F19 key
VK_F20 83H F20 key
VK_F21 84H F21 key
VK_F22 85H F22 key
VK_F23 86H F23 key
VK_F24 87H F24 key
-- 88-8F Unassigned
VK_NUMLOCK 90 NUM LOCK key
VK_SCROLL 91 SCROLL LOCK key
-- 929B Unassigned
-- BAC0 OEM specific
-- C1DA Unassigned
-- DBE4 OEM specific
-- E5 Unassigned
-- E6 OEM specific
-- E7E8 Unassigned
-- E9F5 OEM specific
-- F6FE Unassigned
------------- ------------- ----------------------------
ssShift The Shift key is held down.
ssAlt The Alt key is held down.
ssCtrl The Ctrl key is held down.
ssLeft The left mouse button is held down.
ssMiddle The middle mouse button is held down.
ssDouble The mouse was double-clicked.
델초보 wrote:
> 안녕하세요
>
> MDI 의 메인 폼에서는 keypreview 가 동작을 안 하네요.
> childform 에서는 되는데...
> 메인 폼에서 키보드 누름을 알수는 없나요?
> shift / alt / ctrl 키를 조합해서 누르는 것을 할려고 하는데 안돼요..
>
> SHIFT+ALT_F9 / CTRL+ALT_F9 이런걸 메인폼에서도 잡고 싶은데
> 방법 좀 알려 주세요..어딘가에서 구한 소스로는 조합키를 잡지 못합니다.
> 쉽게 얘기해서 CTRL+ALT_F9 하는거나 SHIFT+ALT_F9하는거나 F9를 누르는거나
> 동일한 결과가 나와요. 정확하게 키보드를 제어하고 싶은데..방법 좀 알려 주세요
>
> 참고로 제가 찾아서 테스트한 관련자료를 올립니다.
> 이걸로는 설명드린 결과만이 나오네요.
>
>
> //======================================================================
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
> StdCtrls;
>
> type
> TForm1 = class(TForm)
> procedure FormCreate(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> procedure ChangminKeyInterceptor(var Msg: TMsg; var Handled: Boolean);
> end;
>
> var
> Form1: TForm1;
>
> implementation
>
> {$R *.DFM}
>
> procedure TForm1.ChangminKeyInterceptor(var Msg: TMsg; var Handled: Boolean);
> begin
> if (Form1 <> nil) and
> (Msg.Message = WM_KEYDOWN) then
> begin
> if (Msg.wParam = VK_DELETE) then ShowMessage('Delete 키를 눌렸다.');
> if (Msg.wParam = VK_RETURN) then ShowMessage('Enter 키를 눌렸다.');
> if (Msg.wParam = VK_F9) then showMessage('F9 키를 눌렀다.');
> end;
>
> if (Form1 <> nil) and
> (Msg.Message = WM_KEYUP) then
> begin
> if (Msg.wParam = VK_DELETE) then ShowMessage('Delete 키를 뗏다.');
> if (Msg.wParam = VK_RETURN) then ShowMessage('Enter 키를 뗏다.');
> if (Msg.wParam = VK_F9) then ShowMessage('F9 Key 키를 뗏다.');
> end;
> end;
>
>
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> Application.OnMessage := ChangminKeyInterceptor;
> end;
>