PDA

View Full Version : نحوه پیدا کردن کلمات همنام در RICH EDIT



siroosss
سه شنبه 01 بهمن 1392, 14:48 عصر
ببخشید برای سوال جدیدم یه پست دیگه ایجاد کردم چون عنوان سوال با قبلی اصلا مرتبط نبود
دستور زیر یه کلمه رو تو RICH EDIT پیدا می کنه
سوالم اینه که وقتی داخل RICH EDIT کلمات تکراری وجود داشته باشه ...
برای مثال : تصور کنید داخل RICH EDIT تو لا بلای سطرهای مختلف سه بار کلمه IRAN تکرار شده
من می خوام راهنمایی کنید چه جوری این کد رو تغییر بدم تا کلمه IRAN مورد نظر من از بین سه کلمه IRAN تکراری پیدا بشه؟

SelStart := FindText('iran',0,GetTextLen, [stWholeWord];

Felony
سه شنبه 01 بهمن 1392, 18:19 عصر
Edit1.Text متنی هست که میخواین مورد جستجو قرار بگیره :


var
StartPos, ToEnd, a: integer;
begin
While a<>-1 do
begin
if RichEdit1.SelLength <> 0 then
StartPos := RichEdit1.SelStart + RichEdit1.SelLength
else
StartPos :=0;
ToEnd := Length(RichEdit1.Text) - StartPos;
a:=RichEdit1.FindText(Edit1.text,StartPos,ToEnd,[]);
if a<> -1 then
begin
RichEdit1.SelStart := a;
RichEdit1.SelLength :=Length(Edit1.text);
RichEdit1.SelAttributes.Color := clred;
end;
end;
end;

siroosss
سه شنبه 01 بهمن 1392, 19:27 عصر
دوست خوبم تشکر بابت جوابتون
این کدی که قرار داید خیلی خوبه من برش داشتم تا بعدا تو جاهایی که حتما پیش می یاد ازش استفاده کنم
ولی منظور من کمی متفاوت بود با برداشت شما *** کلمه IRAN مورد نظر ، از بین سه کلمه IRAN تکراری پیدا بشه؟ ***

khoshblagh
چهارشنبه 02 بهمن 1392, 00:14 صبح
Edit1.Text متنی هست که میخواین مورد جستجو قرار بگیره :


var
StartPos, ToEnd, a: integer;
begin
While a<>-1 do
begin
if RichEdit1.SelLength <> 0 then
StartPos := RichEdit1.SelStart + RichEdit1.SelLength
else
StartPos :=0;
ToEnd := Length(RichEdit1.Text) - StartPos;
a:=RichEdit1.FindText(Edit1.text,StartPos,ToEnd,[]);
if a<> -1 then
begin
RichEdit1.SelStart := a;
RichEdit1.SelLength :=Length(Edit1.text);
RichEdit1.SelAttributes.Color := clred;
end;
end;
end;
با تشکر از جناب استاد
حالا اگر بخواهیم دوباره یک کلمه جدیدی را پیدا نماییم باید چگونه انتخاب قبلی لغو(یعنی کلمات پیدا شده به رنگ اولیه مثلا مشکی تبدیل ) و کلمه جدیدی را جستجو نمائیم؟ متشکرم

Felony
چهارشنبه 02 بهمن 1392, 05:58 صبح
قبل از شروع جستجو ، کل متن رو انتخاب کنید و رنگش رو مشکی کنید و بعد جستجو رو انجام بدید ، یعنی :


var
StartPos, ToEnd, a: integer;
begin
// Restore to default color
RichEdit1.SelStart := 0;
RichEdit1.SelLength :=Length(RichEdit1.Text);
RichEdit1.SelAttributes.Color := clBlack;

// Start search
While a<>-1 do
begin
if RichEdit1.SelLength <> 0 then
StartPos := RichEdit1.SelStart + RichEdit1.SelLength
else
StartPos :=0;
ToEnd := Length(RichEdit1.Text) - StartPos;
a:=RichEdit1.FindText(Edit1.text,StartPos,ToEnd,[]);
if a<> -1 then
begin
RichEdit1.SelStart := a;
RichEdit1.SelLength :=Length(Edit1.text);
RichEdit1.SelAttributes.Color := clred;
end;
end;
end;

siroosss
چهارشنبه 02 بهمن 1392, 10:22 صبح
ببخشید برای سوال من امکانش نیست که یکی از کلمات مورد نظر از بین کلمات مشابه انتخاب بشه؟

یوسف زالی
چهارشنبه 02 بهمن 1392, 10:30 صبح
دوست عزیز یعنی چی که IRAN از بین 3 تا IRAN انتخاب بشه؟ برنامه از کجا بفهمه کدومش رو می خواهی؟
اگر می دونی چندمی هست، می تونی با استفاده از یک شمارنده، یا داشتن جایگاه آخرین نتیجه، به خواستت برسی. در غیر اینصورت خواسته شما معنی نداره مگر این که تفاوتی باشه بین اون 3 تا. مثلا قبل یا بعدش رو بدونی.

siroosss
چهارشنبه 02 بهمن 1392, 11:02 صبح
جناب you see عزیز تشکر می کنم و قبول دارم که سوالم منطقی نیست ، این رو بزارید پای اینکه برای چیزی که می خوام هیچ چیز خاصی فعلا به ذهنم نرسیده
از سه پیشنهاد شما ، شمارنده این نتیجه رو به ما نمیده ( البته تو کاری که من نیاز دارم انجام بشه ) دومی آخرین جایگاه فکر خوبیه ، ولی جایگاه فعلی جایگاه اولیه و همیشگی اون هست.
ولی پیشنهاد سوم اگه شدنی باشه عالیه ، و همه درد سرا رو پایان میده ، اگه بتونید تو این مورد کمک کنید همه چی درست میشه و یا یه حالت دیگه که خودم به این نتیجه رسیدم:
مثلا من چه طور می تونم بگم که اون کلمه *iran* که نشانگر موس الان روی اون قرار داره؟

یوسف زالی
چهارشنبه 02 بهمن 1392, 11:45 صبح
شما باید متن جاری نمایش داده شده رو در بیارید. احتمال قوی با هک کردن کامپوننت مورد نظر یا یک اشتقاق از اون. این به این دلیله که ممکنه متن شما اسکرول شده باشه.
بعد با استفاده از توابعی بفهمید که مکان جاری ماوس دقیقا در چه مختصاتی از کامپوننت مورد نظر هست، بعد بیایید و سرچ کنید. مکان کلمه سرچ شده رو تست کنید اگر با مختصات جور در نیومد دوباره بعدی رو سرچ کنید..
دردسر زیاد داره.