کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
سلام علیکم
من یک کد برای جستجوی عبارت در ریچ ادیت دارم که برای پرهیز از توضیح ساده اش می کنم:
P:=PosEx(S,Richedit1.Text,Richedit1.SelStart+1);
If P=0 then
Exit;
Richedit1.SelStart:= P;
//Richedit1.SelLength:= Length(S);
PostMessage(Richedit1.Handle, EM_LINEFROMCHAR, 0,RichEdit1.SelStart);
Application.ProcessMessages;
Richedit1.SetFocus;
این کد، فقط بار اول سطر حاوی S رو نشون میده
یک کد دیگه دارم که برای پرش به سطر هست که اصلا کار نمی کنه:
Form1.RichEdit1.Perform(EM_LINEINDEX,0, 12);
کسی میتونه کدی که همیشه درست کار کنه بهم بده؟ نمی دونم چرا ریچ ادیت اینقدر عجیبه.
1 ضمیمه
نقل قول: کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
var
Form1: TForm1;
Ps: Integer;
implementation
{$R *.dfm}
procedure FindAndSelectString(RichEdit: TRichEdit; const SearchString: string; var Poss: Integer);
var
StartPos: Integer;
begin
StartPos := RichEdit.FindText(SearchString, Poss, Length(RichEdit.Text), []);
if StartPos <> -1 then
begin
RichEdit.SelStart := StartPos;
RichEdit.SelLength := Length(SearchString);
RichEdit.SetFocus;
Ps := StartPos + RichEdit.SelLength;
end
else
begin
Ps := 0;
end;
end;
procedure JumpToLine(RichEdit: TRichEdit; LineNumber: Integer);
begin
if (LineNumber >= 0) and (LineNumber < RichEdit.Lines.Count) then
begin
RichEdit.SetFocus;
RichEdit.CaretPos := Point(0, LineNumber);
RichEdit.Perform(EM_SCROLLCARET, 0, 0);
Ps := RichEdit.SelStart;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
FindAndSelectString(RichEdit1, Edit1.Text, Ps);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
JumpToLine(RichEdit1, StrToInt(Edit2.Text) );
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Ps := 0;
end;
end.
نقل قول: کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
ممنون. امتحان کردم.
کد جستجو، مکان نما رو به محل می بره ولی جوری تنظیم نمی کنه که مکان نما دیده بشه.گویا TopIndex در لیست باکس تنظیم نشده باشه. یعنی اگر مکن نما چند صفحه بعد باشه و جستجو بدیم باید مثلا کلید جهت چپ رو بزنیم، تازه بفهمیم کدوم سطر هستیم.یعنی همون سطرهای قبلی بعد از جستجو دیده میشه و مکان نما در سطرهای خارج از دید هست.
کد پرش به سطر، برای بار اول خوب بود. اما بارهای بعد خوب نیست با همون مشکلی که برای کد جستجو داشتم. نمایش ندادن سطر هدف.
بهتر میشه اگر یک کد هم باشه که بالاترین سطر نمایش داده شده هم بشه تعیین کرد. فرض کنیم میخوایم مکان نما در سطر پنجم از سطرهای قابل رویت باشه باشه.
1 ضمیمه
نقل قول: کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
نقل قول:
نوشته شده توسط
mbshareat
ممنون. امتحان کردم.
کد جستجو، مکان نما رو به محل می بره ولی جوری تنظیم نمی کنه که مکان نما دیده بشه.گویا TopIndex در لیست باکس تنظیم نشده باشه. یعنی اگر مکن نما چند صفحه بعد باشه و جستجو بدیم باید مثلا کلید جهت چپ رو بزنیم، تازه بفهمیم کدوم سطر هستیم.یعنی همون سطرهای قبلی بعد از جستجو دیده میشه و مکان نما در سطرهای خارج از دید هست.
کد پرش به سطر، برای بار اول خوب بود. اما بارهای بعد خوب نیست با همون مشکلی که برای کد جستجو داشتم. نمایش ندادن سطر هدف.
بهتر میشه اگر یک کد هم باشه که بالاترین سطر نمایش داده شده هم بشه تعیین کرد. فرض کنیم میخوایم مکان نما در سطر پنجم از سطرهای قابل رویت باشه باشه.
کدی که بالا گذاشتم بعد از پیدا کردن کلمه داخل متن به سطر مورد نظر پرش کرده و کلمه ی پیدا شده را هایلایت میکنه و محل کلمه ی پیدا شده در هر سطر یا هر صفحه ای باشه نمایش داده میشه (طبق تصویر زیر)حالا اگه مشکل شما اینه که مکان نما هم در ابتدا یا انتهای کلمه ی پیدا شده چشمک بزنه می تونید از کد زیر در داخل پروسیجر FindAndSelectString استفاده کنید:
RichEdit.CaretPos := Point(شماره سطر , محل اشاره گر);
در مورد پرش به سطر خاص هم می تونید از همون پروسیجر JumpToLine استفاده کنید.
نقل قول: کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
اگر Begin در صفحه دوم و بعد از تعریف startPos و خارج از دید بود هم امتحان کردید؟ (البته ممکنه مشکل از قدیمی بودن دلفی من باشه)