delphi4arab منتديات دلفي للعرب
التحقق من ال editbox قبل ادخاله في listbox ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : التحقق من ال editbox قبل ادخاله في listbox ؟ (/showthread.php?tid=331)

الصفحات: 1 2


التحقق من ال editbox قبل ادخاله في listbox ؟ - AL-MOB4RM3G - 16-12-2008

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

اخواني حلّلت بي مشكلة مع البرنامج الذي صممته البارحة Smile

صورة البرنامج
[صورة: namesaverbt3.jpg]


والمشكلا في الحقيقة هي انني عند ادخال اسم في ال editbox ومن ثم الضغط على ok ليتم اضفتها في listbox .

قبل الإضافة الى ال listbox كيف يتم مقارنة اذا كان الإسم موجود مسبقا ام لا ؟
فإن لم يكن موجودا يضاف الإسم عادي ولكن ان كان الإسم المدخل موجود مسبقا يتم اظهار showmessage تخبر بأن الإسم موجود مسبقا بارك الله فيكم...

ان شاء الله يكون الأمر واضح
البرنامج مع السورس موجود في المرفقات
والسلام عليكم


التحقق من ال editbox قبل ادخاله في listbox ؟ - STRELiTZIA - 16-12-2008

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

استعمل دالة Trim لحذف الفراغات، يمكنك استدعاءها فقط من SysUtils دون كتابة الدالة كاملة
PHP كود :
function Trim(const S: string): string;
var
  
I, L: Integer;
begin
  L 
:= Length(S);
  
I := 1;
  while (
I <= L) and (S[I] <= ' ') do Inc(I);
  if 
I > L then Result := '' else
  
begin
    
while S[L] <= ' ' do Dec(L);
    
Result := Copy(S, I, L - I + 1);
  
end;
end; 


ثانيا وضع شرط : if x <> '' then

بالتوفيق ان شاء الله


التحقق من ال editbox قبل ادخاله في listbox ؟ - AL-MOB4RM3G - 16-12-2008

السلام عليكم من جديد...
اخي الكريم.... والله اكاد اجن...

لماذا يقول لي خطأ في ال else علماّ انني انا لو بدلتها مع end لا يحصل الخطا ؟

كود :
procedure TForm1.BitBtn1Click(Sender: TObject); var s: string; begin s:= edit1.Text; statusbar1.Panels.Items[2].Text := s; if s = '' then //do nothing! else if s <> listbox1.Items.Text then begin listbox1.Items.Add(s); label1.Caption:= inttostr(listbox1.Items.Count); edit1.Text:= ''; edit1.SetFocus else -------------------------------- هنا الخطأ ---------------------- showmessage(listbox1.Items.Text); end;



التحقق من ال editbox قبل ادخاله في listbox ؟ - محمد عبد العزيز - 16-12-2008


ضع end قبل else
-
لديك خطأ جوهري بالمقارنة
ListBox.Items.Text تعطيك كل الاسماء
الاسماء في جدول Items[] حيث اول عنصر يبداء بالصفر 0
الاسم الاول هو
كود :
ListBox1.Items[0]
والثاني هو
كود :
ListBox1.Items[1]
-
المقارنة تكون في حلقة حسب عدد الاسماء الموجودة ListBox1.Items.Count-1
والسلام عليكم



التحقق من ال editbox قبل ادخاله في listbox ؟ - AL-MOB4RM3G - 16-12-2008

نعم اخي ديلتا عزيز
المشكلة كما قلت هي انني لدي خطأ جوهري والله المستعان...
لكين كيف اعدله ؟

يعني انا جربت ب هذه الكود الذي وضعته لكن ما مشي الحال.
ListBox1.Items.Count-1

هل لديك حل اخي بكيفية ستكون المقارنة بين ال إسم الجديد و كل الأسماء الموجودين في ال listbox مسبقاّ ؟

بارك الله فيكم

والله اعلم لن اتمكن من الرد اليوم ولكن غدا صباحا ان شاء الله ...


التحقق من ال editbox قبل ادخاله في listbox ؟ - STRELiTZIA - 17-12-2008

جرب هكذا Smile

PHP كود :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  
sName: string;
  
x: Integer;
begin
  sName 
:= Edit1.Text;
  if 
Trim(sName) <> '' then
  begin
    
for x := 0 to listbox1.Items.Count - 1 do
    
begin
      
if Listbox1.Items.Strings[x] = sName then
      begin
        MessageBox
(Handle,
          
PChar('Name Already Exists : ' + sName),
          
PChar('Error'),
          
MB_ICONERROR);
        Exit;
      
end;
    
end;
    
Statusbar1.Panels.Items[2].Text := sName;
    
Listbox1.Items.Add(sName);
    
Label1.Caption := IntToStr(Listbox1.Items.Count);
  
end;
end; 

عندك اخطاء اخرى بما يخص حفظ و فتح الملفات..

يجب ان تكون الأوامرالتي تنفذ تحت شروط في Block واحد يعني بين Begin و end مستقلة
PHP كود :
if xxxxx.Execute then
begin
...
...
...
...
end; 

بالتوفيق ان شاء الله


التحقق من ال editbox قبل ادخاله في listbox ؟ - AL-MOB4RM3G - 17-12-2008

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

نعم اخي اكرمك الله...
الحل هذا صحيح ومشي الحال....

بس اخي سؤالين...

PHP كود :
for x := 0 to listbox1.Items.Count - 1 do
    
begin
      
if Listbox1.Items.Strings[x] = sName then
      begin 

ماذا حدث هنا ؟

والأمر الآخر لم افهم ماذا تقصد ب

إقتباس :عندك اخطاء اخرى بما يخص حفظ و فتح الملفات..

الكود الذي استخدمته انا هو...

PHP كود :
procedure TForm1.BitBtn5Click(Sender: TObject);
begin
if opendialog1.Execute then
listbox1
.Items.LoadFromFile(opendialog1.FileName);
label1.Caption:= inttostr(listbox1.Items.Count);
edit1.SetFocus;
end; 

و

PHP كود :
procedure TForm1.BitBtn6Click(Sender: TObject);
begin
if savedialog1.Execute then
listbox1
.Items.SaveToFile(savedialog1.FileName);
label1.Caption:= inttostr(listbox1.Items.Count);
edit1.SetFocus;
end; 

بارك الله فيكم


التحقق من ال editbox قبل ادخاله في listbox ؟ - hanipino - 17-12-2008

إقتباس :والأمر الآخر لم افهم ماذا تقصد ب
لكل شرط يوجد محقق او غير محقق . ادا كنت تريد دمج هدا الكود فى حالت تحقق الشرط .
كود :
label1.Caption:= inttostr(listbox1.Items.Count); edit1.SetFocus;

يجب ان يكون الكود على هدا الشكل :
كود :
if savedialog1.Execute then Begin listbox1.Items.SaveToFile(savedialog1.FileName); label1.Caption:= inttostr(listbox1.Items.Count); edit1.SetFocus; end;

فى غير دالك فكودك صحيح . Smile


التحقق من ال editbox قبل ادخاله في listbox ؟ - AL-MOB4RM3G - 17-12-2008

hanipino كتب :لكل شرط يوجد محقق او غير محقق . ادا كنت تريد دمج هدا الكود فى حالت تحقق الشرط .
كود :
label1.caption:= inttostr(listbox1.items.count); edit1.setfocus;

يجب ان يكون الكود على هدا الشكل :
كود :
if savedialog1.execute then begin listbox1.items.savetofile(savedialog1.filename); label1.caption:= inttostr(listbox1.items.count); edit1.setfocus; end;

فى غير دالك فكودك صحيح . Smile

نعم اخي... بورك فيك على التوضيح...
جزاك الله كل خير وبارك فيك


التحقق من ال editbox قبل ادخاله في listbox ؟ - STRELiTZIA - 17-12-2008

بالنسبة للأخطاء اخي Hanipino اجاب عليها بوضوع Big Grin
PHP كود :
for x := 0 to listbox1.Items.Count - 1 do 
    
begin 
      
if Listbox1.Items.Strings[x] = sName then 
      begin  
Exit;
end; 

1- اخذ الأسماء الموجودة حسب ترتيبها باستعمال Count للحصول على عددها الذي يصبح هو عدد الدورات.
2- مقارنة كل اسم حسب ترتيبة x بالاسم المدخل الموضوع في المتغير الحرفي sName و في حالة تطابق يخرج رسالة تخبر للمستعمل، و يعمل Exit للخروج من الحدث OnClick دون اكمال تنفيذ الأوامر التالية و في حالة عدم التطابق تنفذ كل الأوامر.

بالتوفيق ان شاء الله