Display number of lines in grid popup text editor

This commit is contained in:
Ansgar Becker
2018-12-12 20:05:23 +01:00
parent f589ba58a8
commit 0fb66ac295
4 changed files with 67 additions and 12 deletions

View File

@ -34,6 +34,7 @@ type
btnSearchReplace: TToolButton;
btnSearchFindNext: TToolButton;
btnSeparator1: TToolButton;
TimerMemoChange: TTimer;
procedure btnApplyClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnLoadTextClick(Sender: TObject);
@ -45,6 +46,7 @@ type
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SelectLinebreaks(Sender: TObject);
procedure TimerMemoChangeTimer(Sender: TObject);
private
{ Private declarations }
FModified: Boolean;
@ -103,8 +105,6 @@ begin
SelectLineBreaks(Detected);
FmemoText.Text := text;
FmemoText.SelectAll;
// Trigger change event, which is not fired when text is empty. See #132.
FmemoText.OnChange(FmemoText);
Modified := False;
end;
@ -117,6 +117,27 @@ begin
end;
procedure TfrmTextEditor.TimerMemoChangeTimer(Sender: TObject);
var
Lines: Cardinal;
TextLen: Integer;
MaxLen: String;
begin
// Timer based onchange handler, so we don't scan the whole text on every typed character
TimerMemoChange.Enabled := False;
TextLen := Length(FmemoText.Text);
if FmemoText.MaxLength = 0 then
MaxLen := '?'
else
MaxLen := FormatNumber(FmemoText.MaxLength);
if TextLen = 0 then
Lines := 0
else
Lines := CountLineBreaks(FmemoText.Text) + 1;
lblTextLength.Caption := f_('%s characters (max: %s), %s lines', [FormatNumber(TextLen), MaxLen, FormatNumber(Lines)]);
end;
procedure TfrmTextEditor.SelectLinebreaks(Sender: TObject);
var
Selected, Item: TMenuItem;
@ -202,6 +223,8 @@ end;
procedure TfrmTextEditor.FormShow(Sender: TObject);
begin
// Trigger change event, which is not fired when text is empty. See #132.
TimerMemoChangeTimer(Self);
FmemoText.SetFocus;
end;
@ -294,10 +317,9 @@ end;
procedure TfrmTextEditor.memoTextChange(Sender: TObject);
begin
lblTextLength.Caption := FormatNumber(Length(FmemoText.Text)) + ' characters.';
if FmemoText.MaxLength > 0 then
lblTextLength.Caption := lblTextLength.Caption + ' (Max: '+FormatNumber(FmemoText.MaxLength)+')';
Modified := True;
TimerMemoChange.Enabled := False;
TimerMemoChange.Enabled := True;
end;