التحقق من ال editbox قبل ادخاله في listbox ؟
#1
السلام عليكم ورحمة الله

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

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


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

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

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


الملفات المرفقة
.zip   Name_saver_v02.zip (الحجم : 325.81 ك ب / التحميلات : 71)
الرد
#2
و عليكم السلام و رحمة الله

استعمل دالة 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

بالتوفيق ان شاء الله
الرد
#3
السلام عليكم من جديد...
اخي الكريم.... والله اكاد اجن...

لماذا يقول لي خطأ في ال 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;
الرد
#4

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

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

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

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

والله اعلم لن اتمكن من الرد اليوم ولكن غدا صباحا ان شاء الله ...
الرد
#6
جرب هكذا 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; 

بالتوفيق ان شاء الله
الرد
#7
السلام عليكم ورحمة الله...

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

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

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; 

بارك الله فيكم
الرد
#8
إقتباس :والأمر الآخر لم افهم ماذا تقصد ب
لكل شرط يوجد محقق او غير محقق . ادا كنت تريد دمج هدا الكود فى حالت تحقق الشرط .
كود :
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
الرد
#9
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

نعم اخي... بورك فيك على التوضيح...
جزاك الله كل خير وبارك فيك
الرد
#10
بالنسبة للأخطاء اخي 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 دون اكمال تنفيذ الأوامر التالية و في حالة عدم التطابق تنفذ كل الأوامر.

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


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


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