طباعة محتوى المكون StringGrid
#1
السلام عليكم ورحمة الله وبركاته 
تم تصميم برنامج صغير بالإعتماد على المساعدات بالموضوع الذي طرحته سابقا
https://delphi4arab.net/forum/showthread.php?tid=11127
لم اجد طريقة لطباعة محتوى المكون StringGrid بالـ QuickReport 
Smile
الرد
#2
وعليك السلام ورحمة الله وبركاته

* بما أنك في البداية ، هذه فرصة لتعلم FastReport  ، قبل أن نبدأ حمله و ثبته

* لا يختلف كثيرا عن Quickreport نفس المبدأ

* في هذا الموضوع أحاول الرد بإختصار على الاهم الامور قبل الدخول صلب الموضوع
* توجد عدة دروس على الانترنت من بينها دروس للأستاذ أسامة غزال من الأردن

كود :
https://www.youtube.com/channel/UC0BnwAyiFtNaJVdZ28zJ70w/playlists

← نظرة سريعة عن التقرير :

⇐ من القائمة ندرج frxReport1  [صورة: 924865496.png]

↤ نضغط مرتين على المكون لفتحه :

[صورة: 905421882.png]


 ـ رقم 01 عندما نربط المكون بقاعدة البيانات تظهر لنا الجداول مع الحقول ، سنصل إليها لاحقا لشرحها
 ـ رقم 02 خصائص و أحدات مكون التقرير الموضوع في الصفحة
 ـ رقم 03 لإدراج المكونات
 ـ رقم 04 خصائص المكون من نصوص و الأشكال فيها المحذات و تغيير النص و التلوين ......
 ـ توجد عدة خصائص هذه الاهم

↤ أول شئ مهم وهو إعداد الصفحة :
[صورة: 174773975.png]

⨞ إعداد الصفحة يخص المبرمج لتغييرها نتبع الخطوات التالية

_ 1 _ ضغط باليمين على صفحة التقرير
[b]_ 2 _ نضغط على Edit لتظهر الإعدادات
[/b][b]_ 3 _ نختار حجم الصفحة حسب القائمة أو تخصيص الحجم
[/b][b]_ 4 _ وضعية الصفحة على الطول أو العرض
[/b][b]_ 5 _ مسافة الهامش
[/b][b]_ 6 _ خصائص أخرى
[/b][b]_ 7 _ تقسيم الصفحة لعدة أعمدة ، يمكن إعطاء عرض العمود ، هنا عند طباعة قائمة عند نهاية العمود الاول تنتقل إلى العمود الثاني و عند الانتهاء من الصفحة ينتقل الى الصفحة الموالية
[/b][b]_ 8 _ هنا عدة إعدادات من بينها هذه الخاصية التي فيها × مثال صفحة عرضها 10 سنتم و طولها 1 متر ، عند التأشير على هذه العلامة ، طول الورقة يحدد حسب البيانات المعروضة في الصفحة ، مثال كالتي في المتاجر[/b]

↤ مما يتكون التقرير :

[صورة: 789575979.png]


 ـ 01 هنا لادراج أشرطة التقرير و التي بدورها تتكون من عدة أنواع :

* الشريط هو مساحة أو اطار لوضع فيها النصوص و الاشكال و الجداول و يمكننا التحكم في طولها معدا شريط data حسب حجم البيانات

 ـ 02 هذا الشريط يظهر فقط في بداية الصفحة الاولى كمثال يكتب فيه عنوان التقرير
 ـ 03 هنا يمكن إستعمال هذا الشريط لفهرس
 ـ 04 هذا الشريط يظهر في بداية الصفحة
 ـ 05 هذا الشريط يظهر في نهاية الصفحة
 ـ 06 هذا الشريط يستعمل في البداية مع شريط data أو أشرطة اخرى و يمكن إستعماله عدة مرات
 ـ 07 هذا الشريط يستعمل في النهاية مع شريط data أو أشرطة اخرى و يمكن إستعماله عدة مرات
 ـ 08 هذا الشريط يستعمل مع قواعد البيانات لطباعة جدول لإظهاره على شكل سطور
 ـ 09 هذا الشريط يستعمل مع قواعد البيانات لطباعة جدول الابن التابع لجدول الاب كل سطر يأتي ورائه عدة خاصة بالإبن لإظهاره على شكل سطور
 ـ 10 هذا الشريط يستعمل مع قواعد البيانات لطباعة قبل data لتقسيم التقرير الى مجموعات بواسطة الفلترة
 ـ 11 هذا الشريط يستعمل مع الشريط رقم 10 بعد data يعتبر ذيل المجموعة
 ـ 12 يساعد هذا الشريط كتابع لأي شريط كمثال لـ data  في خصائصه يظهر مع كل سطر أو في النهاية أو يكرر وفق عدد معين
 ـ 13 نفس الأمور السابقة التي طباعتها من الاعلى إلى الأسفل ، أما الطباعة تكون من اليسار إلى اليمين

* ملاحظة الأمور التي ذكرتها هي أمور مختصرة فلكل شريط عدة مهام

← إذا كانت لدينا قاعدة بيانات كيف نظهرها في FastReport :

* كل جدول يربط على حدى مثال لدينا  DataSource1 التي مربوطة مع ADOTable1

ـ أولا ندرج  frxDBDataset1 ونربطه مع DataSource1 التي بدورها مربوطة مع ADOTable1

[صورة: 276553549.png]
ـ رقم 02 لإعادة تسمية الجدول الذي سيظهر في frxReport  ، تسمية مساعدة

↤ الأن نضغط مرتين على مكون frxReport  لفتحه :

[صورة: 635443696.png]

ـ 01 _ نذهب إلى Report
ـ 02 _ وبعدها إلى Data
ـ 03 _ نأشر على الجداول المراد إظهارها ، مباشرة ستظهر على الشريط العمودي على اليمين

⇐الان إلى الجواب : طباعة StringGrid في [b]frxReport 
[/b]
ـ بما أن StringGrid عبارة جدول لوضع البيانات ، سحتاج إلى مكون لإدراج فية البيانات

ندرج frxUserDataSet ، يعتبر مكون من مكونات frxReport 


غدا سأكمل الموضوع
[-] كل من 4 users say قال شكرا ل larbiparadox على المشاركة المفيدة
  • Ibn Battuta, لؤي, محمد عبد العزيز, Delphi4Us
الرد
#3
شكرا جزيلا لك اخي الكريم لعربي Smile تحياتي لك
متابع معك ان شاء الله..جزاك الله كل الخير
،
لقد توصلت الى كيفية انشاء قاعدة بيانات بالاعتماد
على المكون StringGrid بعد عناء طويل امس لغاية الواحدة ليلا (
تم ذلك عن طريق تعبئة مكون clientdataset وربطه مع المكون datasource
هكذا يسهل عرض البيانات المراد طباعتها على المكون quickreport
بقي لدي مشكل واحد فقط هو دالة formatfloat لم تنجح معي عند سطر المبلغ في قاعدة البيانات
اقصد عند طباعة البيانات تظهر المبلغ هكذا 10000 بدلا من 000.00 10
لقد ارفقت لك ما قمت بعمله تفضل البرنامج بالدلفي 7
https://www.sendspace.com/file/0cdvhv
[-] كل من 1 user says قال شكرا ل Ibn Battuta على المشاركة المفيدة
  • larbiparadox
الرد
#4
تابع :

⇐الان إلى الجواب : طباعة StringGrid في [b]frxReport 
[/b]
ـ بما أن StringGrid عبارة جدول لوضع البيانات ، سنحتاج إلى مكون لإدراج فية البيانات

ندرج frxUserDataSet ، يعتبر مكون من مكونات frxReport


* نقوم بالاعدادات التالية

[صورة: 572130812.png]

ـ رقم 01 ندخل أسماء الحقول الافتراضية التي سننقل لها البيانات فبما بعد
ـ رقم 02 بعد إدخال أسماء الحقول نضغط على ok
ـ رقم 03 تغيير إسم قاعدة البيانات الذي سيظهر  في frxReport ، التغيير إختياري

* الان إلى إعداد frxReport و ذلك بضغط عليه مرتين لفتحه :

[صورة: 184010274.png]

الان frxUserDataSet1 يعتبر قاعدة بيانات لإدراجه نتبع نفس الخطوات التي ذكرتها سابقا

* الان ندرج شريط لوضع بيانات رأس الصفحة PageHeader1  نضع فيه عنوان التقرير و أسماء الجداول
[صورة: 587356592.png]
ـ رقم 01 من هنا ندرج الشريط الذي إسمه محدد في شكل رقم 2

* الان ندرج شريط data لاظهار سطور الموجودة في grid أو البيانات الموجودة في قاعدة البيانات
[صورة: 385235788.png]
ـ رقم 01 من هنا ندرج الشريط الذي إسمه محدد في شكل رقم 2 و رقم 03 إسم قاعدة البيانات التي يجلب منها السطور

الان نسحب الحقول من قاعدة البيانات الحقول المراد إظهارها كما هو مبين في الصورة التالية
[صورة: 334853262.png]

أو طريقة أخرى لإدراج الحقول

[صورة: 904831903.png]
ـ رقم 01 من هنا ندرج مربع النص ، رقم 2 من هنا تظهر لنا عدة خيارات الخاصة بقاعدة البيانات و أخرى ، رقم 3 نضغط مرتين لإختيار الحقل و 4 نضغط ok للتأكيد

* رقم 1 من هنا ندرج شريط ذيل الصفحة كما هو مبين إسمه في التوضيح رقم 2

[صورة: 187253599.png]

في الصورة الموالية في للتوضيح ـ رقم 01 من هنا ندرج مربع النص ، رقم 2 نكتب نص و نظيف له الامر الذي يعطينا رقم الصفحة نختار كما هو مبين في توضيح رقم 3 توجد عدة خيارات نختار كما هو موضح في رقم 4 و بعدها ok

[صورة: 207520911.png]
هذا مثال بسيط على إعداد صفحة الطباعة

ملاحظة : المسافة التي تظهر بين الاشرط لا تظهر أثناء طباعة ، نراها فقط أثناء التصميم فقط ، وهذا لتنظيم التصميم أثناء البرمجة فقط

[صورة: 861563018.png]

الان إلى عملية جلب البيانات من StringGrid1 إلى frxUserDataSet1

[صورة: 731045776.png]
في خصائص الأحداث للمكون frxUserDataSet1 نضغط مرتين في الحدث onGetValue  نضع الكود البرمجي التالي

كود :
procedure TForm1.frxUserDataSet1GetValue(const VarName: string;   var Value: Variant);   var   i: Integer; begin        i :=  frxUserDataSet1.RecNo ;   if VarName = 'N' then     Value := StringGrid1.Cells[1,i+1]   else if VarName = 'NOM' then     Value := StringGrid1.Cells[2,i+1]   else if VarName = 'PRENOM' then     Value := StringGrid1.Cells[3,i+1] end;

في هذا الكود البرمجي عند قراءة السطر إذا كان إسم الحقل يساوي اسم معين أحضر له القيمة من الخلية المعينة

الان إلى برمجة قفل الطباعة نضع فيه الكود البرمجي التالي

كود :
procedure TForm1.Button1Click(Sender: TObject); begin if StringGrid1.RowCount > 2 then begin   frxUserDataSet1.RangeEnd := reCount;   frxUserDataSet1.RangeEndCount :=  StringGrid1.RowCount -1 ;   frxReport1.ShowReport; end; end;

هنا في هذا الكود البرمجي : إذا كا عدد سطور  StringGrid1 أكثر من 2 ينفذ ، السطر 1 الاول خاص بعناوين الحقول و رقم 2 تبدأ البيانات

نقوم بإعداد frxUserDataSet1 الخاصية الولى RangeEnd نعطيها قيمة reCount و RangeEndCount نعطيها StringGrid1.RowCount -1

وبعدها ننفذ الطباعة frxReport1.ShowReport

تحميل المثال من المرفقات


.rar   exmp Print StringGrid.rar (الحجم : 28.71 ك ب / التحميلات : 49)

(06-12-2020, 04:45 PM)Ibn Battuta كتب : شكرا جزيلا لك اخي الكريم لعربي Smile تحياتي لك
متابع معك ان شاء الله..جزاك الله كل الخير
،
لقد توصلت الى كيفية انشاء قاعدة بيانات بالاعتماد
على المكون StringGrid بعد عناء طويل امس لغاية الواحدة ليلا (
تم ذلك عن طريق تعبئة مكون clientdataset وربطه مع المكون datasource
هكذا يسهل عرض البيانات المراد طباعتها على المكون quickreport
بقي لدي مشكل واحد فقط هو دالة formatfloat لم تنجح معي عند سطر المبلغ في قاعدة البيانات
اقصد عند طباعة البيانات تظهر المبلغ هكذا 10000 بدلا من 000.00 10
لقد ارفقت لك ما قمت بعمله تفضل البرنامج بالدلفي 7
https://www.sendspace.com/file/0cdvhv

[صورة: 415341876.png]
[-] كل من 3 users say قال شكرا ل larbiparadox على المشاركة المفيدة
  • Ibn Battuta, onexite, Delphi4Us
الرد
#5
جاري التجربة الله يجعلها في ميزان حسناتك خويا لعزيز لعربي Smile
الرد
#6
هذه اضافة صغيرة
يمكن التجميع وحساب المجاميع باستخدام هذه الطريقة
[صورة: 508011963.jpg]
وبعدها
[صورة: 524459191.jpg]
وبعدها
[صورة: 505075150.jpg]
[-] كل من 4 users say قال شكرا ل onexite على المشاركة المفيدة
  • Ibn Battuta, larbiparadox, محمد عبد العزيز, Delphi4Us
الرد
#7
بالنسبة لنقل الصور من خارج قاعدة البيانات ومربوطة بها عنطريق رقم تسلسلي الى الفاست روبورت عن طريق نفس المكون frxuserdataset
كيف تتم
الرد


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


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