2013-11-06 2 views
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; 
+0

Делают это с 'OnChange' события. – TLama

+0

Когда я делаю это в событии OnChange, он не обновляется, кроме случаев, когда я нажимаю enter. –

+0

Сделайте это в 'OnKeyUp'. –

ответ

6

Написать обработчик для события OnChangeTracking. В первый раз, когда я оставил свой комментарий здесь, я пропустил, что вы пишете приложение FMX, поэтому мое предложение использовать событие OnChange было неправильным. Вы можете использовать его в проекте VCL, но в FMX OnChange имеет другое значение.

Ссылка для OnChangeTracking состояний:

Происходит, когда текст в элементе управления памятка модифицируется. Напишите обработчик события OnChangeTracking , чтобы немедленно отреагировать на любые изменения , сделанные в тексте в контроле заметок. Свойство Text для memo будет уже обновлено, чтобы отразить любые изменения. Это событие предоставляет первую возможность ответить на изменения, внесенные пользователем , введя его в блокнот.

Разница между 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; 
+0

Для большого контента оценка количества символов будет больно. –

+0

@ Давид, я не знаю, как это реализовано в FMX. – TLama

+0

Это же TStrings –

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