在TEdits
之间切换焦点时,选择会根据您显示表单的方式而改变。
当您使用Form.show
显示它并在两个TEdits
之间切换时,会选择文本。
当您使用Form.Showmodal
显示表单并在其间切换时,光标位于新聚焦的TEdit
重现:
创建一个包含2 TEdits
的新表单,在两者中键入一些文本。然后在两个TEdits
之间切换,选择整个文本,但是当我用模态显示表单时,插入符号位于文本后面。
为什么功能上存在差异?我在哪里可以改变它。
我发现代码负责了:
procedure TStyledEdit.DoEnter;
var
Form: TCommonCustomForm;
begin
inherited;
Form := TCommonCustomForm(Root);
if not Model.IsReadOnly and Model.InputSupport and not FTextService.HasMarkedText and
((Form = nil)
//next part returns false
or (Form.FormState * [TFmxFormState.Showing] = [TFmxFormState.Showing]) or
(Form.FormState = [TFmxFormState.Engaged])) then
Edit.SelectAll
else
begin
UpdateSelectionPointPositions;
UpdateCaretPosition;
end;
end;
答案 0 :(得分:0)
DoEnter是一种受保护的方法,因此您可以根据需要使用自己的方法覆盖。
您可以通过创建自己的后代类(使用不同的类型名称)以经典方式执行此操作,也可以使用此链接中所述的所谓拦截器类:interceptor classes。
我认为您需要像这样扩展if子句(但未经过测试 - 抱歉)
if not Model.IsReadOnly and Model.InputSupport and not FTextService.HasMarkedText and
((Form = nil)
or (Form.FormState * [TFmxFormState.Showing] = [TFmxFormState.Showing])
or (Form.FormState * [TFmxFormState.Modal] = [TFmxFormState.Modal])
or (Form.FormState = [TFmxFormState.Engaged])) then