mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Display number of lines in grid popup text editor
This commit is contained in:
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: HeidiSQL\n"
|
||||
"POT-Creation-Date: 2012-11-05 21:40\n"
|
||||
"PO-Revision-Date: 2018-12-08 16:06+0100\n"
|
||||
"PO-Revision-Date: 2018-12-12 20:04+0100\n"
|
||||
"Last-Translator: Ansgar Becker <anse@heidisql.com>\n"
|
||||
"Language-Team: English (http://www.transifex.com/projects/p/heidisql/language/en/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -6296,3 +6296,6 @@ msgstr "Theme: \"%s\""
|
||||
|
||||
msgid "Pixels per inch on current monitor: %d"
|
||||
msgstr "Pixels per inch on current monitor: %d"
|
||||
|
||||
msgid "%s characters (max: %s), %s lines"
|
||||
msgstr "%s characters (max: %s), %s lines"
|
||||
|
@ -266,6 +266,7 @@ type
|
||||
function IsNumeric(Str: String): Boolean;
|
||||
function esc(Text: String; ProcessJokerChars: Boolean=false; DoQuote: Boolean=True): String;
|
||||
function ScanLineBreaks(Text: String): TLineBreaks;
|
||||
function CountLineBreaks(Text: String; LineBreak: TLineBreaks=lbsWindows): Cardinal;
|
||||
function fixNewlines(txt: String): String;
|
||||
function ExtractLiteral(var SQL: String; Prefix: String): String;
|
||||
function GetShellFolder(CSIDL: integer): string;
|
||||
@ -683,7 +684,7 @@ end;
|
||||
}
|
||||
function ScanLineBreaks(Text: String): TLineBreaks;
|
||||
var
|
||||
i: integer;
|
||||
i, SeekSize: Integer;
|
||||
c: Char;
|
||||
procedure SetResult(Style: TLineBreaks);
|
||||
begin
|
||||
@ -697,12 +698,14 @@ var
|
||||
end;
|
||||
begin
|
||||
Result := lbsNone;
|
||||
if length(Text) = 0 then exit;
|
||||
SeekSize := Min(Length(Text), SIZE_MB);
|
||||
if SeekSize = 0 then
|
||||
Exit;
|
||||
i := 1;
|
||||
repeat
|
||||
c := Text[i];
|
||||
if c = #13 then begin
|
||||
if (i < length(Text)) and (Text[i+1] = #10) then begin
|
||||
if (i < SeekSize) and (Text[i+1] = #10) then begin
|
||||
Inc(i);
|
||||
SetResult(lbsWindows);
|
||||
end else
|
||||
@ -715,7 +718,29 @@ begin
|
||||
// No need to do more checks after detecting mixed style
|
||||
if Result = lbsMixed then
|
||||
break;
|
||||
until i > length(Text);
|
||||
until i > SeekSize;
|
||||
end;
|
||||
|
||||
|
||||
function CountLineBreaks(Text: String; LineBreak: TLineBreaks=lbsWindows): Cardinal;
|
||||
var
|
||||
Offset: Integer;
|
||||
BreakStr: String;
|
||||
begin
|
||||
// Count number of given line breaks in text
|
||||
Result := 0;
|
||||
case LineBreak of
|
||||
lbsWindows: BreakStr := CRLF;
|
||||
lbsUnix: BreakStr := LB_UNIX;
|
||||
lbsMac: BreakStr := LB_MAC;
|
||||
lbsWide: BreakStr := LB_WIDE;
|
||||
else Exit;
|
||||
end;
|
||||
Offset := PosEx(BreakStr, Text, 1);
|
||||
while Offset <> 0 do begin
|
||||
Inc(Result);
|
||||
Offset := PosEx(BreakStr, Text, Offset + Length(BreakStr));
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
@ -31,13 +31,12 @@ object frmTextEditor: TfrmTextEditor
|
||||
Caption = 'Panel1'
|
||||
ShowCaption = False
|
||||
TabOrder = 0
|
||||
ExplicitWidth = 332
|
||||
object lblTextLength: TLabel
|
||||
AlignWithMargins = True
|
||||
Left = 210
|
||||
Top = 3
|
||||
Width = 65
|
||||
Height = 13
|
||||
Height = 16
|
||||
Align = alLeft
|
||||
BiDiMode = bdLeftToRight
|
||||
Caption = 'lblTextLength'
|
||||
@ -177,4 +176,10 @@ object frmTextEditor: TfrmTextEditor
|
||||
ImageIndex = 59
|
||||
end
|
||||
end
|
||||
object TimerMemoChange: TTimer
|
||||
Interval = 500
|
||||
OnTimer = TimerMemoChangeTimer
|
||||
Left = 120
|
||||
Top = 16
|
||||
end
|
||||
end
|
||||
|
@ -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;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user