delphi4arab منتديات دلفي للعرب

نسخة كاملة : البحث في عنصر RichtEdit
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3
السلام عليكم
أحاول صنع برنامج يقوم بالبحث عن كلمة موجودة في نص معين واستعنت بذلك بالعناصر التالية:
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.
i :=Pos(s,RichEdit1.Text)-1 ;

[صورة: picture0001x.png]

كود :
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;
شكرا لك اخي cargem لكن لم افهم الكود الذي وضعته جيدا لو امكننك بعض الشرح لكل تعليمة
حدد ما تريد فهمة
تقريبا جل الكود
كود :
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;
لكن لماذ عندما يجد النص يكون j<-1 من المفروض j<0 أو انا مخطئ
-1 يعني لم يجد النص
السؤال الاصعب ؟
كيف يمكن ان تحل المسئلة بدون استخدام FRichEdit.FindText
هذا تحدي لك!!!
و عليكم السلام ورحمة الله
استعمل هذه الدالة
كود :
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;
ينبغي تميز الكلمة بلون او تعريض الخط حتى تتأكد من حلك
تحياتي
الصفحات : 1 2 3