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

时间:2013-11-06 16:55:05

标签: 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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:-1)

Text1.Text := 'Lines: ' + Memo1.Lines.Count.ToString;
Text2.Text := 'Characters: ' + Memo1.Lines.Text.Length.ToString;