الكود يبحث عن اول كلمة فقط وليس كل الكلمات الموجودة في النص
لون الكود وانت ستعرف الفرق
انا جربت الكود السابق ولا يحقق المطلوب
لا تقول بسبب break
ليس له تأثير حتى لوحدفتة
تذكر ان المطلوب الاستغناء عن findText
للعلم ان حلي صحيح 100% كبحث عن نص في كل الاسطر ولكن مع تميز بالتلوين يعتبر خطا
انظر الى هذا السطر
إقتباس :FRichEdit.SelStart := j- t ;
قيمة t اذا اخدت 1 او غيرتها ب 1
تعطي اجابة صحيحة 100%100
ونفس الشيء بالنسبة للاسطر البقية
ولكن ليس الكل لابد من تعديل
نفس المشكلة حتى هنا
كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
GetTextColor(RichEdit1, Edit1.Text, clred);
end;
procedure TForm1.GetTextColor(FRichEdit: TRichEdit; SearchTxt: string;
Fgetcolor: Tcolor);
var
i, j, t, Len, StartPos, intindex: integer;
FRichEditTemp: TRichEdit;
StrFind, TempStr: string;
StrBuffer: TStringList;
begin
Len := 0;
j := 0;
t := 1;
inc(j);
StartPos := j;
StrBuffer := TStringList.Create();
try
j := PosEx(SearchTxt, FRichEdit.Text, StartPos);
while j > 0 do
Begin
j := PosEx(SearchTxt, FRichEdit.Text, StartPos);
StrBuffer.Add(IntToStr(j));
StartPos := j + length(SearchTxt);
End;
FRichEdit.Lines.Add(StrBuffer.Text);
for i := 0 to StrBuffer.Count - 1 do
begin
FRichEdit.Lines.BeginUpdate;
intindex := StrToInt(StrBuffer.Strings[i]);
if intindex <= 0 then
Continue;
FRichEdit.SelStart := intindex - 3;
FRichEdit.SelLength := length(SearchTxt);
FRichEdit.SelAttributes.Style := [fsBold];
FRichEdit.SelAttributes.Color := Fgetcolor;
FRichEdit.Lines.EndUpdate;
// end;
FRichEdit.Lines.EndUpdate;
end;
finally
StrBuffer.Free;
end;
محاولة اخرى
كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
GetTextColor(RichEdit1, Edit1.Text, clred);
end;
procedure TForm1.GetTextColor(FRichEdit: TRichEdit; SearchTxt: string;
Fgetcolor: Tcolor);
var
i, j, t, Len, StartPos, intindex: integer;
StrFind, TempStr: string;
StrBuffer: TStringList;
begin
Len := 0;
StartPos := 0;
t := 0;
inc(StartPos);
FRichEdit.Lines.BeginUpdate;
for j := 0 to FRichEdit.Lines.Count - 1 do
begin
Len := Len + length(FRichEdit.Lines.Strings[j]);
while PosEx(SearchTxt,FRichEdit.Text, StartPos) > 0 do
Begin
intindex := PosEx(SearchTxt,FRichEdit.Text , StartPos)-1;
if intindex <= 0 then
Continue;
if intindex > Len then
begin
break;
end;
FRichEdit.SelStart := intindex - j;
FRichEdit.SelLength := length(SearchTxt);
FRichEdit.SelAttributes.Style := [fsBold];
FRichEdit.SelAttributes.Color := Fgetcolor;
StartPos := intindex + length(SearchTxt);
End;
end;
FRichEdit.Lines.EndUpdate;
end;