Add support for \t and \n for replacement in search+replace dialog. Accepting a multi line bug in SynEdit, which forces the user to search backwards when using \n in replacement. See http://www.heidisql.com/forum.php?t=8977

This commit is contained in:
Ansgar Becker
2011-08-18 06:41:49 +00:00
parent d19fc1cf0e
commit fe2d5149a5
3 changed files with 29 additions and 10 deletions

View File

@ -3188,21 +3188,30 @@ procedure TMainForm.DoSearchReplace;
var
Occurences: Integer;
OldCaretXY: TBufferCoord;
Replacement: String;
begin
if FSearchReplaceDialog.chkRegularExpression.Checked then
FSearchReplaceDialog.Editor.SearchEngine := SynEditRegexSearch1
else
FSearchReplaceDialog.Editor.SearchEngine := SynEditSearch1;
OldCaretXY := FSearchReplaceDialog.Editor.CaretXY;
Replacement := FSearchReplaceDialog.comboReplace.Text;
Replacement := StringReplace(Replacement, '\n', CRLF, [rfReplaceAll]);
Replacement := StringReplace(Replacement, '\t', #9, [rfReplaceAll]);
FSearchReplaceDialog.Editor.BeginUpdate;
ShowStatusMsg('Searching ...');
Occurences := FSearchReplaceDialog.Editor.SearchReplace(
FSearchReplaceDialog.comboSearch.Text,
FSearchReplaceDialog.comboReplace.Text,
Replacement,
FSearchReplaceDialog.Options
);
FSearchReplaceDialog.Editor.EndUpdate;
ShowStatusMsg;
if ssoReplaceAll in FSearchReplaceDialog.Options then
ShowStatusMsg('Text "'+FSearchReplaceDialog.comboSearch.Text+'" '+FormatNumber(Occurences)+' times replaced.', 0)
else begin

View File

@ -3,7 +3,7 @@ object frmSearchReplace: TfrmSearchReplace
Top = 0
BorderStyle = bsDialog
Caption = 'Search and replace text'
ClientHeight = 236
ClientHeight = 256
ClientWidth = 388
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
@ -19,7 +19,7 @@ object frmSearchReplace: TfrmSearchReplace
OnShow = FormShow
DesignSize = (
388
236)
256)
PixelsPerInch = 96
TextHeight = 13
object lblSearch: TLabel
@ -30,9 +30,17 @@ object frmSearchReplace: TfrmSearchReplace
Caption = '&Text to find:'
FocusControl = comboSearch
end
object lblReplaceHint: TLabel
Left = 90
Top = 58
Width = 259
Height = 13
Caption = 'Replacement can have \n for new lines and \t for tabs'
Enabled = False
end
object btnCancel: TButton
Left = 305
Top = 203
Top = 223
Width = 75
Height = 25
Anchors = [akRight, akBottom]
@ -43,7 +51,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object btnReplaceAll: TButton
Left = 224
Top = 203
Top = 223
Width = 75
Height = 25
Anchors = [akRight, akBottom]
@ -85,7 +93,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object grpOptions: TGroupBox
Left = 8
Top = 60
Top = 80
Width = 372
Height = 69
Anchors = [akLeft, akTop, akRight]
@ -129,7 +137,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object grpDirection: TRadioGroup
Left = 8
Top = 135
Top = 155
Width = 120
Height = 62
Anchors = [akLeft, akTop, akBottom]
@ -142,7 +150,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object grpOrigin: TRadioGroup
Left = 134
Top = 135
Top = 155
Width = 120
Height = 62
Anchors = [akLeft, akTop, akBottom]
@ -155,7 +163,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object grpScope: TRadioGroup
Left = 260
Top = 135
Top = 155
Width = 120
Height = 62
Anchors = [akLeft, akTop, akRight, akBottom]
@ -168,7 +176,7 @@ object frmSearchReplace: TfrmSearchReplace
end
object btnOK: TButton
Left = 143
Top = 203
Top = 223
Width = 75
Height = 25
Anchors = [akRight, akBottom]

View File

@ -23,6 +23,7 @@ type
grpOrigin: TRadioGroup;
grpScope: TRadioGroup;
btnOK: TButton;
lblReplaceHint: TLabel;
procedure ValidateControls(Sender: TObject);
procedure chkReplaceClick(Sender: TObject);
procedure FormShow(Sender: TObject);
@ -122,6 +123,7 @@ begin
comboReplace.Enabled := chkReplace.Checked;
chkPromptOnReplace.Enabled := chkReplace.Checked;
btnReplaceAll.Enabled := chkReplace.Checked;
lblReplaceHint.Enabled := chkReplace.Checked;
if chkReplace.Checked then
btnOK.Caption := 'Replace'
else