تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
رسم الفورم و طباعته
#1
غالبا أغلب المبرمجين حين يطبعون الفورم
يأخذون صورة للفورم و يقومون بطباعتها
وهذا يؤدي الي أعباء مالية علي المستخدم و السبب هنا انك ستطبع الفورم بألوانه كاملة مثل لون الخلفية و منطقة 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.WidthMe.Height)
 
       Using g As Graphics Graphics.FromImage(bmp)
 
           g.Clear(Color.White)

 
           Dim imageBounds As Rectangle = New Rectangle(00bmp.Widthbmp.Height)
 
           Dim frame As Rectangle = New Rectangle(borderborder captionbmp.Width borderbmp.Height border caption)
 
           Dim captionRect As Rectangle = New Rectangle(borderborderbmp.Width bordercaption)
 
           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(1616))
 
               g.DrawIcon(sizedborderborder CInt(sized.Height 4))
 
           End If

 
           If Not String.IsNullOrEmpty(sThen
                Dim x 
As Integer border sized.Width
                Dim y 
As Integer border CInt(sized.Height 4)
 
               g.DrawString(sMe.Font, New SolidBrush(Color.Black), xy)
 
           End If
 
           Dim rects As Rectangle() = GetRects(bordercaption)

 
           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.Widthctrl.Height)
 
               Dim clr As Color ctrl.BackColor
                ctrl
.BackColor Color.White
                Threading
.Thread.Sleep(5)
 
               ctrl.DrawToBitmap(ctrlBitmap, New Rectangle(00ctrl.Widthctrl.Height))

 
               ctrl.BackColor clr
                g
.DrawImage(ctrlBitmapr.Xr.Y)
 
           Next

            g
.DrawRectangle(New Pen(Color.Black), frame)
 
       End Using

        Return bmp
    End 
Function

 
   Private Function GetRects(border As Integercaption 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
.+= border
            r
.+= border caption
            rects
(i) = r
        Next
        Return rects
    End 
Function 

الصورة الناتجة من الدالة اعلاة يمكن حفظها او طباعتها علي ورقة بكل سهولة

وكمثال بسيط
الكود التالي يوضح كيف تحفظ الصورة الي ملف علي فهرس المشروع


PHP كود :
DrawForm().Save(".\" + anyName + ".png") 

هذا شكل الصورة لأحد الفورم التي رسمتها
   

بالتاكيد يمكن تطوير الكود بأساليب كثيرة

تقبلوا تحياتي
الرد }}}}
تم الشكر بواسطة: سعود , سعود
#2
تم إضافة السورس كود في المرفقات
الكود في المرفقات بنسخة الفيجوال استوديو 2015


الملفات المرفقة
.rar   Test_DrawForm.rar (الحجم : 91.93 ك ب / التحميلات : 10)
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 11 616 30-05-17, 07:10 PM
آخر رد: alsouf
  من المنتدى القديم - تحريك الفورم من اي مكان ( للاخ omar2205 ) المبرمج علي نوري 2 916 16-08-15, 05:09 PM
آخر رد: otman_bel
  إيجاد جميع الكونترول الموجودة في الفورم Recursively Find All Controls in Form silverlight 0 712 26-05-15, 12:31 AM
آخر رد: silverlight
  طريقة تغيير الوان الفورم من ListView 3booody 4 1,604 19-08-13, 05:01 PM
آخر رد: 3booody
  طريقة من أجمل الطرق لجعل الفورم على شكل صورة عندك أسامة أحمد 63 8,643 12-05-13, 10:39 PM
آخر رد: APP
  خطوات بسيطه لجعل الفورم على شكل صورة معينه و بشكل اكثر احترافية - بدون أدوات خارجية السكر المغرور 4 2,376 08-05-13, 01:20 AM
آخر رد: السكر المغرور
  غير شكل الفورم مع الــ gdi+ RaggiTech 0 771 06-10-12, 12:53 AM
آخر رد: RaggiTech
  مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize RaggiTech 2 1,310 05-10-12, 07:00 PM
آخر رد: RaggiTech
  كيف تجعل كل شئ مستديرا داخل الفورم RaggiTech 0 944 05-10-12, 03:11 PM
آخر رد: RaggiTech
  كيف تتحكم في أبعاد الفورم بإستخدام الماوس RaggiTech 0 540 05-10-12, 03:06 PM
آخر رد: RaggiTech

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


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