Firemonkey TEdit 大写

Posted

技术标签:

【中文标题】Firemonkey TEdit 大写【英文标题】:Firemonkey TEdit Uppercase 【发布时间】:2014-09-28 23:53:56 【问题描述】:

我在 android 中遇到 Firemonkey TEdit Uppercase 的问题。

代码:

过程 TFormMain.Edit1KeyDown(发件人:TObject;var Key:Word; var KeyChar:字符;移位:TShiftState); 开始 KeyChar := UpCase(KeyChar); 结尾;

在 Win32 中它可以工作,但在 Android 中它不工作。

【问题讨论】:

我们不知道这段代码在哪里,在什么上下文中运行。 我在Edit1KeyDown中添加了 请编辑 Q 以包含代码 【参考方案1】:

您必须使用 ChangeTracking 事件。效果很好

此代码适用于 Android

procedure TFormMain.Edit1Typing(Sender: TObject);
begin
  Edit1.Text:=AnsiUpperCase(Edit1.Text);
  Edit1.GoToTextEnd;
end;

此代码适用于 Windows

procedure TFormMain.Edit1ChangeTracking(Sender: TObject);
var
  thetext: String;
begin
  thetext := Edit1.Text;
  Edit1.OnChangeTracking := nil;
  Edit1.Text := '';
  Edit1.Text := AnsiUpperCase(thetext);
  Edit1.OnChangeTracking := Edit1ChangeTracking;
  Edit1.GoToTextEnd;
end;

【讨论】:

谢谢!我会试试的。 对不起.. 我犯了一个错误。不幸的是,它仅适用于 Windows 平台。让我更好地调查。 好的,我找到了解决方案。看看我上面编辑的代码 Android 的解决方案(上)在 Android 和 Windows 上的 Delphi 10.1 Berlin 中工作,无需使用 GoToTextEnd【参考方案2】:

对字符串使用 ToUpper (Documentation) 或 AnsiUpperCase (Documentation)。

更新:你为什么使用 OnKeyDown?根据Documentation,您必须使用 OnChangeTracking:“此事件提供了第一个机会来响应用户对编辑控件文本的修改。”

所以放入 OnChangeTracking 之类的东西

procedure TFormMain.Edit1ChangeTracking(Sender: TObject);
begin
  Edit1.text:= AnsiUpperCase(Edit1.text);
end;

【讨论】:

UpCase 工作正常。在决定解决方案之前,您需要诊断并了解问题。 我想在 TEdit 上自动大写所有输入的字母。无论如何,有没有一种键盘类型设置所有大写字母的方法? @edmund 我们了解您想要做什么,但您还没有给我们足够的信息来理解为什么您的代码没有按您希望的那样运行。 @DavidHeffernan 抱歉,当用户在 Edit1 上输入时,全部大写。 @LHristov 它在 Android 上不工作,但在 Win32 上工作。

以上是关于Firemonkey TEdit 大写的主要内容,如果未能解决你的问题,请参考以下文章

如何滚动 Firemonkey TListBox 而不在其控件中捕获焦点?

[修正] Firemonkey Android Edit 可输入 Emoji (颜文字)

FMX:展平多个图像

TEdit 和 TCheckBox 验证

在 Tedit Delphi 中更改字符

如何让TEdit在获取输入焦点后selectAll?