Enregistrer l'image d'un contrôle

Soyez le premier à donner votre avis sur cette source.

Vue 8 993 fois - Téléchargée 808 fois

Description

Cette fonction enregistre l'image d'un contrôle
(bouton, Label, MSChart ...) dans un fichier image.
J'ai fait ce script à partir d'une question sur le forum :
http://www.vbfrance.com/infomsg_EXPORTER-GRAPHE-VERS-BITMAP_1072372.aspx#1
J'ai apporté quelques modifications à mon ancien code.
La fonction localise l'objet par rapport au bord de l'écran,
et fait une capture d'écran du contrôle,
qui peut être n'importe quoi pourvu qu'il ait les
propriétés .Width, .Height, .Left et .Top qui permettent
de le localiser.

Source / Exemple :


Option Explicit

Private Declare Function BitBlt Lib "gdi32.dll" ( _
        ByVal hDestDC As Long, _
        ByVal x As Long, _
        ByVal y As Long, _
        ByVal nWidth As Long, _
        ByVal nHeight As Long, _
        ByVal hSrcDC As Long, _
        ByVal xSrc As Long, _
        ByVal ySrc As Long, _
        ByVal dwRop As Long) As Long

Private Declare Function GetDesktopWindow Lib _
        "user32.dll" () As Long

Private Declare Function GetDC Lib "user32.dll" ( _
        ByVal hWnd As Long) As Long

Private Const SRCCOPY As Long = &HCC0020

Public Sub SaveMSChart(ByRef Pic As PictureBox, _
        ByRef mform As Form, ByVal mObj As Object, _
        ByVal mFileName As String)
    Pic.Visible = False
    Pic.AutoRedraw = True
    Pic.Cls
    mform.ScaleMode = vbTwips
    Dim Temp As Double
    Dim XU As Double, YU As Double
    Dim XD As Double, YD As Double
    Temp = (mform.Width - mform.ScaleWidth) / 2
    XU = mform.Left + Temp + mObj.Left
    YU = mform.Top + (mform.Height - mform.ScaleHeight) - _
            Temp + mObj.Top
    XD = XU + mObj.Width
    YD = YU + mObj.Height
    Pic.Width = (XD - XU)
    Pic.Height = (YD - YU)
    XU = XU / Screen.TwipsPerPixelX
    YU = YU / Screen.TwipsPerPixelY
    XD = XD / Screen.TwipsPerPixelX
    YD = YD / Screen.TwipsPerPixelY
    BitBlt Pic.hDC, 0&, 0&, Screen.Width, _
            Screen.Height, GetDC(GetDesktopWindow()), _
            CLng(XU), CLng(YU), SRCCOPY
    SavePicture Pic.Image, mFileName
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
XU / Screen.TwipsPerPixelX

pas top ce genre de chose... part du principe que l'on est en Twips

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.