当我在备忘录上打字时,如何计算字符和行数

Chr*_* K. 2 delphi firemonkey delphi-xe5

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

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;
Run Code Online (Sandbox Code Playgroud)

TLa*_*ama 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;
Run Code Online (Sandbox Code Playgroud)