اخواني حلّلت بي مشكلة مع البرنامج الذي صممته البارحة
صورة البرنامج
والمشكلا في الحقيقة هي انني عند ادخال اسم في ال editbox ومن ثم الضغط على ok ليتم اضفتها في listbox .
قبل الإضافة الى ال listbox كيف يتم مقارنة اذا كان الإسم موجود مسبقا ام لا ؟
فإن لم يكن موجودا يضاف الإسم عادي ولكن ان كان الإسم المدخل موجود مسبقا يتم اظهار showmessage تخبر بأن الإسم موجود مسبقا بارك الله فيكم...
ان شاء الله يكون الأمر واضح
البرنامج مع السورس موجود في المرفقات
والسلام عليكم
استعمل دالة 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;
السلام عليكم من جديد...
اخي الكريم.... والله اكاد اجن...
لماذا يقول لي خطأ في ال 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;
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 كود :
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;
if savedialog1.Execute then
Begin
listbox1.Items.SaveToFile(savedialog1.FileName);
label1.Caption:= inttostr(listbox1.Items.Count);
edit1.SetFocus;
end;
if savedialog1.execute then
begin
listbox1.items.savetofile(savedialog1.filename);
label1.caption:= inttostr(listbox1.items.count);
edit1.setfocus;
end;
فى غير دالك فكودك صحيح .
نعم اخي... بورك فيك على التوضيح...
جزاك الله كل خير وبارك فيك
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 دون اكمال تنفيذ الأوامر التالية و في حالة عدم التطابق تنفذ كل الأوامر.