![]() |
|
البحث في عنصر RichtEdit - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : البحث في عنصر RichtEdit (/showthread.php?tid=3427) |
البحث في عنصر RichtEdit - abdelali91 - 19-09-2011 السلام عليكم أحاول صنع برنامج يقوم بالبحث عن كلمة موجودة في نص معين واستعنت بذلك بالعناصر التالية: RichEdit و Button و Edit.text البرنامج اشتغل ولكن عندما اظغطك على الزر لا يحدث شيى وهذا كود البرنامج: كود : procedure TForm4.Button1Click(Sender: TObject);
var
i,l:integer;
s: string;
begin
s:=edit1.Text;
l:=Length(edit1.text);
i:= RichEdit1.FindText(s,0,l,[]);
if i>0 then
begin
RichEdit1.SetFocus;
RichEdit1.SelStart := i;
RichEdit1.SelLength := length(s) ;
RichEdit1.SelAttributes.Color:=clred;
end;
end;
end.البحث في عنصر RichtEdit - cargem - 26-09-2011 i :=Pos(s,RichEdit1.Text)-1 ; ![]() كود : procedure TForm1.GetTextColor(FRichEdit: TRichEdit; SearchTxt: string;
Fgetcolor: Tcolor);
var
i, j, t, Len: integer;
StrFind, TempStr: string;
StrBuffer: TStringList;
begin
StrFind := SearchTxt;
Len := 0;
j := 0;
StrBuffer := TStringList.Create();
try
StrBuffer.CommaText := FRichEdit.Text;
for i := 0 to FRichEdit.Lines.Count - 1 do
begin
StrBuffer.CommaText := FRichEdit.Lines.Strings[i];
for t := 0 to length(FRichEdit.Lines.Strings[i]) - 1 do
begin
j := FRichEdit.FindText(SearchTxt,Len ,
length(FRichEdit.Lines.Strings[i]), [stMatchCase]);
// pos(SearchTxt, TempStr);
if j > -1 then
Begin
FRichEdit.SelStart := j;
FRichEdit.SelLength := length(SearchTxt);
FRichEdit.SelAttributes.Color := Fgetcolor;
FRichEdit.SelAttributes.Style := [fsBold];
Len := j+1 ;
End;
end;
end;
finally
StrBuffer.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetTextColor(RichEdit1, Edit1.Text, ColorBox1.Selected);
end;البحث في عنصر RichtEdit - abdelali91 - 27-09-2011 شكرا لك اخي cargem لكن لم افهم الكود الذي وضعته جيدا لو امكننك بعض الشرح لكل تعليمة البحث في عنصر RichtEdit - cargem - 27-09-2011 حدد ما تريد فهمة البحث في عنصر RichtEdit - abdelali91 - 28-09-2011 تقريبا جل الكود البحث في عنصر RichtEdit - cargem - 28-09-2011 كود : procedure TForm1.GetTextColor(FRichEdit: TRichEdit; SearchTxt: string;
Fgetcolor: Tcolor);
var
i, j, t, Len: integer;
StrFind, TempStr: string;
StrBuffer: TStringList;
begin
StrFind := SearchTxt;
Len := 0;
j := 0;
StrBuffer := TStringList.Create();
try
StrBuffer.CommaText := FRichEdit.Text; //
for i := 0 to FRichEdit.Lines.Count - 1 do
begin
StrBuffer.CommaText := FRichEdit.Lines.Strings[i]; // تحويل السطر الى مقاطع نصوص
for t := 0 to length(FRichEdit.Lines.Strings[i]) - 1 do
begin
j := FRichEdit.FindText(SearchTxt,Len ,//Len=البحث من اي محرففي النص
length(FRichEdit.Lines.Strings[i]), [stMatchCase]);
// length(FRichEdit.Lines.Strings[i]) = كم طول النص المراد البحث فيه
//stMatchCase = طريقة البحث كيف تكون! فرديةومتطابقة
if j > -1 then // ادا وجد النص
Begin // نفذ التالي
FRichEdit.SelStart := j;
FRichEdit.SelLength := length(SearchTxt);
FRichEdit.SelAttributes.Color := Fgetcolor;
FRichEdit.SelAttributes.Style := [fsBold];
Len := j+1 ; // هذ اهم شي اضافة 1 يمكن البحث عن النص في موقع اخر في السطر
End;
end;
end;
finally
StrBuffer.Free;
end;البحث في عنصر RichtEdit - abdelali91 - 01-10-2011 لكن لماذ عندما يجد النص يكون j<-1 من المفروض j<0 أو انا مخطئ البحث في عنصر RichtEdit - cargem - 01-10-2011 -1 يعني لم يجد النص السؤال الاصعب ؟ كيف يمكن ان تحل المسئلة بدون استخدام FRichEdit.FindText هذا تحدي لك!!! البحث في عنصر RichtEdit - paix144 - 02-10-2011 و عليكم السلام ورحمة الله استعمل هذه الدالة كود : function SearchForText_AndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
StartPos, Position, Endpos: Integer;
begin
StartPos := 0;
with RichEdit do
begin
Endpos := Length(RichEdit.Text);
Lines.BeginUpdate;
while FindText(SearchText, StartPos, Endpos, [stMatchCase])<>-1 do
begin
Endpos := Length(RichEdit.Text) - startpos;
Position := FindText(SearchText, StartPos, Endpos, [stMatchCase]);
Inc(StartPos, Length(SearchText));
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
end;
Lines.EndUpdate;
end;
end;البحث في عنصر RichtEdit - cargem - 03-10-2011 ينبغي تميز الكلمة بلون او تعريض الخط حتى تتأكد من حلك تحياتي |