سلام بچه ها
من برای find برنامه notpadبا استفاده ازشی memoاز کد زیر استفاده کردم ولی دوتا مشکل دارد:
1-در موقع اجرا وقتیfinddialog را باز می کنم تا کاراکتری را پیدا کند خط اول را اصلا نظر نمی گیرد(یعنی اگر کاراکتر مورد نظر در خط اول باشد اصلا پیدایش نمی کند ولی از خط دوم به بعد را پیدا میکند).
2-در موقع اجرا وقتfinddialog را باز میکنم و کارکتر را می دهم تا پیدا کند تا دکمه find را می زنم تا وقتی پنجره باز است آن را به حالت انتخاب در نمی آورد و باید پنجره را به صورت دستی ببندم تا ببینم چی انتخاب شده البته من یک گزینه جدا برای find nextگذاشتم
البته این مشکل من با بستن خود به خود finddialogبعد از پیدا کردن اولین کاراکتر حل می شود ولی نمی دانم ان را در کجای برنامه بنویسم.
خواهش میکنم راهنماییم کنید.
البته اگر کد دیگری برای find , replace بهم بدهید ممنون میشوم.
procedure TForm1.FindDialog1Find(Sender: TObject);
var
I, J, PosReturn, SkipChars: Integer;
CursorPos : TPoint;
begin
CursorPos := Memo1.CaretPos;
if frDown in FindDialog1.Options then
begin
for I := CursorPos.Y + 1 to Memo1.Lines.Count do
begin
PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[i]);
if (PosReturn <> 0) then
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(Memo1.Lines[J]);
SkipChars := SkipChars + (I*2);
SkipChars := SkipChars + PosReturn - 1;
Memo1.SelStart := SkipChars;
Memo1.SelLength := Length(FindDialog1.FindText);
Break;
end;
end;
end
else
begin
for I := CursorPos.Y - 1 downto 0 do
begin
PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[i]);
if PosReturn <> 0 then
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(Memo1.Lines[J]);
SkipChars := SkipChars + (I*2);
SkipChars := SkipChars + PosReturn - 1;
Memo1.SelStart := SkipChars;
Memo1.SelLength := Length(FindDialog1.FindText);
Break;
end;
end;
end;
end;
procedure TForm1.FindClick(Sender: TObject);
begin
FindDialog1.Execute;
end;
procedure TForm1.FindNextClick(Sender: TObject);
begin
FindDialog1Find(nil);
end;
procedure TForm1.ReplaceClick(Sender: TObject);
begin
ReplaceDialog1.Execute;
end;
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
CursorPos : TPoint;
I, J, SkipChars, PosReturn : integer;
begin
if frReplace in ReplaceDialog1.Options then
Memo1.SelText := ReplaceDialog1.ReplaceText
else if frReplaceAll in ReplaceDialog1.Options then
begin
CursorPos := Memo1.CaretPos;
for I := CursorPos.Y + 1 to Memo1.Lines.Count do
begin
PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[i]);
if PosReturn <> 0 then
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(Memo1.Lines[J]);
SkipChars := SkipChars + (I*2);
SkipChars := SkipChars + PosReturn - 1;
Memo1.SelStart := SkipChars;
Memo1.SelLength := Length(ReplaceDialog1.FindText);
Memo1.SelText := ReplaceDialog1.ReplaceText;
end;
end;
end;
end;
procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
I, J, PosReturn, SkipChars: Integer;
CursorPos : TPoint;
begin
CursorPos := Memo1.CaretPos;
for I := CursorPos.Y + 1 to Memo1.Lines.Count do
begin
PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[i]);
if PosReturn <> 0 then
begin
SkipChars := 0;
for J := 0 to I - 1 do
SkipChars := SkipChars + Length(Memo1.Lines[J]);
SkipChars := SkipChars + (I*2);
SkipChars := SkipChars + PosReturn - 1;
Memo1.SelStart := SkipChars;
Memo1.SelLength := Length(ReplaceDialog1.FindText);
Break;
end;
end;
end;