تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] حفظ الفورم اثناء التشغيل كصورة
#1
السلام عليكم ورحمة الله وبركاته
اثناء تشغيل البرنامج وظهور الفورم للمستخدم
أريد اخذ الفورم وحفظة في صورة على سطح المكتب
بحثت عن الموضوع ووجدت مشاريع لحفظ صورة الشاشة كلها
ولكني أريد حفظ الفورم بس
شكرا لكم جميعاً  .
الرد }}}
تم الشكر بواسطة:
#2

السلام عليكم ورحمة الله

هذه دالة GetFormImage من مشروع أحد الأخوة، ترسل لها اسم الفورم واختيار بالإطار أم بدون، وأضفت لك طريقة استخدامها
PHP كود :
Public Class Form1

    
Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        
' بالإطار '
        
GetFormImage(MeTrue).Save("image.jpg"Imaging.ImageFormat.Jpeg)
    
End Sub

    
Private Sub Button2_Click(sender As System.ObjectAs System.EventArgsHandles Button2.Click
        
' بدون الإطار '
        
GetFormImage(MeFalse).Save("image.jpg"Imaging.ImageFormat.Jpeg)
    
End Sub

#Region "GetFormImage"
    
Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtrByVal nXDest As IntegerByVal nYDest As Integer_
                    ByVal nWidth 
As IntegerByVal nHeight As IntegerByVal hdcSrc As IntPtr_
                    ByVal nXSrc 
As IntegerByVal nYSrc As IntegerByVal dwRop As System.Int32) As Boolean
    
Private Declare Auto Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As System.IntPtr) As System.IntPtr
    
Public Function GetFormImage(ByVal frm As Windows.Forms.FormOptional ByVal withDecor As Boolean True) As Drawing.Bitmap
        Dim w 
As Integer = If(withDecorfrm.Widthfrm.ClientSize.Width)
        
Dim h As Integer = If(withDecorfrm.Heightfrm.ClientSize.Height)
        
Dim g As Drawing.Graphics frm.CreateGraphics
        Dim bmp 
As New Drawing.Bitmap(whg)
        
Dim gr As Drawing.Graphics Drawing.Graphics.FromImage(bmp)
        
Dim grhdc As IntPtr gr.GetHdc
        Dim frmhdc 
As IntPtr = If(withDecorGetWindowDC(frm.Handle), g.GetHdc)
        
BitBlt(grhdc00whfrmhdc00, &HCC0020)
        
gr.ReleaseHdc(grhdc)
        If 
Not withDecor Then g.ReleaseHdc(frmhdc)
        If 
frm.RightToLeft RightToLeft.Yes And frm.RightToLeftLayout Then
            bmp
.RotateFlip(RotateFlipType.RotateNoneFlipX)
        
End If
        Return 
bmp
    End 
Function
#End Region

End Class 

الرد }}}
تم الشكر بواسطة:
#3
شكرا استاذ الوليد .. جاري التجربة
كيف احفظ الصورة كملف خارجي وليس احفظها على اداة بيكتشر بوكس
الرد }}}
تم الشكر بواسطة:
#4

السلام عليكم ورحمة الله

عدلت لك الكود السابق ليحفظ في ملف

الرد }}}
تم الشكر بواسطة: محمود رغمان
#5
شكرا استاذ الوليد بس أريد ان اعرف مسار حفظ الصورة او احدده
الرد }}}
تم الشكر بواسطة:
#6

السلام عليكم ورحمة الله

هو في الوضع الافتراضي زي الي انا وضعته لك تلاقيه في المجلد debug للمشروع جنب ملف التشغيل
بس عليك تضع قبل اسم الملف المسار الخاص بالمجلد زي مثلا
PHP كود :
GetFormImage(MeTrue).Save("c:\new folder\myformimage.jpg"Imaging.ImageFormat.Jpeg

الرد }}}
تم الشكر بواسطة:
#7
ربنا يكرمك كل الامور تمام
الرد }}}
تم الشكر بواسطة: الوليد ☺
#8

السلام عليكم ورحمة الله

الله يوفقك

الرد }}}
تم الشكر بواسطة:
#9
(10-11-14, 11:13 PM)الوليد ☺ كتب :
السلام عليكم ورحمة الله

هذه دالة GetFormImage من مشروع أحد الأخوة، ترسل لها اسم الفورم واختيار بالإطار أم بدون، وأضفت لك طريقة استخدامها

PHP كود :
Public Class Form1

    Private Sub Button1_Click
(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        
' بالإطار '
 
       GetFormImage(MeTrue).Save("image.jpg"Imaging.ImageFormat.Jpeg)
 
   End Sub

    Private Sub Button2_Click
(sender As System.ObjectAs System.EventArgsHandles Button2.Click
        
' بدون الإطار '
 
       GetFormImage(MeFalse).Save("image.jpg"Imaging.ImageFormat.Jpeg)
 
   End Sub

#Region "GetFormImage"
 
   Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtrByVal nXDest As IntegerByVal nYDest As Integer_
                    ByVal nWidth 
As IntegerByVal nHeight As IntegerByVal hdcSrc As IntPtr_
                    ByVal nXSrc 
As IntegerByVal nYSrc As IntegerByVal dwRop As System.Int32) As Boolean
    Private 
Declare Auto Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As System.IntPtr) As System.IntPtr
    Public 
Function GetFormImage(ByVal frm As Windows.Forms.FormOptional ByVal withDecor As Boolean True) As Drawing.Bitmap
        Dim w 
As Integer = If(withDecorfrm.Widthfrm.ClientSize.Width)
 
       Dim h As Integer = If(withDecorfrm.Heightfrm.ClientSize.Height)
 
       Dim g As Drawing.Graphics frm.CreateGraphics
        Dim bmp 
As New Drawing.Bitmap(whg)
 
       Dim gr As Drawing.Graphics Drawing.Graphics.FromImage(bmp)
 
       Dim grhdc As IntPtr gr.GetHdc
        Dim frmhdc 
As IntPtr = If(withDecorGetWindowDC(frm.Handle), g.GetHdc)
 
       BitBlt(grhdc00whfrmhdc00, &HCC0020)
 
       gr.ReleaseHdc(grhdc)
 
       If Not withDecor Then g.ReleaseHdc(frmhdc)
 
       If frm.RightToLeft RightToLeft.Yes And frm.RightToLeftLayout Then
            bmp
.RotateFlip(RotateFlipType.RotateNoneFlipX)
 
       End If
 
       Return bmp
    End 
Function
#End Region

End Class 


السلام عليكم شكرا لك اخى الوليد على هذا الكود و نسأل الله ان يجعل هذا فى ميزان حسناتك : الكود يعمل جيدا و لكن عندى سؤال انا اريد التقاط اكثر من صورة و عندما اضغط للصورة الثانية يلغى ما قبلها اريد كود ترقيم الصورة تلقائى حتى لا يلغى ما قبلها و شكرا اخى على المساعدة
الرد }}}
تم الشكر بواسطة:
#10
كود :
   Private Sub CaptureForm(filename As String, frame As Integer)
       Dim bmp As Bitmap = GetFormImage()
       filename = String.Format("{0}\{1}{2}.jpeg", IO.Path.GetDirectoryName(filename), IO.Path.GetFileNameWithoutExtension(filename), frame)
       bmp.Save(filename)
   End Sub
frame سيحدد رقم الصورة
اسم الملف قد يكون اي مكان تحدده انت و هنا انا وضعت الصور في فولدر المشروع
طبعا عليك ان تستخدم الدالة التي تفضل الاخ الوليد بكتابتها لك في الكود اعلاه
كيف تستخدم الكود

PHP كود :
   Dim fileName As String ".\captured.jpeg"
 
       
        CaptureForm
(fileName1
و إن كنت لا تريد استخدام دوال API لتصوير الفورم كما في كود الأخ الوليد
يمكنك استخدام هذه الدالة فهي تقوم بتصوير الفورم كاملا لكن ان اردت تصوير الفورم بدون Border فهي تحتاج الي بعض التعديل لتناسب ذلك
PHP كود :
   Private Function GetFormImage() As Bitmap
        Dim bmp 
As Bitmap = New Bitmap(Me.WidthMe.Height)
 
       Dim r As Rectangle Me.Bounds
        r
.Offset(-r.X, -r.Y)
 
       Me.DrawToBitmap(bmpr)
 
       Return bmp
    End 
Function 
الرد }}}
تم الشكر بواسطة: محمود رغمان


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Photo [VB.NET] مشكلة في شكل الفورم abuyazan 5 293 27-02-24, 09:38 PM
آخر رد: aljzazy
  مشكلة عدم اكتمال تنفيذ بسبب فصل الشبكة او التيار الكهربائي اثناء النتفيذ تناسيم 3 1,840 05-02-24, 10:04 PM
آخر رد: 01AHMED
  [VB.NET] مشكلة ظهور textbox بعد حذفه من الفورم مبرمج صغير 1 1 221 27-01-24, 02:04 AM
آخر رد: مبرمج صغير 1
  [VB.NET] تحويل التاريخ بين أداتين تايم بيكر في نفس الفورم محمد العموري 1 268 29-12-23, 10:44 PM
آخر رد: Kamil
  كيفية التحكم فى حجم الفورم من خلال الكود Ahmed.vb 4 510 11-10-23, 07:17 PM
آخر رد: bidaya
  [VB.NET] حفظ الفورم (Form) (البرنامج) بعد التغيير visualist2015 6 6,358 29-09-23, 03:09 AM
آخر رد: Taha Okla
Photo [سؤال] كيف أقوم بإجبار التطبيق (الفورم) على حفظ الملف المستعاد من قاعدة البيانات SQL server salam82 3 456 20-09-23, 01:42 PM
آخر رد: salam82
  [VB.NET] نسخ الصور من الفورم الى الوورد صبيح 1 305 17-08-23, 03:03 PM
آخر رد: تركي الحلواني
  [VB.NET] احتاج كود يغلق جميع الفورم ويبقي فقط الفورم Home Ali_hassn 4 545 15-08-23, 06:43 PM
آخر رد: Alexander Max2
  كود للتغيير في تصميم الفورم Emam emam 2 430 15-07-23, 07:35 PM
آخر رد: Emam emam

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


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