2

我编写了以下代码来计算用户输入时的行数和字符数。但它有一个问题,它在用户输入第一个字符后开始计数,当他按下退格键时它会增加计数器然后开始减少它。

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  Shift: TShiftState);
begin
  Text1.Text := 'Lines: ' + IntToStr (Memo1.Lines.Count);
  Text2.Text := 'Characters: ' + IntToStr (Length(Memo1.Text));
end;
4

2 回答 2

6

OnChangeTracking为事件编写一个处理程序。我第一次在这里发表评论时错过了您正在编写 FMX 应用程序,因此我使用该OnChange事件的建议是错误的。您可以在 VCL 项目中使用它,但在 FMX 中OnChange具有不同的含义。

OnChangeTracking各州参考:

在修改备忘录控件中的文本时发生。编写 OnChangeTracking 事件处理程序以立即响应对备忘录控件中的文本所做的任何更改。备忘录控件的 Text 属性已经更新以反映任何更改。此事件提供了第一个机会来响应用户通过在备忘录控件中键入所做的修改。

OnChangeTracking 和 OnChange 之间的区别在于 OnChangeTracking 发生在备忘录控件中的文本每次修改时。

因此,如果您将代码移动到OnChangeTracking事件处理程序,您应该让它工作:

procedure TForm1.Memo1ChangeTracking(Sender: TObject);
begin
  Text1.Text := 'Lines: ' + IntToStr (Memo1.Lines.Count);
  Text2.Text := 'Characters: ' + IntToStr (Length(Memo1.Text));
end;
于 2013-11-06T18:44:32.057 回答
-1
Text1.Text := 'Lines: ' + Memo1.Lines.Count.ToString;
Text2.Text := 'Characters: ' + Memo1.Lines.Text.Length.ToString;
于 2016-11-27T23:31:29.687 回答