| Код | unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) rdReplaceDialog: TReplaceDialog; moText: TMemo; procedure FormCreate(Sender: TObject); procedure rdReplaceDialogFind(Sender: TObject); procedure rdReplaceDialogReplace(Sender: TObject); private { Private declarations } FI, FPosReturn:integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin rdReplaceDialog.Execute; end; procedure TForm1.rdReplaceDialogFind(Sender: TObject); var I, J, PosReturn, SkipChars: integer; S,SerchStr:string; begin for I := FI to moText.Lines.Count do begin if FPosReturn=0 then S:=moText.Lines[I] else S:=copy(moText.Lines[I],FPosReturn+1,Length(moText.Lines[I])-FPosReturn+1); if not(frMatchCase in rdReplaceDialog.Options) then begin S:=AnsiUpperCase(S); SerchStr:=AnsiUpperCase(rdReplaceDialog.FindText); end else SerchStr:=rdReplaceDialog.FindText; if frWholeWord in rdReplaceDialog.Options then PosReturn := Pos(' '+SerchStr+' ',S) else PosReturn := Pos(SerchStr,S); if PosReturn <> 0 then {found!} begin SkipChars := 0; for J := 0 to I - 1 do SkipChars := SkipChars + Length(moText.Lines[J]); SkipChars := SkipChars + (I*2); SkipChars := SkipChars + PosReturn - 1 + FPosReturn; FPosReturn:=FPosReturn+PosReturn; moText.SetFocus; if frWholeWord in rdReplaceDialog.Options then moText.SelStart := SkipChars+1 else moText.SelStart := SkipChars; moText.SelLength := Length(rdReplaceDialog.FindText); FI:=I; Break; end else FPosReturn:=0; end; end; procedure TForm1.rdReplaceDialogReplace(Sender: TObject); var SelPos: integer; begin if not(frReplaceAll in rdReplaceDialog.Options) then begin SelPos := Pos(rdReplaceDialog.FindText, moText.Lines.Text); if SelPos > 0 then begin moText.SelStart := SelPos - 1; moText.SelLength := Length(rdReplaceDialog.FindText); moText.SelText := rdReplaceDialog.ReplaceText; end else MessageDlg('Текст "'+rdReplaceDialog.FindText+'" не найден', mtError, [mbOk], 0); end else moText.Lines.Text:=StringReplace(moText.Lines.Text,rdReplaceDialog.FindText,rdReplaceDialog.ReplaceText,[rfReplaceAll]); end; end.
|
|