تقرير quickreport لقائمة كل شهر
#1
السلام عليكم
لدي قائمة متكونة من 12 شهر ، ولي الإخيار في تعيير عدد من الشهور بـ(checkbox) أي أختار مثلا (جانفي ، فيفري ومارس) وكل شهر به معلومات ، ويجب أن أطبع الشهور المختارة فقط في شكل قائمة..
وأرفق صورة للتوضيح
كود :
http://im74.gulfup.com/50Quau.png http://im74.gulfup.com/0tADyu.png
الرد
#2
السلام عليكم
أخي لم تحدد ما إذا كنت تستعمل جدول قاعدة بيانات أم لا .. ولكنني سأفترض أنك تستخدم جدول قاعدة بيانات .. وإذا كنت كذلك فهل حقل الشهر هو من النوع الحرفي أم هو رقمي ..
عموما : سأفترض أنك تستخدم حقل الشهر من النوع الحرفي واسمه Month وبعد ذلك ستكون التغييرات بسيطة إذا كان الحقل رقمي

الفكرة هنا أنك ستقوم بفلترة الحدول حسب التحديد المطلوب وباعتبار أن الجدول مربوط بالكويك ريبورت فإن السجلات المحددة فقط هي التي ستظهر ... إذا اللعبة هنا في الفلترة وبإعتبار أن الفلترة متغيرة سيكون الشغل كله على CheckBox
إذا ماعليك فعله هو :
أولا - قم بتعريف متغيرات عامة وهي S , Filter من نوع ٍString و List من نوع TStringList
ثانيا في حدث OnCreate الخاص بالفورم أكتب

كود :
List := TStringList.Create; List.Delimiter := ','; s := '';

ثالثا - حدد CheckBox الأول وقم بكتابة الكود التالي في حدث OnClick الخاص به

كود :
if TCheckBox(Sender).Checked then begin List.Add(TCheckBox(Sender).Caption); s := List.DelimitedText; end else begin List.Delete(List.IndexOf(TCheckBox(Sender).Caption)); s := List.DelimitedText; end; Filter := 'Month = '+StringReplace(s, ',',' Or Month = ', [rfReplaceAll]);

رابعا : وهو الأهم .. قم بتحديد بقية CheckBox ماعدا الأول ثم إقتح قائمة الحدث وأذهب إلى حدث Onclick ولكن لا تقم بالنقر المزدزج عليه ، بل إضغط على المثلث في اليمين لتظهر لك قائمة إختر منها الحدث السابق لـ CheckBox الأول .. سيتم تنفيذ الكود في حدث Onclick الخاص بـ CheckBox الأول عن طريق بقية الـ CheckBoxes

النتيجة أن المتغير الذي أسميناه Filter سيحصل على ChckBox المحددة فقط وبعد ذلك قم بتطبيق نتيجة الاختيارات على الفلتر الخاص بالجدول بهذا الشكل
على افتراض أن مكون الجدول اسمه Table1 وأن لديك زر لإظهار الكويك ريبورت
قبل إظهار الكويك ريبوت ضع هذا الكود

كود :
Table1.Close; Table1.Filtered := False; Table1.Filter := Filter; Table1.Filtered := True; Table1.Open;

بإذن الله ستظهر لك نتائج مرضية
طبعا ستقوم ببعض التعديلات ليظهر التقرير كما بالصزرة

تبقى مسألة حقل الشهر إذا كان من النوع الرقمي .. هنا يمكنك إستخدام CheckBox.tag بدلا من CheckBox.Caption
ماعليك فعله هو لإعطاء tag رقم الشهر بدلا من اسمه وسيشتغل بإذن الله
الرد
#3
أخي قمت ببعض التعديلات على الكود
ضع هذا الكود في حدث OnClick الخاص بـ CheckBox

كود :
if TCheckBox(Sender).Checked then List.Add(TCheckBox(Sender).Caption) else List.Delete(List.IndexOf(TCheckBox(Sender).Caption)); s := List.DelimitedText; Filter := 'Month = '''+StringReplace(s, ',',''' Or Month = ''', [rfReplaceAll])+'''';

فإذا كنت تستخدم رقم في حقل الشهر بدلا من اسم الشهر فضع هذا الكود في حدث OnClick الخاص بـ CheckBox

كود :
if TCheckBox(Sender).Checked then List.Add(IntToStr(TCheckBox(Sender).tag)) else List.Delete(List.IndexOf(IntToStr(TCheckBox(Sender).tag))); s := List.DelimitedText; Filter := 'Month = '+StringReplace(s, ',',' Or Month = ', [rfReplaceAll]);
الرد
#4
أخي بارك الله فيك على الشرح المفصل
ولاكن انا لا أستخدم جدول قاعدة بيانات في هذه العملية
الرد
#5
حسنا أخي ...
لقد عملت لك البرنامج ولكن بإستخدام Rave Reports وليس Quick Report
أيضا استخدمت RxSpinEdit في عداد الأيام ....

المهم حاول تشغيل الرنامج فإن لم يشتغل معك راجع الكود لأخذ فكرة عن طريقة كتابة الكود


الملفات المرفقة
.rar   prj.rar (الحجم : 89.31 ك ب / التحميلات : 99)
الرد
#6
إن لم يكن شيء من الثقل بالQuick Reportلأني لا أجيد كثيرا Rave Reports
الرد
#7
أخي متأسف لأني ليس لدي معلومات عن برمحة الكويك ريبورت لأني قد هجرته من مدة طويلة .. أما الريف ريبورت فيأتي على ماأعتقد مع نسخة الدلفي السابعة فما فوق ...
الرد


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


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