البحث بطريقة جميلة... فلتر للأسماء الغير مراد بها؟
#1
بسم الله الرحمان الرحيم...
السلام عليكم ورحمة الله وبركاته...

اخواني الكرام
من يومين وأنا صادفت مشكلة والله المستعان...
او في الحقيقة مشكلتان لكن الثانية سأحاول بها اكثر قبل ان اضع سؤال لعلّي اجد لها الجواب ان شاء الله... ( ما شاء الله... تعلمت من موضوعي القديم Smile)


نعم الى المشكلة التي تقريباّ عقدتني والله المستعان...
وهي...

الفكرة:
البحث في ليست بوكس بطريقة جميلة....

كيف؟
نعم...
المراد هو التالي...
البرنامج هو لإدخال الأسماء....
وعند البحث من خلال الإيديت بوكس يتم عمل فيلتر للأسماء الذين لا يبدأون بحرف معيّن...

توضيح:
مثلا لو كتبت انا مو ... ميم و واو...

يتم حينها اخفاء جميع الأسماء الذين لا يبدأون ب ميم و واو....

يعني اسم احمد و اسم قاسم يتم اخفائهم...
لكن اسم موهّرّج يكون ظاهر مثلا....

كما الحال في مثلا برنامج
السكيبي...
او برنامج
الماستجر ان لم لكن مخطا والله اعلم...

التنفيذ والمحاولة:
بحثت كثيرا والله المستعان....
لكن ما رأيت من اكواد قد تفيد فهي التالي...

PHP كود :
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
var
  
i: Integer;
begin
  
Case Key of
    
#27: Begin
           //Escape key, clear search string
           
FSearchStr := EmptyStr;
         
End; { Case Esc }
    
#8 : Begin
           // backspace, erase last key from search string
           
If Length(FSearchStr) > 0 Then
             Delete
( FSearchStr, Length( FSearchStr), 1 );
         
End; { Case backspace }
    Else
      
FSearchStr:= FSearchStr + Key;
  
End; { Case }
  If 
Length(FSearchStr) > 0 then
    
if Sender is TListbox then Begin
      i
:= SendMessage( TListbox(Sender).handle, LB_FINDSTRING,
                       
TListbox(Sender).ItemIndex, longint(@FSearchStr[1]));
      If 
i <> LB_ERR Then
        TListbox
(Sender).ItemIndex := i;
    
end
    
else
      if 
Sender is TCombobox then begin
        i
:= SendMessage( TCombobox(Sender).handle, CB_FINDSTRING,
                         
TCombobox(Sender).ItemIndex, longint(@FSearchStr[1]));
        If 
i <> LB_ERR Then
          TCombobox
(Sender).ItemIndex := i;
      
end;
  
Key := #0;
end; 

لكن المشكلة هي ان هذا الكود يجب ان يكون في حدث onkeypress بلإضافة الى
انه لا يمكن ان اكتب من خلال editbox في حدث onChange ....

وآخر عائق هو انه لا يخفي الأسماء التي لا تبدئ بنفس الحرف...

هذا والله اعلم...
ليس لدي مشكل من استخدام اي مكون خارجي ان كان مناسب...

ــــــــــــــ

ان شاء الله يكون السؤال واضح...
وان لم يكن كذلك فأوضح ان شاء الله..

بارك الله فيكم وعليكم
وزادكم من فضله

والسلام عليكم ورحمة الله
الرد
#2
السلام عليكم
محاولة تعطيك فكرة:
PHP كود :
uses StrUtils;
...
procedure TForm1.Edit1Change(Sender: TObject);
var
  
I: Integer;
  
Sl: TStrings;
begin
  Sl 
:= TStringList.Create;
  for 
i := 0 to ListBox1.Count-1 do
    if 
AnsiContainsText(ListBox1.Items[i], Edit1.Text) then
      Sl
.Add(ListBox1.Items[i]);
  
ListBox1.Clear;
  
ListBox1.Items := Sl;
  
Sl.Free;
end; 
الرد
#3
نعم بارك الله فيك اخي...
في الحقيقة لم اجرب المثال...
لأني رأيت في انه يحمل عبارة listbox1.clear وهذا لا يناسب برنامجي لأنه يتعامل مع
ملف .txt ... ويبم حفظ الأسماء فيه...
ان شاء الله اتضحت الفكرة ؟

نعم...
لكن الفكرة هي صحيحة وشكرك عليها...
يعني لو في شي مثل hide او visable = false لكانت نجحت Smile

نعم...
بارك الله فيك على كل حال...
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم