diff --git a/ide/weditor.pas b/ide/weditor.pas index 8b2e8aca0b..49eb1fe11c 100644 --- a/ide/weditor.pas +++ b/ide/weditor.pas @@ -739,6 +739,7 @@ const Clipboard : PCustomCodeEditor = nil; FindStr : String[FindStrSize] = ''; ReplaceStr : String[FindStrSize] = ''; + FindReplaceEditor : PCustomCodeEditor = nil; FindFlags : word = ffPromptOnReplace; WhiteSpaceChars : set of char = [#0,#32,#255]; TabChars : set of char = [#9]; @@ -783,6 +784,11 @@ type Origin : word; end; + TEditorInputLine = object(TInputLine) + Procedure HandleEvent(var Event : TEvent);virtual; + end; + PEditorInputLine = ^TEditorInputLine; + TGotoLineDialogRec = packed record LineNo : string[5]; Lines : sw_integer; @@ -5881,6 +5887,7 @@ begin Scope := (FindFlags and ffmScope) shr ffsScope; Origin := (FindFlags and ffmOrigin) shr ffsOrigin; DoConf:= (FindFlags and ffPromptOnReplace)<>0; + FindReplaceEditor:=@self; if EditorDialog(edFind, @FindRec) <> cmCancel then begin FindStr := Find; @@ -5901,6 +5908,7 @@ begin else EditorDialog(edSearchFailed,nil); end; + FindReplaceEditor:=nil; end; end; @@ -5925,7 +5933,9 @@ begin Direction := (FindFlags and ffmDirection) shr ffsDirection; Scope := (FindFlags and ffmScope) shr ffsScope; Origin := (FindFlags and ffmOrigin) shr ffsOrigin; + FindReplaceEditor:=@self; Re:=EditorDialog(edReplace, @ReplaceRec); + FindReplaceEditor:=nil; if Re <> cmCancel then begin FindStr := Find; @@ -6675,10 +6685,39 @@ begin At:=PEditorAction(Inherited At(Idx)); end; +procedure TEditorInputLine.HandleEvent(var Event : TEvent); +var + s : string; + i : longint; +begin + If (Event.What=evKeyDown) and + (Event.KeyCode=kbRight) and + (CurPos = Length(Data^)) and + Assigned(FindReplaceEditor) then + Begin + s:=FindReplaceEditor^.GetDisplayText(FindReplaceEditor^.CurPos.Y); + s:=Copy(s,FindReplaceEditor^.CurPos.X + 1 -length(Data^),high(s)); + i:=pos(Data^,s); + if i>0 then + begin + s:=Data^+s[i+length(Data^)]; + If not assigned(validator) or + Validator^.IsValidInput(s,False) then + Begin + Event.CharCode:=s[length(s)]; + Event.Scancode:=0; + Inherited HandleEvent(Event); + End; + end; + End + else + Inherited HandleEvent(Event); +end; + function CreateFindDialog: PDialog; var R,R1,R2: TRect; D: PDialog; - IL1: PInputLine; + IL1: PEditorInputLine; Control : PView; CB1: PCheckBoxes; RB1,RB2,RB3: PRadioButtons; @@ -7029,7 +7068,10 @@ end; END. { $Log$ - Revision 1.8 2001-09-17 21:30:26 pierre + Revision 1.9 2001-09-17 22:54:09 pierre + + Line completion for Find/Replace dialogs + + Revision 1.8 2001/09/17 21:30:26 pierre * fix a bug in Find/Replace dialog about RegExp Revision 1.7 2001/09/14 23:47:09 pierre