View Full Version : سوال: کار نکردن کد پرش به سطر و پرش به موقعیت در ریچ ادیت
mbshareat
شنبه 15 دی 1403, 22:34 عصر
سلام علیکم
من یک کد برای جستجوی عبارت در ریچ ادیت دارم که برای پرهیز از توضیح ساده اش می کنم:
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);
کسی میتونه کدی که همیشه درست کار کنه بهم بده؟ نمی دونم چرا ریچ ادیت اینقدر عجیبه.
دلفــي
سه شنبه 18 دی 1403, 10:50 صبح
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.
mbshareat
جمعه 21 دی 1403, 23:22 عصر
ممنون. امتحان کردم.
کد جستجو، مکان نما رو به محل می بره ولی جوری تنظیم نمی کنه که مکان نما دیده بشه.گویا TopIndex در لیست باکس تنظیم نشده باشه. یعنی اگر مکن نما چند صفحه بعد باشه و جستجو بدیم باید مثلا کلید جهت چپ رو بزنیم، تازه بفهمیم کدوم سطر هستیم.یعنی همون سطرهای قبلی بعد از جستجو دیده میشه و مکان نما در سطرهای خارج از دید هست.
کد پرش به سطر، برای بار اول خوب بود. اما بارهای بعد خوب نیست با همون مشکلی که برای کد جستجو داشتم. نمایش ندادن سطر هدف.
بهتر میشه اگر یک کد هم باشه که بالاترین سطر نمایش داده شده هم بشه تعیین کرد. فرض کنیم میخوایم مکان نما در سطر پنجم از سطرهای قابل رویت باشه باشه.
دلفــي
شنبه 29 دی 1403, 13:07 عصر
ممنون. امتحان کردم.
کد جستجو، مکان نما رو به محل می بره ولی جوری تنظیم نمی کنه که مکان نما دیده بشه.گویا TopIndex در لیست باکس تنظیم نشده باشه. یعنی اگر مکن نما چند صفحه بعد باشه و جستجو بدیم باید مثلا کلید جهت چپ رو بزنیم، تازه بفهمیم کدوم سطر هستیم.یعنی همون سطرهای قبلی بعد از جستجو دیده میشه و مکان نما در سطرهای خارج از دید هست.
کد پرش به سطر، برای بار اول خوب بود. اما بارهای بعد خوب نیست با همون مشکلی که برای کد جستجو داشتم. نمایش ندادن سطر هدف.
بهتر میشه اگر یک کد هم باشه که بالاترین سطر نمایش داده شده هم بشه تعیین کرد. فرض کنیم میخوایم مکان نما در سطر پنجم از سطرهای قابل رویت باشه باشه.
کدی که بالا گذاشتم بعد از پیدا کردن کلمه داخل متن به سطر مورد نظر پرش کرده و کلمه ی پیدا شده را هایلایت میکنه و محل کلمه ی پیدا شده در هر سطر یا هر صفحه ای باشه نمایش داده میشه (طبق تصویر زیر)
156392
حالا اگه مشکل شما اینه که مکان نما هم در ابتدا یا انتهای کلمه ی پیدا شده چشمک بزنه می تونید از کد زیر در داخل پروسیجر FindAndSelectString استفاده کنید:
RichEdit.CaretPos := Point(شماره سطر , محل اشاره گر);
در مورد پرش به سطر خاص هم می تونید از همون پروسیجر JumpToLine استفاده کنید.
mbshareat
پنج شنبه 04 بهمن 1403, 11:58 صبح
اگر Begin در صفحه دوم و بعد از تعریف startPos و خارج از دید بود هم امتحان کردید؟ (البته ممکنه مشکل از قدیمی بودن دلفی من باشه)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.