我正在构建一个编辑器,它使用TImage来显示图片,并且具有鼠标事件,可以在图像上绘制,移动和调整框的大小。这一切都很完美。现在我正在尝试实现使用键盘上的箭头移动所选框的能力,但是A)TImage没有获得任何焦点,并且B)TImage没有任何关键事件(因为它无法获得焦点)。我想我可以作弊并打开表单的KeyPreview属性并在那里捕获它们,但是这个表单上还有许多其他控件,我需要确保用户打算使用图像。例如,如果用户在TEdit控件中有焦点,则箭头键只会影响此备忘录,而不会修改图像。
那么有没有办法在TImage中放置或伪造某种焦点以识别关键事件?
答案 0 :(得分:4)
只有从TWinControl
继承的控件才能获得键盘焦点
TImage
从TGraphicControl
下降,无法接收键盘事件。
您可以将图像放在位于另一个控件顶部的面板顶部,例如TEdit并在选择图像时给予焦点
然后只使用不可见编辑的OnKeyPress
事件
如果您不希望将焦点更改为其他控件,请务必禁用选项卡键。
procedure TForm8.Image1Click(Sender: TObject);
begin
Edit1.SetFocus;
end;
procedure TForm8.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #9 then Key = #0; //disable tab key.
case key of
//do stuff here
end; {case}
end;