【问题标题】:How to change default focus behaviour in firemonkey control如何更改firemonkey控件中的默认焦点行为
【发布时间】:2013-06-20 14:10:38
【问题描述】:

我创建了一个自定义 Styledcontrol 后代,由 3 个代表日期(日/月/小时)的 TEdit 组成,编辑是我的 .style 文件的一部分

当控件获得焦点时,第一个 Edit 应该获得焦点。其他编辑永远不应该通过标签获得焦点。他们在样式文件中有 tabstop = false 。

constructor TPWCalendar.Create(AOwner: TComponent);
Oncanfocus:=FocusEdit;

procedure TPWCalendar.FocusEdit(Sender: TObject; var ACanFocus: Boolean);
begin
  ACanFocus:=false;
  if Findedits then
    if not FDayEdit.isfocused then
      FDayEdit.SetFocus;
end;

这可行,但是当其中一个子编辑被聚焦时,我按下 Tab,第一个创建的自定义控件的第一个编辑被选中。 如何使其具有默认行为并像选择 1 个控件一样选择下一个控件?(所以无论焦点在控件的哪个位置 - edit1、edit2 或 edit3,按 Tab 应该选择下一个控制)。

PS:有没有像样的firemonkey组件教程?考虑造型等。

我已经更新了问题

【问题讨论】:

  • 编辑事件不适用于导航键 Tab,因为这些不会触发键盘事件。唯一指向这一事实的地方。Delphi Help TCustomForm.KeyPreview。而我的回答tab event in TEdit
  • @moskito-x,这是 Firemonkey 而不是 VCL。
  • @PeterVonča:行为是一样的。在此处查找KeyUp 事件How to trap TAB keypresses on FireMonkey form
  • @moskito-x,Firemonkey 中没有 keyPreview 表单属性。这就是为什么我说了我说的话。但是,是的,您在 Keyup 事件中捕获 Tab 是正确的。
  • 如果您在组件中覆盖过程 DialogKey,您可以控制 Tab 键上的行为。 DialogKey 是从 KeyDown 上的表单调用的。

标签: delphi custom-component firemonkey delphi-xe4 firemonkey-fm3


【解决方案1】:

我已经解决了主要问题。

通过设置私有 oncanfocusEvent,第一个孩子 (FDayEdit) 被选中。 然后我覆盖DialogKey,当我的一个孩子集中注意力时,主要组件获得焦点(注意这会触发oncanfocusevent)。然后使用继承调用默认行为。

感谢 slomoto 向我展示了正确的方向。

PS:FindEdits 从 styleresource 中分配 Edits,如果失败则返回 false。

这是 oncanfocusEvent:

procedure TPWCalendar.FocusEdit(Sender: TObject; var ACanFocus: Boolean);
begin
  if findedits and ( fDayEdit.IsFocused or FMonthEdit.IsFocused or FYearEdit.IsFocused)
    then aCanFocus:=true
    else begin
      ACanFocus:=false;
      if Findedits then
        FDayEdit.SetFocus;
    end;
end;

那么这就是DialogKey事件

procedure TPWCalendar.DialogKey(var Key: Word; Shift: TShiftState);
begin
  if key=vktab then
    if ischildfocused then begin
      self.SetFocus;
      inherited;
    end;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2023-03-12
    相关资源
    最近更新 更多