Oppure

Loading
03/02/10 21:19
Alfonso
Per provare mettere una PictureBox nella Form1

Public Class Form1

    <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _
     Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As 
System.Int32) As Boolean
    End Function

    Public Sub Cattura(ByVal Fr As Form, ByVal Ctrl As Control)

        Me.Show()
        Dim g1 As Graphics = Fr.CreateGraphics()
        Dim MyImage As New Bitmap(Ctrl.Width, Ctrl.Height, g1)
        Dim g2 As Graphics = Graphics.FromImage(MyImage)
        Dim dc1 As IntPtr = g1.GetHdc()
        Dim dc2 As IntPtr = g2.GetHdc()
        BitBlt(dc2, 0, 0, Ctrl.Width, Ctrl.Height, dc1, Ctrl.Left, Ctrl.Top, 13369376)
        g1.ReleaseHdc(dc1)
        g2.ReleaseHdc(dc2)
        PictureBox2.Image = MyImage
        MyImage.Save("d:\Catturato.bmp", Imaging.ImageFormat.Bmp) 

    End Sub
End Class

Codice per richiamare la cattura:

Form1.Cattura(Me, Label1)
aaa
03/02/10 22:42
Gianluca87
Postato originariamente da Alfonso:

E fare una cattura dello schermo limitata alle coordinate della label?

che schifo...
tanto vale che prendi una macchina fotografica... fai la foto e la porti a sviluppare..poi la scannerizzi, la salvi come file e la importi dentro .net
aaa
03/02/10 22:56
Rikisonny
Avevo già pensato alla cattura dello schermo e ero anche riuscito a farla... Pero metto le coordinate del label nello schermo non nella form... Quidi basta spostarla che non funziona già più questo modo... Bisognerebbe limitare la cattura dello schermo solo al form dare delle coordinate al form da 0,0 e a quel punto impostare le coordinate del label che appaiono nelle proprietà... Pero non sono capace...
aaa
03/02/10 23:14
Alfonso
Forse capisci meglio con tutto il progetto.
La seconda form è solo per mostrarti a video quale sarebbe il risultato.

Puoi naturalmente mettere tutto in un modulo togliendo i riferimenti alla picturebox.
aaa
04/02/10 14:07
Rikisonny
Postato originariamente da Alfonso:

Per provare mettere una PictureBox nella Form1

Public Class Form1

    <System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")> _
     Private Shared Function BitBlt(ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As 
System.Int32) As Boolean
    End Function

    Public Sub Cattura(ByVal Fr As Form, ByVal Ctrl As Control)

        Me.Show()
        Dim g1 As Graphics = Fr.CreateGraphics()
        Dim MyImage As New Bitmap(Ctrl.Width, Ctrl.Height, g1)
        Dim g2 As Graphics = Graphics.FromImage(MyImage)
        Dim dc1 As IntPtr = g1.GetHdc()
        Dim dc2 As IntPtr = g2.GetHdc()
        BitBlt(dc2, 0, 0, Ctrl.Width, Ctrl.Height, dc1, Ctrl.Left, Ctrl.Top, 13369376)
        g1.ReleaseHdc(dc1)
        g2.ReleaseHdc(dc2)
        PictureBox2.Image = MyImage
        MyImage.Save("d:\Catturato.bmp", Imaging.ImageFormat.Bmp) 

    End Sub
End Class

Codice per richiamare la cattura:

Form1.Cattura(Me, Label1)



wow funziona!! a parte che il messaggio è stato tagliato lateralmente quindi venivano errori nella function BitBlt l'ultimo as poi dovevano essere collegate le cose ma non importa e la picturebox era la 1 ma cmq sono cose che modifico io per il resto il codice va grazie milleeee!!
aaa
04/02/10 14:12
Alfonso
In effetti quel Me.show messo all'inizio della routine, rompe un po' se la form si apre sopra quella dove è presente la label.
Messo in fondo non da più problemi.
aaa
04/02/10 14:21
Rikisonny
Io lo ho proprio tolto me.show e va lo stesso avendo solo la form 1... Anche form1.cattura ho tolto form1....
aaa