السلام عليكم ورحمة الله
اخواني حلّلت بي مشكلة مع البرنامج الذي صممته البارحة
صورة البرنامج
والمشكلا في الحقيقة هي انني عند ادخال اسم في ال 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;
ثانيا وضع شرط : if x <> '' then
بالتوفيق ان شاء الله
السلام عليكم من جديد...
اخي الكريم.... والله اكاد اجن...
لماذا يقول لي خطأ في ال 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;
نعم اخي ديلتا عزيز
المشكلة كما قلت هي انني لدي خطأ جوهري والله المستعان...
لكين كيف اعدله ؟
يعني انا جربت ب هذه الكود الذي وضعته لكن ما مشي الحال.
ListBox1.Items.Count-1
هل لديك حل اخي بكيفية ستكون المقارنة بين ال إسم الجديد و كل الأسماء الموجودين في ال listbox مسبقاّ ؟
بارك الله فيكم
والله اعلم لن اتمكن من الرد اليوم ولكن غدا صباحا ان شاء الله ...
جرب هكذا
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;
بالتوفيق ان شاء الله
السلام عليكم ورحمة الله...
نعم اخي اكرمك الله...
الحل هذا صحيح ومشي الحال....
بس اخي سؤالين...
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;
بارك الله فيكم
إقتباس :والأمر الآخر لم افهم ماذا تقصد ب
لكل شرط يوجد محقق او غير محقق . ادا كنت تريد دمج هدا الكود فى حالت تحقق الشرط .
كود :
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;
فى غير دالك فكودك صحيح .

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