mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
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:
@ -3188,21 +3188,30 @@ procedure TMainForm.DoSearchReplace;
|
|||||||
var
|
var
|
||||||
Occurences: Integer;
|
Occurences: Integer;
|
||||||
OldCaretXY: TBufferCoord;
|
OldCaretXY: TBufferCoord;
|
||||||
|
Replacement: String;
|
||||||
begin
|
begin
|
||||||
if FSearchReplaceDialog.chkRegularExpression.Checked then
|
if FSearchReplaceDialog.chkRegularExpression.Checked then
|
||||||
FSearchReplaceDialog.Editor.SearchEngine := SynEditRegexSearch1
|
FSearchReplaceDialog.Editor.SearchEngine := SynEditRegexSearch1
|
||||||
else
|
else
|
||||||
FSearchReplaceDialog.Editor.SearchEngine := SynEditSearch1;
|
FSearchReplaceDialog.Editor.SearchEngine := SynEditSearch1;
|
||||||
|
|
||||||
OldCaretXY := FSearchReplaceDialog.Editor.CaretXY;
|
OldCaretXY := FSearchReplaceDialog.Editor.CaretXY;
|
||||||
|
Replacement := FSearchReplaceDialog.comboReplace.Text;
|
||||||
|
Replacement := StringReplace(Replacement, '\n', CRLF, [rfReplaceAll]);
|
||||||
|
Replacement := StringReplace(Replacement, '\t', #9, [rfReplaceAll]);
|
||||||
|
|
||||||
FSearchReplaceDialog.Editor.BeginUpdate;
|
FSearchReplaceDialog.Editor.BeginUpdate;
|
||||||
|
|
||||||
ShowStatusMsg('Searching ...');
|
ShowStatusMsg('Searching ...');
|
||||||
Occurences := FSearchReplaceDialog.Editor.SearchReplace(
|
Occurences := FSearchReplaceDialog.Editor.SearchReplace(
|
||||||
FSearchReplaceDialog.comboSearch.Text,
|
FSearchReplaceDialog.comboSearch.Text,
|
||||||
FSearchReplaceDialog.comboReplace.Text,
|
Replacement,
|
||||||
FSearchReplaceDialog.Options
|
FSearchReplaceDialog.Options
|
||||||
);
|
);
|
||||||
|
|
||||||
FSearchReplaceDialog.Editor.EndUpdate;
|
FSearchReplaceDialog.Editor.EndUpdate;
|
||||||
ShowStatusMsg;
|
ShowStatusMsg;
|
||||||
|
|
||||||
if ssoReplaceAll in FSearchReplaceDialog.Options then
|
if ssoReplaceAll in FSearchReplaceDialog.Options then
|
||||||
ShowStatusMsg('Text "'+FSearchReplaceDialog.comboSearch.Text+'" '+FormatNumber(Occurences)+' times replaced.', 0)
|
ShowStatusMsg('Text "'+FSearchReplaceDialog.comboSearch.Text+'" '+FormatNumber(Occurences)+' times replaced.', 0)
|
||||||
else begin
|
else begin
|
||||||
|
@ -3,7 +3,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
Top = 0
|
Top = 0
|
||||||
BorderStyle = bsDialog
|
BorderStyle = bsDialog
|
||||||
Caption = 'Search and replace text'
|
Caption = 'Search and replace text'
|
||||||
ClientHeight = 236
|
ClientHeight = 256
|
||||||
ClientWidth = 388
|
ClientWidth = 388
|
||||||
Color = clBtnFace
|
Color = clBtnFace
|
||||||
Font.Charset = DEFAULT_CHARSET
|
Font.Charset = DEFAULT_CHARSET
|
||||||
@ -19,7 +19,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
OnShow = FormShow
|
OnShow = FormShow
|
||||||
DesignSize = (
|
DesignSize = (
|
||||||
388
|
388
|
||||||
236)
|
256)
|
||||||
PixelsPerInch = 96
|
PixelsPerInch = 96
|
||||||
TextHeight = 13
|
TextHeight = 13
|
||||||
object lblSearch: TLabel
|
object lblSearch: TLabel
|
||||||
@ -30,9 +30,17 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
Caption = '&Text to find:'
|
Caption = '&Text to find:'
|
||||||
FocusControl = comboSearch
|
FocusControl = comboSearch
|
||||||
end
|
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
|
object btnCancel: TButton
|
||||||
Left = 305
|
Left = 305
|
||||||
Top = 203
|
Top = 223
|
||||||
Width = 75
|
Width = 75
|
||||||
Height = 25
|
Height = 25
|
||||||
Anchors = [akRight, akBottom]
|
Anchors = [akRight, akBottom]
|
||||||
@ -43,7 +51,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object btnReplaceAll: TButton
|
object btnReplaceAll: TButton
|
||||||
Left = 224
|
Left = 224
|
||||||
Top = 203
|
Top = 223
|
||||||
Width = 75
|
Width = 75
|
||||||
Height = 25
|
Height = 25
|
||||||
Anchors = [akRight, akBottom]
|
Anchors = [akRight, akBottom]
|
||||||
@ -85,7 +93,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object grpOptions: TGroupBox
|
object grpOptions: TGroupBox
|
||||||
Left = 8
|
Left = 8
|
||||||
Top = 60
|
Top = 80
|
||||||
Width = 372
|
Width = 372
|
||||||
Height = 69
|
Height = 69
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
@ -129,7 +137,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object grpDirection: TRadioGroup
|
object grpDirection: TRadioGroup
|
||||||
Left = 8
|
Left = 8
|
||||||
Top = 135
|
Top = 155
|
||||||
Width = 120
|
Width = 120
|
||||||
Height = 62
|
Height = 62
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
@ -142,7 +150,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object grpOrigin: TRadioGroup
|
object grpOrigin: TRadioGroup
|
||||||
Left = 134
|
Left = 134
|
||||||
Top = 135
|
Top = 155
|
||||||
Width = 120
|
Width = 120
|
||||||
Height = 62
|
Height = 62
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
@ -155,7 +163,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object grpScope: TRadioGroup
|
object grpScope: TRadioGroup
|
||||||
Left = 260
|
Left = 260
|
||||||
Top = 135
|
Top = 155
|
||||||
Width = 120
|
Width = 120
|
||||||
Height = 62
|
Height = 62
|
||||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||||
@ -168,7 +176,7 @@ object frmSearchReplace: TfrmSearchReplace
|
|||||||
end
|
end
|
||||||
object btnOK: TButton
|
object btnOK: TButton
|
||||||
Left = 143
|
Left = 143
|
||||||
Top = 203
|
Top = 223
|
||||||
Width = 75
|
Width = 75
|
||||||
Height = 25
|
Height = 25
|
||||||
Anchors = [akRight, akBottom]
|
Anchors = [akRight, akBottom]
|
||||||
|
@ -23,6 +23,7 @@ type
|
|||||||
grpOrigin: TRadioGroup;
|
grpOrigin: TRadioGroup;
|
||||||
grpScope: TRadioGroup;
|
grpScope: TRadioGroup;
|
||||||
btnOK: TButton;
|
btnOK: TButton;
|
||||||
|
lblReplaceHint: TLabel;
|
||||||
procedure ValidateControls(Sender: TObject);
|
procedure ValidateControls(Sender: TObject);
|
||||||
procedure chkReplaceClick(Sender: TObject);
|
procedure chkReplaceClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
@ -122,6 +123,7 @@ begin
|
|||||||
comboReplace.Enabled := chkReplace.Checked;
|
comboReplace.Enabled := chkReplace.Checked;
|
||||||
chkPromptOnReplace.Enabled := chkReplace.Checked;
|
chkPromptOnReplace.Enabled := chkReplace.Checked;
|
||||||
btnReplaceAll.Enabled := chkReplace.Checked;
|
btnReplaceAll.Enabled := chkReplace.Checked;
|
||||||
|
lblReplaceHint.Enabled := chkReplace.Checked;
|
||||||
if chkReplace.Checked then
|
if chkReplace.Checked then
|
||||||
btnOK.Caption := 'Replace'
|
btnOK.Caption := 'Replace'
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user