18-06-17, 04:00 AM
(آخر تعديل لهذه المشاركة : 18-06-17, 03:58 PM {2} بواسطة silverlight.)
غالبا أغلب المبرمجين حين يطبعون الفورم
يأخذون صورة للفورم و يقومون بطباعتها
وهذا يؤدي الي أعباء مالية علي المستخدم و السبب هنا انك ستطبع الفورم بألوانه كاملة مثل لون الخلفية و منطقة Non Client Area بألوانها
لكن هناك حل بسيط جدا للتقليل من تكاليف طباعة الفورم بهذا الاسلوب
و الحل يتلخص في انك ترسم الفورم بنفسك إما بشكل مباشر علي ورقة الطباعة او ترسمه علي صورة ذو خلفية بيضاء ثم تطبع تلك الصورة بعد ذلك
الفكرة:
الفكرة تعتمد علي التالي:
1- حساب أماكن الكونترول و bounds الخاصة بها علي الفورم
2- حساب ابعاد الفورم و حساب المستطيلات التي تعبر عن Non Client Area علي الفورم
ويمكن تعريف Non Client Area بأنها المنطقة التي يوجد به اسم الفورم و الإطار الخارجي للفورم وأيقونة الفورم بالإضافة الي الثلاثة باتون الخاصة بإغلاق و تكبير و تضغير الفورم علي شاشة الكمبيوتر
3- بناء علي تلك الحسابات نرسم الفورم بأنفسنا
الكود التالي يوضح كيفية رسم الفورم
الصورة الناتجة من الدالة اعلاة يمكن حفظها او طباعتها علي ورقة بكل سهولة
وكمثال بسيط
الكود التالي يوضح كيف تحفظ الصورة الي ملف علي فهرس المشروع
هذا شكل الصورة لأحد الفورم التي رسمتها
بالتاكيد يمكن تطوير الكود بأساليب كثيرة
تقبلوا تحياتي
يأخذون صورة للفورم و يقومون بطباعتها
وهذا يؤدي الي أعباء مالية علي المستخدم و السبب هنا انك ستطبع الفورم بألوانه كاملة مثل لون الخلفية و منطقة Non Client Area بألوانها
لكن هناك حل بسيط جدا للتقليل من تكاليف طباعة الفورم بهذا الاسلوب
و الحل يتلخص في انك ترسم الفورم بنفسك إما بشكل مباشر علي ورقة الطباعة او ترسمه علي صورة ذو خلفية بيضاء ثم تطبع تلك الصورة بعد ذلك
الفكرة:
الفكرة تعتمد علي التالي:
1- حساب أماكن الكونترول و bounds الخاصة بها علي الفورم
2- حساب ابعاد الفورم و حساب المستطيلات التي تعبر عن Non Client Area علي الفورم
ويمكن تعريف Non Client Area بأنها المنطقة التي يوجد به اسم الفورم و الإطار الخارجي للفورم وأيقونة الفورم بالإضافة الي الثلاثة باتون الخاصة بإغلاق و تكبير و تضغير الفورم علي شاشة الكمبيوتر
3- بناء علي تلك الحسابات نرسم الفورم بأنفسنا
الكود التالي يوضح كيفية رسم الفورم
PHP كود :
Private Function DrawForm() As Bitmap
Dim border As Integer = 8
Dim caption As Integer = 23
Dim bmp As Bitmap = New Bitmap(Me.Width, Me.Height)
Using g As Graphics = Graphics.FromImage(bmp)
g.Clear(Color.White)
Dim imageBounds As Rectangle = New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim frame As Rectangle = New Rectangle(border, border + caption, bmp.Width - 2 * border, bmp.Height - 2 * border - caption)
Dim captionRect As Rectangle = New Rectangle(border, border, bmp.Width - 2 * border, caption)
g.DrawRectangle(New Pen(Color.Black), captionRect)
Dim s As String = Me.Text
Dim ico As Icon = Me.Icon
Dim sized As Icon = Nothing
If ico IsNot Nothing Then
sized = New Icon(ico, New Size(16, 16))
g.DrawIcon(sized, 2 * border, 2 * border - CInt(sized.Height / 4))
End If
If Not String.IsNullOrEmpty(s) Then
Dim x As Integer = 2 * border + sized.Width
Dim y As Integer = 2 * border - CInt(sized.Height / 4)
g.DrawString(s, Me.Font, New SolidBrush(Color.Black), x, y)
End If
Dim rects As Rectangle() = GetRects(border, caption)
For i As Integer = 0 To rects.Length - 1
Dim r As Rectangle = rects(i)
Dim ctrl As Control = Controls(i)
Dim ctrlBitmap As Bitmap = New Bitmap(ctrl.Width, ctrl.Height)
Dim clr As Color = ctrl.BackColor
ctrl.BackColor = Color.White
Threading.Thread.Sleep(5)
ctrl.DrawToBitmap(ctrlBitmap, New Rectangle(0, 0, ctrl.Width, ctrl.Height))
ctrl.BackColor = clr
g.DrawImage(ctrlBitmap, r.X, r.Y)
Next
g.DrawRectangle(New Pen(Color.Black), frame)
End Using
Return bmp
End Function
Private Function GetRects(border As Integer, caption As Integer) As Rectangle()
Dim ctrls As ControlCollection = Me.Controls
Dim rects As Rectangle() = New Rectangle(ctrls.Count - 1) {}
For i = 0 To ctrls.Count - 1
Dim c As Control = ctrls(i)
Dim r As Rectangle = c.Bounds
r.X += border
r.Y += border + caption
rects(i) = r
Next
Return rects
End Function
الصورة الناتجة من الدالة اعلاة يمكن حفظها او طباعتها علي ورقة بكل سهولة
وكمثال بسيط
الكود التالي يوضح كيف تحفظ الصورة الي ملف علي فهرس المشروع
PHP كود :
DrawForm().Save(".\" + anyName + ".png")
هذا شكل الصورة لأحد الفورم التي رسمتها
بالتاكيد يمكن تطوير الكود بأساليب كثيرة
تقبلوا تحياتي

