السلام عليكم حدث لدي مشكلة عند تنفيذ مشروع و استخدام اداة printpreviewdialog و printDocument المشكلة انه بعد طباعة عدد من الفواتير يتوقف زر الطباعة عن العمل و تبدأ تظهر رسائل خطأ "خطأ عام في +GDI" و "الذاكرة ممتلئة" فما سبب ظهور هذه الرسائل و كيف أتفادى هذه المشكلة و لكم جزيل الشكر
شرح اكثر من رائع انا عملت البرنامج ممكن يا باشامهندس تبص عليه ولو فيه اي ملاحظة او اي حاجة غلط ممكن حضرتك تقولي عليها شكر drive.google.com/file/d/1FNB4EP4j_c6UhCu35cmvVnl6eyV1EVZ8/view?usp=sharing
المشكلة مش برمجية هنا (يعني مش من الكود الذي صنعته) ولكنها من أساس الأداة المستخدمة في الطباعة (printPreviewDialog1) حيث أن زر الطباعة فيها لا يعطي (OK) كـ نتيجة ضطة زر بالتالي يعود ويأمر بطباعة ما أردت طباعته، بل يطبع مباشرة لأن هذه الأداة مربوطة مسبقاً بـ (printDocument1) حيث أنه يجب أن تعطي قيمة (-1) لعداد المواد المراد عرضها في التقرير قبل أمر العرض وقبل أمر العرض،، وهناك طرق كثيرة للحل منها إضافة زر طباعة جديد للمستعرض (printPreviewDialog1) أو استبدال الزر القديم فيه بزر جديد ،، أو إضافة حدث (Click) لزر الطباعة الموجود في شاشة (printPreviewDialog1) ونضع داخل هذا الحدث ما نريد تنفيذه مثلا نجعل حدث الـ (Click) يعيد نتيجة (Ok) بالتالي يصبح الأمر السابق أن نجعل العداد يساوي (-1) ثم نعطي أمر الطباعة (printDocument1.Print();) ==== أو نجعله يطبع مباشرة بدلا من أن يعيد نتيجة (OK) أو نجعل فيه يعتمد على أدة (printDialog1) لعرض الطابعات المتاحة واختيار طابعة للطباعة.. .
والله الكورس عظمة يابشمهندس الله يباركلك الواحد ياعني علي رغم ان الكورس يعتبر قديمأ نسبياً الا شامل كل حاجه مش محتاج يذاكر غيرة
جازاك الله خيرا يا هندسة
الله يباركلك و يجزاك كل خير
ماشاء الله ابداع يااخواني ادعموا هذا الشخص كي يستمر الابداع
اسأل الله تعالى ان يزيدك من علمه ويباركلك فيه
الله يبارك فيك ويكرمك وجزاك الله خيرا وشكرا لك استاذ احمد محمد باريان على الدعم الكبير
شكرا لك جزاك الله كل خير
شكرا أستاذ سويت برنامج يأخذ قاعدة بيانات sql server
جعله الله في ميزان حسناتك
بارك الله فيك
جزاكم الله خيرا
الكود وكمان اسم الصنف والاجمالى ف منتصف الخليه
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
float margin = 40;
Font f = new Font("arial", 18, FontStyle.Bold);
string strNo = "#No " + txtInvNum.Text;
string strDate = "التاريخ :" + txtdate.Text;
string strCustomerName = "اسم العميل :" + txtCustomerName.Text;
SizeF fontsizeNo = e.Graphics.MeasureString(strNo , f); // عشان نقيس طول او عرض النص
SizeF fontsizeDate = e.Graphics.MeasureString(strDate, f); //
SizeF fontsizeCustomerName = e.Graphics.MeasureString(strCustomerName, f);
e.Graphics.DrawImage(Properties.Resources.home_house_10811,5, 5, 200, 200); //عرض صفحه الطباعه - عرض نص رقم الفاتوره مقسوم ع 2 عشان رقم الفاتوره يكون بالنص
float docWidth = (e.PageBounds.Width - fontsizeNo.Width) / 2; // ده عشان نجيب عرض الصفحه الطباعه واطرح منها عرض النص واقسم ع 2 عشان اخلىا لفاتوره ف النص
e.Graphics.DrawString(strNo ,f , Brushes.Red , (e.PageBounds.Width - fontsizeNo.Width) / 2, margin); // عايز رقم الفاتوره يكون ف النص
e.Graphics.DrawString(strDate, f, Brushes.Black, (e.PageBounds.Width - fontsizeDate.Width - margin), margin + fontsizeNo.Height);
e.Graphics.DrawString(strCustomerName, f, Brushes.Navy, (e.PageBounds.Width - fontsizeCustomerName.Width - margin), margin + fontsizeNo.Height + fontsizeDate.Height);
float preHeights = margin + fontsizeNo.Height + fontsizeDate.Height + fontsizeCustomerName.Height + 70; // 70 to come under the image logo
e.Graphics.DrawRectangle(Pens.Black, margin, preHeights, (e.PageBounds.Width - margin * 2), e.PageBounds.Height - margin - preHeights);
//// by Hassouna
//float collHeight = 60;
//float coll_1Width =300;
//float coll_2Width = 125+ coll_1Width;
//float coll_3Width = 125 + coll_2Width; // 125 +125+300
//float coll_4Width = 125 + coll_3Width;
// by Me
float collHeight = 60;
float coll_1Width = 318;
float coll_2Width = 150 + coll_1Width;
float coll_3Width = 150 + coll_2Width; // 125 +125+300
float coll_4Width = 150 + coll_3Width;
//MessageBox.Show(" coll_1Width = " + coll_1Width + ""); // 300
// السطر الاتى من تأليفى لكى يجعل كلمه الصنف ف منتصف الخانه مهما تغير عرض عمود الصنف
float itemInmiddelOfCell = ((e.PageBounds.Width - margin) + (e.PageBounds.Width - coll_1Width - margin)) / 2; // by Me
float itemInmiddelOfCell_qty = ((e.PageBounds.Width - margin - coll_1Width) + (e.PageBounds.Width - coll_2Width - margin)) / 2; // by Me
float itemInmiddelOfCell_price = ((e.PageBounds.Width - margin - coll_2Width) + (e.PageBounds.Width - coll_3Width - margin)) / 2; // by Me
float itemInmiddelOfCell_subTotal = ((e.PageBounds.Width - margin - coll_3Width) + (e.PageBounds.Width - coll_4Width - margin)) / 2; // by Me
//MessageBox.Show(" e.PageBounds.Width = " + e.PageBounds.Width + "");
//MessageBox.Show(" e.PageBounds.Width - coll_1Width = " + (e.PageBounds.Width - coll_1Width) + "");
//MessageBox.Show(" (e.PageBounds.Width - coll_1Width - margin) = " + (e.PageBounds.Width - coll_1Width - margin) + "");
//MessageBox.Show(" itemInmiddelOfCell = " + itemInmiddelOfCell + ""); // by Me
//MessageBox.Show(" itemInmiddelOfCell_qty = " + itemInmiddelOfCell_qty + "");// by Me
//MessageBox.Show(" itemInmiddelOfCell_pric = " + itemInmiddelOfCell_price + ""); // by Me
//MessageBox.Show(" itemInmiddelOfCell_subTotal = " + itemInmiddelOfCell_subTotal + "");// by Me
e.Graphics.DrawLine(Pens.Black, margin, preHeights + collHeight, e.PageBounds.Width - margin, preHeights + collHeight); //لرسم خط عرضى او افقى
//e.Graphics.DrawString("الصنف", f, Brushes.Red, e.PageBounds.Width - margin * 2 - coll_1Width, preHeights ); // by Hassouna
e.Graphics.DrawString("الصنف", f, Brushes.Red, itemInmiddelOfCell, preHeights + 10); // by me
//e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin * 2 - coll_1Width, preHeights, e.PageBounds.Width - margin * 2 - coll_1Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by Hassouna
e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin - coll_1Width, preHeights, e.PageBounds.Width - margin - coll_1Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by me
//e.Graphics.DrawString("الكميه", f, Brushes.Red, e.PageBounds.Width - margin * 2 - coll_2Width, preHeights); // by Hassouna
e.Graphics.DrawString("الكميه", f, Brushes.Red, itemInmiddelOfCell_qty, preHeights + 10); // by Me
//e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin * 2 - coll_2Width, preHeights, e.PageBounds.Width - margin * 2 - coll_2Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by Hassouna
e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin - coll_2Width, preHeights, e.PageBounds.Width - margin - coll_2Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by me
//e.Graphics.DrawString("السعر", f, Brushes.Red, e.PageBounds.Width - margin * 2 - coll_3Width, preHeights); // by Hassouna
e.Graphics.DrawString("السعر", f, Brushes.Red, itemInmiddelOfCell_price, preHeights + 10); // by Me
//e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin * 2 - coll_3Width, preHeights, e.PageBounds.Width - margin * 2 - coll_3Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by Hassouna
e.Graphics.DrawLine(Pens.Black, e.PageBounds.Width - margin - coll_3Width, preHeights, e.PageBounds.Width - margin - coll_3Width, e.PageBounds.Height - margin); //لرسم خط طولى او راسى by me
//e.Graphics.DrawString("اجمالى ", f, Brushes.Red, e.PageBounds.Width - margin * 2 - coll_4Width, preHeights); // by Hassouna
e.Graphics.DrawString("اجمالى", f, Brushes.Red, itemInmiddelOfCell_subTotal , preHeights + 10); // by Me
////////////// invoice Content
int rowsHeight = 60;
for (int x = 0; x < dataGridView_Invoice.Rows.Count; x++)
{
e.Graphics.DrawString(dataGridView_Invoice.Rows[x].Cells[0].Value.ToString(), f, Brushes.Black, itemInmiddelOfCell, preHeights + rowsHeight);
e.Graphics.DrawString(dataGridView_Invoice.Rows[x].Cells[1].Value.ToString(), f, Brushes.Black, itemInmiddelOfCell_qty, preHeights + rowsHeight);
e.Graphics.DrawString(dataGridView_Invoice.Rows[x].Cells[2].Value.ToString(), f, Brushes.Black, itemInmiddelOfCell_price, preHeights + rowsHeight);
e.Graphics.DrawString(dataGridView_Invoice.Rows[x].Cells[3].Value.ToString(), f, Brushes.Black, itemInmiddelOfCell_subTotal -50, preHeights + rowsHeight);
e.Graphics.DrawLine(Pens.Black, margin, preHeights + rowsHeight + collHeight, e.PageBounds.Width - margin, preHeights + rowsHeight + collHeight); //لرسم خط عرضى او افقى
rowsHeight += 60;
}
e.Graphics.DrawString("الاجمالى", f, Brushes.Red, itemInmiddelOfCell_price , preHeights + rowsHeight);
e.Graphics.DrawString(txtTotal.Text, f, Brushes.Blue, itemInmiddelOfCell_subTotal-50, preHeights + rowsHeight);
e.Graphics.DrawLine(Pens.Black, margin, preHeights + rowsHeight + collHeight, e.PageBounds.Width - margin, preHeights + rowsHeight + collHeight); //لرسم خط عرضى او افقى
}
السلام عليكم ورحمة الله وبركاته كيفك أخي عساك بخير
اذا ممكن تساعدني في برنامج استاذ حسونة في السطر 236 يظهر لدي خطأ
ممكنلو تشرحلنا في حال تم تعبئة صفحة الفاتورة كيف يمكن الانتقال لصفحة ثانية
مشروحة في الكورسات المتعلقة بالطباعة هنا
كيف اعدل اعدادات صفحة الطباعه
السلام عليكم
حدث لدي مشكلة عند تنفيذ مشروع و استخدام اداة printpreviewdialog و printDocument
المشكلة انه بعد طباعة عدد من الفواتير يتوقف زر الطباعة عن العمل و تبدأ تظهر رسائل خطأ "خطأ عام في +GDI" و "الذاكرة ممتلئة"
فما سبب ظهور هذه الرسائل و كيف أتفادى هذه المشكلة و لكم جزيل الشكر
شرح اكثر من رائع
انا عملت البرنامج ممكن يا باشامهندس تبص عليه ولو فيه اي ملاحظة او اي حاجة غلط ممكن حضرتك تقولي عليها شكر
drive.google.com/file/d/1FNB4EP4j_c6UhCu35cmvVnl6eyV1EVZ8/view?usp=sharing
السلام عليكم استاذ احمد .. التقرير في حالة الفيو يطلع تمام بس بعد الطباعة كل البيانات الموجودة في اللوب ما بيظهر في الطبع!!! السبب و الحل رجاءا ؟!!
المشكلة مش برمجية هنا (يعني مش من الكود الذي صنعته) ولكنها من أساس الأداة المستخدمة في الطباعة (printPreviewDialog1) حيث أن زر الطباعة فيها لا يعطي (OK) كـ نتيجة ضطة زر بالتالي يعود ويأمر بطباعة ما أردت طباعته، بل يطبع مباشرة لأن هذه الأداة مربوطة مسبقاً بـ (printDocument1) حيث أنه يجب أن تعطي قيمة (-1) لعداد المواد المراد عرضها في التقرير قبل أمر العرض وقبل أمر العرض،،
وهناك طرق كثيرة للحل منها إضافة زر طباعة جديد للمستعرض (printPreviewDialog1) أو استبدال الزر القديم فيه بزر جديد ،، أو إضافة حدث (Click) لزر الطباعة الموجود في شاشة (printPreviewDialog1) ونضع داخل هذا الحدث ما نريد تنفيذه مثلا نجعل حدث الـ (Click) يعيد نتيجة (Ok) بالتالي يصبح الأمر السابق أن نجعل العداد يساوي (-1) ثم نعطي أمر الطباعة (printDocument1.Print();) ==== أو نجعله يطبع مباشرة بدلا من أن يعيد نتيجة (OK) أو نجعل فيه يعتمد على أدة (printDialog1) لعرض الطابعات المتاحة واختيار طابعة للطباعة.. .
جزاكم الله خيرا