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