delphi里的IMAGE控件怎么响应键盘

 我来答
龙氏风采
2017-11-16 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12819
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部
众所周知,Delphi中的Image是没有键盘事件的,但是在很多应用程序中(特别是个人版的桌面软件),对界面美观要求比较高的,都会使用图片来做UI,这样就直接把Form给覆盖住了。但同时我们又希望能使用F1来显示帮助、或者使用回车/空格来按下一个图片按钮。可是,Image却偏偏没有键盘事件,那我们怎么办呢?
其实Image没有键盘事件,也没有关系的。我们同样用Form的OnKeyDown事件中来接收键盘事件。不过注意:1). 不能实现Form的OnKeyPress事件,否则将会产生冲突,而无法响应键盘事件。2). 需要设置Form的KeyPreview属性为False,以保证不只接收Form的键盘事件。例如:
楼主
jlvhj(吻星揽月)
2006-09-05 16:22:27 在 Delphi / 非技术区 提问
我现在在一个delphi窗体上覆盖了一个Image控件,可是Image控件的事件里没有键盘的响应函数,不知道压哦怎么解决,希望大虾们赐教啊!! 问题点数:20、回复次数:8To
直接写再窗体的onKeyPress上 procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin ShowMessage('on key press'+key); end; 或者截获wm_keydown消息To
直接写在窗体的onKeyPress上我试了不行啊?我现在是在Image控件上又加了个Image控件,一个是作为背景,另一个才是要响应键盘信息的。 To
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } public procedure MyonMessage(var Msg: tagMSG; var Handled: Boolean); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyonMessage(var Msg: tagMSG; var Handled: Boolean); begin if msg.message = WM_KEYDOWN then Caption := 'OnKeyDown:'+chr(msg.wParam)+':'+inttostr(Msg.wParam); end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := MyonMessage; end; end. To
我是想按一下向左健能使Image控件向左移动一下,实现微调功能,这样的话哪里去触发这个事件呢??上面的大虾好象不能解决吧??!!To
我是想按一下向左健能使Image控件向左移动一下,实现微调功能 把上面代码稍微改一下就可以了。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } public procedure MyonMessage(var Msg: tagMSG; var Handled: Boolean); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyonMessage(var Msg: tagMSG; var Handled: Boolean); begin if (msg.message = WM_KEYDOWN) then begin case Msg.wParam of VK_LEFT : Image2.Left := Image2.Left-1; VK_RIGHT : Image2.Left := Image2.Left+1; end; end; // Caption := 'OnKeyDown:'+chr(msg.wParam)+':'+inttostr(Msg.wParam); end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := MyonMessage; end; end. To
//上面代码在连续操作的时候,会有闪烁,在create的时候,加上下面的内容 procedure TForm1.FormCreate(Sender: TObject); begin DoubleBuffered := true;//加上这一句。 Application.OnMessage := MyonMessage; end; end. To
谢谢!
================================================
最后,附上键盘的键值:
================================================
VK_LBUTTON = 1; VK_RBUTTON = 2; VK_CANCEL = 3; VK_MBUTTON = 4; VK_BACK = 8; VK_TAB = 9; VK_CLEAR = 12; VK_RETURN = 13; VK_SHIFT = $10; VK_CONTROL = 17; VK_MENU = 18; VK_PAUSE = 19; VK_CAPITAL = 20; VK_ESCAPE = 27; VK_SPACE = $20; VK_PRIOR = 33; VK_NEXT = 34; VK_END = 35; VK_HOME = 36; VK_LEFT = 37; VK_UP = 38; VK_RIGHT = 39; VK_DOWN = 40; VK_SELECT = 41; VK_PRINT = 42; VK_EXECUTE = 43; VK_SNAPSHOT = 44; VK_INSERT = 45; VK_DELETE = 46; VK_HELP = 47; { VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39) } { VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A) } VK_LWIN = 91; VK_RWIN = 92; VK_APPS = 93; VK_NUMPAD0 = 96; VK_NUMPAD1 = 97; VK_NUMPAD2 = 98; VK_NUMPAD3 = 99; VK_NUMPAD4 = 100; VK_NUMPAD5 = 101; VK_NUMPAD6 = 102; VK_NUMPAD7 = 103; VK_NUMPAD8 = 104; VK_NUMPAD9 = 105; VK_MULTIPLY = 106; VK_ADD = 107; VK_SEPARATOR = 108; VK_SUBTRACT = 109; VK_DECIMAL = 110; VK_DIVIDE = 111; VK_F1 = 112; VK_F2 = 113; VK_F3 = 114; VK_F4 = 115; VK_F5 = 116; VK_F6 = 117; VK_F7 = 118; VK_F8 = 119; VK_F9 = 120; VK_F10 = 121; VK_F11 = 122; VK_F12 = 123; VK_F13 = 124; VK_F14 = 125; VK_F15 = 126; VK_F16 = 127; VK_F17 = 128; VK_F18 = 129; VK_F19 = 130; VK_F20 = 131; VK_F21 = 132; VK_F22 = 133; VK_F23 = 134; VK_F24 = 135; VK_NUMLOCK = 144; VK_LSHIFT = 160; VK_RSHIFT = 161; VK_LCONTROL = 162; VK_RCONTROL = 163; VK_LMENU = 164; VK_RMENU = 165; VK_PROCESSKEY = 229; VK_ATTN = 246; VK_CRSEL = 247; VK_EXSEL = 248; VK_EREOF = 249; VK_PLAY = 250; VK_ZOOM = 251; VK_NONAME = 252; VK_PA1 = 253; VK_OEM_CLEAR = 254
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-06-20
展开全部
使用ImageEn这个控件去加载图片,添加一个定时器timer
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式