الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث داخل ال Memo

مغلق
بدأه ابوهاني في 11 نوفمبر 2001 · 9 رد · 906 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

الاخوة الاعزاء

كيف يمكنني البحث عن نص معين داخل الـ Memo ؟

تحياتي

#2

مجرد محاولة بسيطة مني :)

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to Memo1.Lines.Count do
begin
if pos('DR-A',Memo1.Lines.Strings)>0 then
begin
ShowMessage('Word DR-A is in line '+IntToStr(i+1));
end;
end;
end;

في الكود السابق يتم البحث عن الكلمة DR-A و يرسل لك مسج بوجودها في أي سطر...

آسف انا لا اعرف طريقة اخرى... ننتظر الشباب ينورونا :)

#3

اشكرك اخي الكريم DR-A على هذه المشاركة وانتظر رد الاخوة

#4

السلام عليكم

الاخ أبو هاني

إذا لم يكن رد الأخ DR_A هو الذي تريده ( طبعآ بعد القيام بشي من التعديلات عليه ليصبح بصورة أفضل ) فأرجو توضيح ما تريده :)

والله الموفق!

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#5

اشكرك اخي tmaaa على اهتمامك .... ما ارغب به هو عند البحث عن كلمة معينة في الـ Memo فانه يتم تعليم أو تظليل تلك الكلمة كما هو في الورد

تحياتي

#6

السلام عليكم

الأخ أبو هاني

جرب هذا الكود :

(أثناء البحث يفرق بين الحروف الكبيرة و الصغيرة case sensitive search)

add these components Memo1 , Find Dialog1 , Button1

procedure TForm1.FindDialog1Find(Sender: TObject); 
var Buffer, Pos, tPointer : PChar; 
    BuffLength            : Word; 
begin 
   With Sender as TFindDialog do 
   begin 
      GetMem(tPointer, Length(FindText) + 1); 
      StrPCopy(tPointer, FindText); 
      BuffLength:= Memo1.GetTextLen + 1; 
      GetMem(Buffer,BuffLength); 
      Memo1.GetTextBuf(Buffer,BuffLength); 
      Pos:= Buffer + Memo1.SelStart + Memo1.SelLength; 
      Pos:= StrPos(Pos, tPointer); 
      if Pos = NIL then MessageBeep(0) 
      else 
      begin 
         Memo1.SelStart:= Pos - Buffer; 
         Memo1.SelLength:= Length(FindText); 
      end; 
      FreeMem(tPointer, Length(FindText) + 1); 
      FreeMem(Buffer,BuffLength); 
      Memo1.SetFocus; 
  end; 
end; 
//---------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
FindDialog1.Execute;
end;

معلومة إضافية :

تستخدم EM_SETSEL message لتظليل الجزء المراد في edit control يمكن إستخدامها على memo أيضآ .

: MS SDK Help

EM_SETSEL

wParam = (WPARAM) (INT) nStart; // starting position

lParam = (LPARAM) (INT) nEnd; // ending position

مثال

SendMessage(Memo1.Handle,EM_SETSEL,2,6);
Memo1.SetFocus;

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#7

اشكرك اخي tmaaa على هذا الكود ، ولكني لم احسن استخدامه

على العموم ما ارغبه هو : انه يوجد لدي Edit و Memo وارغب عند ضغط زر البحث ان يبحث عن الكلمة المذكورة في الـ Edit ويعلم عليها في الـ Memo

تحياتي

#8

السلام عليكم

الأخ أبو هاني

القيام بتغييرات بسيطة للكود السابق يعيطيك النتيجة التي تريدها

جرب الكود الأتي و أعلمني هل هو نافع ام لا ؟:)

برنامجك يحوي Button ---> FindtextBt , Edit1 , Memo1

procedure TForm1.FindtextBtClick(Sender: TObject);
var
 Buffer, Pos, tPointer : PChar;
    BuffLength            : Word;
begin
      GetMem(tPointer, Length(Edit1.Text) + 1);
     StrPCopy(tPointer, Edit1.Text );
      BuffLength:= Memo1.GetTextLen + 1;
      GetMem(Buffer,BuffLength);
      Memo1.GetTextBuf(Buffer,BuffLength);
      Pos:= Buffer + Memo1.SelStart + Memo1.SelLength;
      Pos:= StrPos(Pos, tPointer);
      if Pos = NIL then MessageBeep(0)
      else
       begin
           Memo1.SelStart:= Pos - Buffer;
           Memo1.SelLength:= Length(Edit1.Text);
      end;
      FreeMem(tPointer, Length( Edit1.Text ) + 1);
      FreeMem(Buffer,BuffLength);
      Memo1.SetFocus; 
end;

لاحظ أن عملية البحث تتم بعد المؤشر cursor .

عيوب الكود : يفرق بين الأحرف الكبيرة و الصغيرة :( .

أتمنى أن تكون هذا ما تريده . أي مشكلة في الكود أرجو إعلامي .

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#9

اشكرك اخي tmaaa هذا ما كنت اوده بالظبط ...

لك مني الف شكر وتحية وكل عام وانت بخير

#10

أخي أبو هاني

كل عام وأنت بخير.

أنا كما ذكرت أن عملية البحث هي case-sensitive (تفرق بين الأحرف الكبيرة و الصغيرة ) . نسيت الدالة التي لاتفرق بين طبيعة الأحرف :( .

إن توصلت إليها أو أي أخ يعلم ماهي الدالة أرجو إعلامي .

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

هذا الموضوع مغلق.

مواضيع مشابهة