تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشروع بناء أداة طباعة
#1

[COLOR="#FF0000"]************************
يرجى مراجعة الشرح على الرابط
http://vb4arb.com/vb/showthread.php?4653...Printer%29
************************[/COLOR]
التقارير والطباعة، هاجس يؤرق المبرمجين، أو لنقل هو هاجس يؤرقني أنا شخصياً وأمثالي ممن لايحبون تصميم التقارير المعقدة ولا يحبون أسلوب تصميم التقارير (لا أطيق تصميم التقارير) خاصة

المتبع في Crystal Report ، بل لازلت لا أعلم هل ينبغي تنصيب ملفات إذا استخدمنا Crystal report، هل هو مجاني ؟

ثم إن هناك أمرٌ أهم، أنا من المبرمجين الذين يعتنون بمظهر البرنامج وهو أول ما أتفنن فيه في مشاريعي ، فالناس يحبون المظاهر، حتى إني قاطعت DataGridView القبيحة وصرت أستخدم

ListView كبديل جميل (طبعا مع تطوير كبير)...

لاحظ الصورة التالية



البيانات معروضة على أداة List View ، تخيل لو طُلب منك طباعة(برمجياً وممنوع أستخدام Print Screen) لهذه البيانات بنفس التنسيق والألوان،لا أدري إن كنت ستقوم بتصميم تقرير يعرض

نفس البيانات ويقوم بالتنسيق بنفس الشروط، أما أنا فأرفض أن أكرر الجهد مرتين، فكيف إذا كان المطلوب هو طباعة كل جدول (يعني مضاعفة العمل).

هذا الموضوع سيكون سلسلة مختصرة لمتابعة بناء الأداة التي توصلنا إلى هذه النتيجة:


وفي النهاية سأرفق الأداة
===================

المشروع : بناء أداة طباعة وتصميم تقارير
وصف المشروع: أداة تقوم بطباعة البيانات من أدوات التحكم(Controls) وتتيح تصميم التقارير بأدوات التحكم العادية
الهدف: تسهيل وتبسيط عملية الطباعة وتصميم التقارير
الرد }}}
تم الشكر بواسطة:
#2
نبدأ نظرياً من النهاية، النهاية ترسم لنا الطريق إلى نقطة البداية Smile

تأتي التقارير عادة في هذه الصورة(Header - Details - Footer)، رأس الصفحة للعناوين ويتكرر في كل صفحة، اما التفاصيل فهي المحتوى والمادة الأساسية، وأما ذيل الصفحة فيحتوي في الغالب رقم الصفحة ويتكرر في كل صفحة أيضاً.

صورة توضيحية




بعد إذن القارئ سنقوم بتحليل بسيط لهذا التقرير، وذلك لوضع قاعدة عامة(حاول التعميم واستنباط القواعد ما استطعت، فبذلك تبتعد عن الأخطاء وتقترب من المثالية)

1- الأجزاء الثلاثة (Header - Details - Footer) كل منها يسمى قسم أو Section.
2- كل قسم يحتوي على بيانات مطبوعة.
3- بعض الأقسام تتكرر في كل صفحة(Header - Footer) وبعضها لا(Details).
4 - اليانات لايمكنها التواجد خارج الأقسام.

بناء على هذه الملاحظات نضع قاعدة عامة تصف التقرير بشكل أعم: التقرير عبارة عن صفحة أو أكثر كل صفحة تحتوي على أقسام كل قسم يحتوي على معلومات.

وبناء على ذلك يكون قالب التقرير العام بهذا الشكل
http://img189.imageshack.us/img189/3217/reptempg.jpg">


يبتع....
الرد }}}
تم الشكر بواسطة:
#3
نواصل من حيث انتهينا مع تفصيل أكثر

توصلنا إلى أن التقرير(نتحدث عن التقرير المطبوع وليس تقرير بما هو نتيجة مفيدة لبحث عن بيانات) = صفحات، والصفحة = أقسام، والقسم = معلومات ... بيانات مطبووعة
http://img853.imageshack.us/img853/6581/entity2.jpg">



الرد }}}
تم الشكر بواسطة:
#4
سنتحدث الآن عن نقطة هامة جداً تخص مساحة صفحة التقرير أثناء التصميم ومساحته أثناء الطباعة !

أثناء التصميم سيكون عبارة عن كنترول عادي جداً كما في الصورة



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

ما هو الحل ؟

الحل هو استخدام مقياس رسم (Scale) ، وإذا أمعنا النظر سنزيد في التفصيل ونقول : نحتاج مقياس رسم أفقي وآخر عمودي

وذلك لأن النسبة بين الطول والعرض غير ثابتتين

الصورة التالية توضح الفكرة


فعلى هذا يكون مقياس الرسم الأفقي = مقدار عرض ورقة التصميم ÷ مقدار عرض ورقة الطباعة >> م س = س1 ÷ س2
مقياس الرسم العمودي = مقدار طول ورقة التصميم ÷ مقدار طول ورقة الطباعة >> م ص = ص1 ÷ ص2

طبعا على المصمم أن يراعي نسبة الطول إلى العرض لتتناسب مع الورقة الحقيقية(هو المسئول عن الشذوذ في المساحة)


وهذا المقياس يطبق على جميع أجزاء التقرير (صفحة - قسم - أدوات)
الرد }}}
تم الشكر بواسطة:
#5
بعد هذه المشاركة سأتوقف حتى أنتهي من الأداة وما لدي الآن هو مجرد مسودة ناقصة وإذا اكتملت سأرفقها لكم


النتيجة النهائية ستكون عبارة عن UserControl باسم Page يقبل فقط Section وهي أداة مشتقة من Panel، والأخيرة تقبل أدوات تدعم واجهة IPrintableControl

سأقوم بتطوير 4 أدوات

1- ListView
2- TextBox
3- Label
4 - PictureBox


ويمكن مستقبلاً دعم المزيد من الأدوات لتكون قابلة للطباعة، ولكن هذا القدر كافي فأكثر التقارير تعتمد فقط على النصوص والجداول والصور

صور أولية

هذه صورة تصميم التقرير بكل سهولة مع ادوات التحكم العادية



وهذه صورة للتقرير وهو مطبوع
الرد }}}
تم الشكر بواسطة:
#6
[COLOR="#800000"]السلام عليكم

بالتوفيق ان شاءالله[/COLOR]
الرد }}}
تم الشكر بواسطة:
#7
ما شا الله مجهود رائع وجميل
بانتظار تتمة الموضوع Smile
الرد }}}
تم الشكر بواسطة:
#8
دعواتكم بالتوفيق، واجهتني صعوبة هندسية والحمد لله تجاوزتها، إذا تم كما أريد سنستغني عن كل أداة تقارير


وستكون التقارير منطقية (أي على الفورم بالأدوات العادية) وإن شئنا طباعتها نصمم لها تقرير بنفس الأدوات والبيانات يجوز أخذها من أدوات التقرير الأصلية، وبالتالي تختص الأداة فقط بالطباعة ولا دخل لها بقاعدة البيانات ولن نضطر إلى تصميم بطريقة مملة ومعقدة !، كما ان الأداة ستكون مفتوحة هندسياً وقابلة للتطوير عن طريق إضافة أدوات أخرى يمكن طباعتها مثل RitchTextBox + DataGridView
الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم

طال الغياب والغنائم جاهزة بنسبة 95% Smile


بعد جهد جهيد تمكنت من بناء أساس محترم وصار لدينا أداة Component ممتاز للطباعة

يطبع نصوص وجداول وصور (TextBox/Label + ListView + PictureBox)

هذه صورة لوقت التصميم



وهذه صورة للطباعة






بقيت لمسات وتكون الأداة بين أديكم وسنسميها FormsPrinter حاليا للتجريب والتنقيح
الرد }}}
تم الشكر بواسطة:
#10
تم الانتهاء من النسخة الأولية ، لا تخلو من الأخطاء فلم أشغل عقل الException بعد !

الأداة عبارة عن ملف dll سحب وإلقاء في ToolBox وستظهر مجموعة أدوات


تم التحديث : 30 -7 - 2013

الكود[url="http://vb4arb.com/vb/uploaded/105_01375165400.rar"]
FormsPrinterTester[/url]

الأداة (ملف dll)
FormsPrinter
الرد }}}
تم الشكر بواسطة:



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


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