المشاركات : 71
المواضيع 38
:
: 0
الإنتساب : Aug 2010
السلام عليكم
أحاول صنع برنامج يقوم بالبحث عن كلمة موجودة في نص معين واستعنت بذلك بالعناصر التالية:
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.
المشاركات : 418
المواضيع 50
:
: 0
الإنتساب : Sep 2009
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;
المشاركات : 71
المواضيع 38
:
: 0
الإنتساب : Aug 2010
شكرا لك اخي cargem لكن لم افهم الكود الذي وضعته جيدا لو امكننك بعض الشرح لكل تعليمة
المشاركات : 418
المواضيع 50
:
: 0
الإنتساب : Sep 2009
المشاركات : 71
المواضيع 38
:
: 0
الإنتساب : Aug 2010
المشاركات : 418
المواضيع 50
:
: 0
الإنتساب : Sep 2009
كود :
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;
المشاركات : 71
المواضيع 38
:
: 0
الإنتساب : Aug 2010
لكن لماذ عندما يجد النص يكون j<-1 من المفروض j<0 أو انا مخطئ
المشاركات : 418
المواضيع 50
:
: 0
الإنتساب : Sep 2009
-1 يعني لم يجد النص
السؤال الاصعب ؟
كيف يمكن ان تحل المسئلة بدون استخدام FRichEdit.FindText
هذا تحدي لك!!!
المشاركات : 316
المواضيع 64
:
: 1
الإنتساب : Apr 2009
و عليكم السلام ورحمة الله
استعمل هذه الدالة
كود :
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;
المشاركات : 418
المواضيع 50
:
: 0
الإنتساب : Sep 2009
ينبغي تميز الكلمة بلون او تعريض الخط حتى تتأكد من حلك
تحياتي