关注TImage上的重要事件?

时间:2011-12-11 22:03:00

标签: delphi keyboard focus delphi-7

我正在构建一个编辑器,它使用TImage来显示图片,并且具有鼠标事件,可以在图像上绘制,移动和调整框的大小。这一切都很完美。现在我正在尝试实现使用键盘上的箭头移动所选框的能力,但是A)TImage没有获得任何焦点,并且B)TImage没有任何关键事件(因为它无法获得焦点)。我想我可以作弊并打开表单的KeyPreview属性并在那里捕获它们,但是这个表单上还有许多其他控件,我需要确保用户打算使用图像。例如,如果用户在TEdit控件中有焦点,则箭头键只会影响此备忘录,而不会修改图像。

那么有没有办法在TImage中放置或伪造某种焦点以识别关键事件?

1 个答案:

答案 0 :(得分:4)

只有从TWinControl继承的控件才能获得键盘焦点 TImageTGraphicControl下降,无法接收键盘事件。

您可以将图像放在位于另一个控件顶部的面板顶部,例如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;