IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

capture d'écran usf 64 bit


Sujet :

Macros et VBA Excel

  1. #21
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    Hello,
    Citation Envoyé par patmeziere Voir le message
    reste a ajouter les guid de format dans un select case pour faire du jpg ou autre
    Voilà c'est fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Public Sub SaveUserFormToImg(Usf As Object, ByVal aFilename As String)
        Const BMP_GUID = "{557cf400-1a04-11d3-9a73-0000f81ef32e}"
        Const JPG_GUID = "{557cf401-1a04-11d3-9a73-0000f81ef32e}"
        Const GIF_GUID = "{557cf402-1a04-11d3-9a73-0000f81ef32e}"
        Const TIFF_GUID = "{557cf405-1a04-11d3-9a73-0000f81ef32e}"
        Const PNG_GUID = "{557cf406-1a04-11d3-9a73-0000f81ef32e}"
        Static gdiplusToken As LongPtr
        Dim lngLargeur As Long, lngHauteur As Long
        Dim bmiBitmapInfo As BitmapInfo
        Dim lngHdc As LongPtr, lngHBmp As LongPtr, oldObj As LongPtr
        Dim Wind As LongPtr, R As RECT
        Dim StartupInput As GdiplusStartupInput
        Dim Encoder(0 To 15) As Byte, GBitmap As LongPtr
     
        Wind = FindWindowA(vbNullString, Usf.Caption)
        If Wind = 0 Then Exit Sub
        GetWindowRect Wind, R
        lngLargeur = R.Right - R.Left
        lngHauteur = R.Bottom - R.Top
     
        With bmiBitmapInfo
            .biBitCount = 32: .biCompression = 0&: .biPlanes = 1
            .biSize = Len(bmiBitmapInfo): .biHeight = lngHauteur: .biWidth = lngLargeur
            .biSizeImage = ((((.biWidth * .biBitCount) + 31) \ 32) * 4 - (((.biWidth * .biBitCount) + 7) \ 8)) * .biHeight
        End With
     
        lngHdc = CreateCompatibleDC(0)
        lngHBmp = CreateDIBSection(lngHdc, bmiBitmapInfo, 0&, ByVal 0&, ByVal 0&, ByVal 0&)
        oldObj = SelectObject(lngHdc, lngHBmp)
     
        PrintWindow Wind, lngHdc, 0
     
        If gdiplusToken = 0 Then
           StartupInput.GdiplusVersion = 1
           GdiplusStartup gdiplusToken, StartupInput, 0
        End If
        If GdipCreateBitmapFromHBITMAP(lngHBmp, 0, GBitmap) = 0 Then
           ' Contrôle l'extension du fichier:
           Select Case UCase(Right(aFilename, 4))
              Case ".BMP": CLSIDFromString StrPtr(BMP_GUID), VarPtr(Encoder(0))
              Case ".GIF": CLSIDFromString StrPtr(GIF_GUID), VarPtr(Encoder(0))
              Case ".JPG": CLSIDFromString StrPtr(JPG_GUID), VarPtr(Encoder(0))
              Case ".PNG": CLSIDFromString StrPtr(PNG_GUID), VarPtr(Encoder(0))
              Case ".TIF": CLSIDFromString StrPtr(TIFF_GUID), VarPtr(Encoder(0))
              ' Création d'un ficher temporaire sur le profile de l'utilisateur:
              Case Else: MsgBox "L'extension du fichier " & _
                      aFilename & " n'est pas reconnue par cette fonction." _
                      : Exit Sub
           End Select
           GdipSaveImageToFile GBitmap, StrPtr(aFilename), VarPtr(Encoder(0)), 0
           GdipDisposeImage GBitmap
        End If
     
        oldObj = SelectObject(lngHdc, oldObj)
        DeleteObject lngHBmp
        DeleteObject lngHdc
    End Sub
    Pour tester tous les types d'images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton2_Click()
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.bmp")
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.gif")
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.tif")
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.png")
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.jpg")
    Call SaveUserFormToImg(Me, "D:\temp\CaptureForm.txt") ' cas où type non traité
    End Sub

    Le code initial de rMist2024, ne fonctionnait pas chez moi car j'ai mis le code dans un module séparé et donc Caption tout seul n'était pas connu et il y avait aussi le problème expliqué par patmeziere du paramètre Usf qui devait être défini en Object et pas en Userform.

    Le code fonctionne chez moi en Excel 32 bits et 64 bits.

    Ami calmant, J.P

  2. #22
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    Bonjour jurassic pork
    moi j'avais fait ça hier
    le choix du GUID se fait tout seul par rapport à l'extension du nom de fichier
    on peut capturer l'application aussi
    je n'ai pas fait l’écran complet car printwindow gere mal les handle de fenêtre qui utilisent l'accélération matérielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    '//////////////////////////////////////////////////////
    ' Auteurs et participants:
    'rmist2024 :    https://www.developpez.net/forums/u1843650/rmist2024/
    'laurent_ott :  https://www.developpez.net/forums/u683044/laurent_ott/
    'jurassic-pork: https://www.developpez.net/forums/u273217/jurassic-pork/
    'patmeziere :   https://www.developpez.net/forums/u1838875/patmeziere/
    '               Alias patricktoulon
     
    'Discussion:
    'https://www.developpez.net/forums/d2169702/logiciels/microsoft-office/excel/macros-vba-excel/capture-d-ecran-usf-64-bit/#post12045083
     
    'Capturer le userform avec les api sans passer par le clipboard
    'dans cet exemple on print la fenêtre dans un HDC dynamique avec printwindow
    'cette méthode offre l'avantage de ne pas avoir besoins que la fenetre soit visible a l'écran
    'et de ne pas avoir a déterminer les coordonnées de la fenêtre en cas de multi ecrans
    'creation de l'image avec gdi+ avec le CLISD correspondant au format voulu(png,jpg,gif,bmp)
    'Attention le gif rend mal a ne pas utiliser
     
    Option Explicit
     
    Private Declare PtrSafe Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As LongPtr) As LongPtr
    Private Declare PtrSafe Function CreateDIBSection Lib "gdi32" (ByVal hdc As LongPtr, pBitmapInfo As BitmapInfo, ByVal un As Long, ByVal lplpVoid As LongPtr, ByVal handle As LongPtr, ByVal dw As Long) As LongPtr
    Private Declare PtrSafe Function SelectObject Lib "gdi32" (ByVal hdc As LongPtr, ByVal hObject As LongPtr) As LongPtr
    Private Declare PtrSafe Function DeleteObject Lib "gdi32" (ByVal hObject As LongPtr) As Long
    Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal cls As String, ByVal cap As String) As Long
    Private Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hwnd As LongPtr, Rc As RECT) As Long
    Private Declare PtrSafe Function PrintWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal hdc As LongPtr, ByVal flags As Long) As Long
    Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr
    ' GDI +
    Private Declare PtrSafe Function GdipCreateBitmapFromHBITMAP Lib "gdiplus" (ByVal hbm As LongPtr, ByVal hPal As LongPtr, GBitmap As LongPtr) As Long
    Private Declare PtrSafe Function GdipSaveImageToFile Lib "gdiplus" (ByVal GBitmap As LongPtr, ByVal Filename As LongPtr, ByVal pclsidEncoder As LongPtr, ByVal encoderParams As LongPtr) As Long
    Private Declare PtrSafe Function GdipDisposeImage Lib "gdiplus" (ByVal GBitmap As LongPtr) As LongPtr
    Private Declare PtrSafe Function GdiplusStartup Lib "gdiplus" (token As LongPtr, GInput As GdiplusStartupInput, ByVal Goutput As Long) As Long
    Private Declare PtrSafe Function CLSIDFromString Lib "ole32" (ByVal str As LongPtr, ByVal pGuid As LongPtr) As Long
     
    Private Type GdiplusStartupInput
        GdiplusVersion As Long
        DebugEventCallback As LongPtr
        SuppressBackgroundThread As LongPtr
        SuppressExternalCodecs As Long
    End Type
     
    Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
     
    Private Type BitmapInfo
        biSize As Long: biWidth As Long: biHeight As Long: biPlanes As Integer
        biBitCount As Integer: biCompression As Long: biSizeImage As Long
        biXPelsPerMeter As Long: biYPelsPerMeter As Long: biRUsed As Long: biRImportant As Long
    End Type
     
    Sub ScreenFormCaptureToFile(Optional ByVal Usf As Object = Nothing, Optional ByVal aFilename As String = "")
        Static gdiplusToken As LongPtr
        Dim lngLargeur As Long, lngHauteur As Long
        Dim bmiBitmapInfo As BitmapInfo
        Dim lngHdc As LongPtr, lngHBmp As LongPtr, oldObj As LongPtr
        Dim Wind As LongPtr, R As RECT
        Dim StartupInput As GdiplusStartupInput
        Dim Encoder(0 To 15) As Byte, GBitmap As LongPtr
        Dim Format_GUID As String
        Dim profondeur_color As Long
     
        Select Case LCase(Mid(aFilename, InStrRev(aFilename, ".")))
            Case ".png": Format_GUID = "{557CF406-1A04-11D3-9A73-0000F81EF32E}": profondeur_color = 32
            Case ".gif": Format_GUID = "{557CF402-1A04-11D3-9A73-0000F81EF32E}": profondeur_color = 8
            Case ".bmp": Format_GUID = "{557CF400-1A04-11D3-9A73-0000F81EF32E}": profondeur_color = 32
            Case ".jpg", ".jpeg": Format_GUID = "{557CF401-1A04-11D3-9A73-0000F81EF32E}": profondeur_color = 32
        End Select
     
        If Usf Is Nothing Then
            Wind = Application.hwnd
            'GetDesktopWindow() 'printwindow deraille avec les fenêtre qui utilise l'accélération matérielle (directx openGL etc...)
        Else
            Wind = FindWindowA(vbNullString, Usf.Caption)
        End If
     
        If Wind = 0 Then Exit Sub
        GetWindowRect Wind, R
        lngLargeur = R.Right - R.Left
        lngHauteur = R.Bottom - R.Top
     
        With bmiBitmapInfo
            .biBitCount = profondeur_color: .biCompression = 0&: .biPlanes = 1
            .biSize = Len(bmiBitmapInfo): .biHeight = lngHauteur: .biWidth = lngLargeur
            .biSizeImage = ((((.biWidth * .biBitCount) + 31) \ 32) * 4 - (((.biWidth * .biBitCount) + 7) \ 8)) * .biHeight
        End With
     
        lngHdc = CreateCompatibleDC(0)
        lngHBmp = CreateDIBSection(lngHdc, bmiBitmapInfo, 0&, ByVal 0&, ByVal 0&, ByVal 0&)
        oldObj = SelectObject(lngHdc, lngHBmp)
     
        PrintWindow Wind, lngHdc, 0
     
        If gdiplusToken = 0 Then
            StartupInput.GdiplusVersion = 1
            GdiplusStartup gdiplusToken, StartupInput, 0
        End If
        If GdipCreateBitmapFromHBITMAP(lngHBmp, 0, GBitmap) = 0 Then
            CLSIDFromString StrPtr(Format_GUID), VarPtr(Encoder(0))
            GdipSaveImageToFile GBitmap, StrPtr(aFilename), VarPtr(Encoder(0)), 0
            GdipDisposeImage GBitmap
        End If
     
        oldObj = SelectObject(lngHdc, oldObj)
        DeleteObject lngHBmp
        DeleteObject lngHdc
    End Sub
    code d"ans le userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub CommandButton1_Click()
    ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.png"
    End Sub
     
    Private Sub CommandButton2_Click()
    ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.jpg"
     
    End Sub
     
    Private Sub CommandButton3_Click()
    ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.GIF"
     
    End Sub
     
    Private Sub CommandButton4_Click()
    ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.BMP"
     
    End Sub
     
    Private Sub CommandButton5_Click()
    ScreenFormCaptureToFile aFilename:=Environ("userprofile") & "\desktop\mon ecran.jpg"
    End Sub

  3. #23
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    le seul inconveniant (qui n'en est pas vraiment un) c'est que la capture dessine le userform selon la shell32 de base
    c'est à dire sans le theme du window installé
    Nom : Capture.JPG
Affichages : 186
Taille : 58,0 Ko

  4. #24
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Que dire à part merci !
    Problème réglé, merci à tous les contributeurs.
    Patrick ta version finale est en + "prête à porter" pour n'importe quel utilisateur... impressionnant !

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour à tous... finalement petit bug quand j'essaye une petite manip préalable ; je réorganise les items juste pour que tout soit visible pour la photo et les remets à leur place après.
    Mais la capture ne semble capturer totalement la nouvelle (et temporaire) organisation que si on le fait en pas à pas, sinon elle ne prends pas tout en compte...

    J'ai fait un fichier épuré pour isoler et vous montrer le problème.
    Classeur1.xlsm
    Peut-être suffit-il juste d'attendre quelques secondes avant mais j'ai essayé avec application.wait et avec la méthode sleep à chaque fois ça met bien une pause avant mais ne règle pas le problème... On dirait qu'il faut vraiment passer en pas à pas
    Si quelqu'un y comprends quelque chose
    Merci et bonne soirée !

  6. #26
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    Bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub CommandButton1_Click()
        Dim Tim As Double
        UserForm1.Width = 820
        MultiPage1.Width = 816
        Frame1.Height = 500
        TextBox1.Left = 494
        TextBox1.Top = 12
        TextBox1.Height = 360
     
     
        ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.jpg"
        'gestion d'attente 100 milisecondes mettre un peu plus si ce n'est p"as suffisant 
        Tim = Timer: Do While Timer - Tim < 0.1: DoEvents: Loop
     
        TextBox1.Left = 12
        TextBox1.Top = 180
        TextBox1.Height = 66
        Frame1.Height = 108
        MultiPage1.Width = 282
        UserForm1.Width = 295
     
    End Sub

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour Patrick, c'est très bizarre je ne sais pas pourquoi mais ça ne marche pas on dirait qu'il lance quand même la suite du code... les valeurs commencent déjà à changer, les items commencent à reprendre leur place avant d'avoir lancer la capture, même si je mets des pauses de 0.1 ou de 2 avant et après la capture...

  8. #28
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    re
    déjà c'est avant et pas après
    ben met 0.3 puis 0.35 bref tu augmente de 0.05 jusqu'a que tu ai la capture de l'userform agrandi entier
    c'est sans doute un manque de puissance graphique ou une mauvaise config graphique
    voir le gestionnaire que tu a en general nvidia ou atir adeon dans ses paramètres cocher la case
    pour que ça soit lui qui prenne en charge l'affichage et pas les drivers genériques de windows

    exemple pour moi NVIDIA
    Nom : Capture.JPG
Affichages : 131
Taille : 78,0 Ko

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Re non c'était bien une pause de 2s et non 0,2 que j'évoquais... J'ai même testé 10s ça ne change rien
    Et j'essayais aussi après me disant que peut être la capture prenait un peu de temps justement et il ne fallait pas que pendant ce temps le reste de la macro se déroule...

  10. #30
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    bonjour
    si 10 sec ne te suffisent pas , il va peut être falloir se poser des questions
    qu'est ce qui ne fonctionne pas sur mon pc et pourquoi?
    je pense pas que bidouiller la macro dans tout les sens va régler ton problème
    me semble t il t'avoir donner une piste qui pour moi (je le pense) est la raison de ton problème

  11. #31
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    Hello,
    mosar3 sur le classeur du message #25 montre nous par une copie d'écran ce qui ne va pas .
    Voilà ce que j'obtiens :
    Nom : mon image.jpg
Affichages : 111
Taille : 56,4 Ko
    C'est à dire par rapport au formulaire initial : le cadre Frame1 est rallongé en hauteur et on voit toutes les boîtes de texte.

    Ami calmant, J.P

  12. #32
    Membre expérimenté
    Homme Profil pro
    ‫‬
    Inscrit en
    Septembre 2024
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Septembre 2024
    Messages : 156
    Par défaut
    Il y a un DoEvents manquant avant d'effectuer la capture d'image pour forcer l'application des changements sur les contrôles
    En tout cas tu peux le placer à l’intérieure de ScreenFormCaptureToFile au début de la fonction pour rafraichir la forme avant la capture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub CommandButton1_Click()
     
            UserForm1.Width = 820
            MultiPage1.Width = 816
            Frame1.Height = 500
        TextBox1.Left = 494
        TextBox1.Top = 12
        TextBox1.Height = 360
     
        DoEvents ' à ajouter 
     
        ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.jpg"
     
        TextBox1.Left = 12
        TextBox1.Top = 180
        TextBox1.Height = 66
            Frame1.Height = 108
            MultiPage1.Width = 282
            UserForm1.Width = 295
     
    End Sub

  13. #33
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    bonsoir rMist2024
    le doevents n'est pas suffisant chez moi en tout cas
    un sleep gèlerait le procc alors un do/loop avec doevents +delay est la solution la plus permissive pour une opération asyncrone comme la capture par printform
    qui fait fi du doevents

  14. #34
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    bonsoir jurassic Pork

    on vois bien que quand la capture se fait le userform a déjà commencer à se refermer
    Nom : Capture.JPG
Affichages : 106
Taille : 61,4 Ko

  15. #35
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    Hello,
    patmeziere m'as mis la puce à l'oreille. J'ai voulu vérifié ce qu'il me disait mais en fait je me suis aperçu que c'était pas la fenêtre que l'on remettait à ses dimensions initiales mais que c'était la fenêtre qui n'avait pas fini de se redimensionner avant le screencapture. J'ai mis un Me.Repaint juste avant le screencapture et maintenant j'ai la fenêtre complète :
    Nom : mon image.jpg
Affichages : 98
Taille : 59,7 Ko
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub CommandButton1_Click()
     
            UserForm1.Width = 820
            MultiPage1.Width = 816
            Frame1.Height = 500
        TextBox1.Left = 494
        TextBox1.Top = 12
        TextBox1.Height = 360
     
        Me.Repaint 'rafraîchissement formulaire
     
        ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.jpg"
        Debug.Print "Change UserForm1"
        TextBox1.Left = 12
        TextBox1.Top = 180
        TextBox1.Height = 66
            Frame1.Height = 108
            MultiPage1.Width = 282
            UserForm1.Width = 295
     
    End Sub
    Ami calmant, J.P

  16. #36
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    Bonjour jurassic pork
    chez moi ça ne suffit pas
    d'ailleurs chez toi non plus puisque l'on voit pas le textbox agrandi et déplacé
    voila ce que tu dois voir
    Nom : mon image.jpg
Affichages : 97
Taille : 46,7 Ko

  17. #37
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 193
    Par défaut
    Hello Pat,
    effectivement on dirait que le Multipage1 ne se redimensionne pas avant la capture.
    [EDIT] Avec un DoEvents juste après le Repaint cela semble fonctionner maintenant.
    Ami calmant, J.P

  18. #38
    Membre expérimenté
    Homme Profil pro
    ‫‬
    Inscrit en
    Septembre 2024
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : ‫‬

    Informations forums :
    Inscription : Septembre 2024
    Messages : 156
    Par défaut
    le doevents n'est pas suffisant chez moi en tout cas
    Essaie ce code pour comprendre l'importance d'appler DoEvents pour refléter les derniers changements dans la fiche avant la capture c'est important de comprendre ce mécanisme.


    Essaie avec et sans DoEvents
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim mNotify As Boolean
     
    Private Sub CommandButton1_Click()
        mNotify = True
            UserForm1.Width = 820
            MultiPage1.Width = 816
            Frame1.Height = 500
        TextBox1.Left = 494
        TextBox1.Top = 12
        TextBox1.Height = 360
     
        'DoEvents
        MsgBox "CommandButton1_Click"
        ScreenFormCaptureToFile Me, Environ("userprofile") & "\desktop\mon image.jpg"
     
        TextBox1.Left = 12
        TextBox1.Top = 180
        TextBox1.Height = 66
            Frame1.Height = 108
            MultiPage1.Width = 282
            UserForm1.Width = 295
     
    End Sub
     
    Private Sub UserForm_Layout()
      If mNotify Then
        MsgBox "Redimensionnement"
        mNotify = False
      End If
    End Sub

  19. #39
    Membre chevronné
    Homme Profil pro
    CIP
    Inscrit en
    Avril 2024
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : CIP
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2024
    Messages : 196
    Par défaut re
    bonjour rMist2024
    perso avec mon petit do/loop incluant le Doevents me fait office de sleep sans geler le proc
    et permet de laisser le temps aux objects qui ont été modifiés avant;de se redimensionner et positionner

    par expérience je peux affirmer que par fois cette pratique est mieux que le sleep, le app.wait j'en parlerais pas

    mais comme notre ami a testé 10 sec et que le résultat n'est pas au rendez vous , je suis convaincu que c'est un problème de config
    ca ne sert a rien d'épiloguer , c'est ailleurs qu'il faut chercher le problème

  20. #40
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 90
    Par défaut
    Bonjour @Jurassic Pork, @Patmeziere, @rmist2024, effectivement le DoEvents règle le problème - pour moi en tout cas !

    Merci à tous pour ce remue méninges, et désolé de la réponse tardive je n'ai pas eu accès à l'ordi depuis quelques jours

    Problème résolu

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Capturer image depuis webcam sur os 64 bits
    Par hackerslife dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 14/10/2013, 19h01
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  3. Cherche l'algo crc 16 bits
    Par icepower dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 21/08/2002, 13h27
  4. Debugger 16-32 bits
    Par Mat dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/06/2002, 11h34
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo