【发布时间】: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