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

VBA Access Discussion :

Impression écran du formulaire actif


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut Impression écran du formulaire actif
    Bonjour à tous,

    J'ai un formulaire qui contient un controle ActiveX_PDF dans lequel je fais afficher des documents.
    J'aimerais pouvoir faire un print écran de ce qu'il se trouve dans ce controle ActiveX_PDF pour ensuite l'insérer dans un nouveau document paint pour l'enregistrer en JPEG.

    Auriez vous une idée de comment faire?

    Merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Pas d'idée?

    Je vais m'expliquer un peu mieux:
    Dans un formulaire j'affiche un fichier PDF qui contient des plans industrielles.
    La seule solution que j'ai trouvé est d'utiliser un contrôle ActiveX.
    Jusque la pas de soucis.

    Ce que je souhaiterais faire c'est pouvoir ajouter des annontations ou des traits, cercles, sur le plan et l'enregistrer. Je sais qu'il n'est pas possible de faire ça sur un pdf alors j'ai pensé transformer le pdf afficher en jpeg(avec son état de zoom). Pour ensuite le modifier dans paint.
    Impossible par contre de faire un print screen avec sendkey "{PRTSCR}".
    J'ai trouvé ce code qui fonctionne en partie:
    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
    Option Explicit
     
    Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
      bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Public Const KEYEVENTF_KEYUP = &H2
    Public Const VK_SNAPSHOT = &H2C
    Public Const VK_MENU = &H12
    Public Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
     
    Sub AltPrintScreen()
        keybd_event VK_MENU, 0, 0, 0
        keybd_event VK_SNAPSHOT, 0, 0, 0
        keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
        keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
        DoEvents
    End Sub
    Seulement ça me fait un printScreen de toute la fenêtre. Je suis pénible et j'aimerais avoir seulement l'image que renvoi le controle ActiveX_PDF.

    Je suis sur que c'est possible mais mes connaissances en vba ne le permettent pas. J'imagine qu'en récupérant les coordonnées à l'écran du controle ActiveX_pdf il doit être possible de faire un print screen que de cette zone...

    Aidez moi SVP?

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    J'ai trouvé ce code qui permet de faire une capture d'écran en choisissant des coordonnées. C'est exactement ce qu'il me faut, par contre il me reste a savoir récupérer les coordonnées de mon controle ActiveX_PDF:
    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
    Option Explicit
     
    Private Const CCHDEVICENAME = 32
    Private Const CCHFORMNAME = 32
    Private Const SRCCOPY = &HCC0020 ' (DWORD) destination = source
     
    Private Type DEVMODE
        dmDeviceName As String * CCHDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCHFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Long
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End Type
     
    'API
    Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long, ByVal hdc As Long) As Long
    Private Declare Function OpenClipboard Lib "user32.dll" (ByVal hWnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
    Private Declare Function SetClipboardData Lib "user32.dll" (ByVal wFormat As Long, ByVal hMem As Long) As Long
    'if you have problems with this function add the Alias "SetClipboardDataA"
    Private Declare Function CloseClipboard Lib "user32.dll" () As Long
    Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
    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 CreateDC Lib "gdi32.dll" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long
    Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
    'Screen Capture Procedure, coordinates are expressed in pixels
    Public Sub CaptureScreen(Left As Long, Top As Long, Width As Long, Height As Long)
        Dim srcDC As Long
        Dim trgDC As Long
        Dim BMPHandle As Long
        Dim dm As DEVMODE
     
        srcDC = CreateDC("DISPLAY", "", "", dm)
        trgDC = CreateCompatibleDC(srcDC)
        BMPHandle = CreateCompatibleBitmap(srcDC, Width, Height)
        SelectObject trgDC, BMPHandle
        BitBlt trgDC, 0, 0, Width, Height, srcDC, Left, Top, SRCCOPY
        OpenClipboard Screen.ActiveForm.hWnd
        EmptyClipboard
        SetClipboardData 2, BMPHandle
        CloseClipboard
        DeleteDC trgDC
        ReleaseDC BMPHandle, srcDC
    End Sub

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 118
    Points
    43 118
    Par défaut position objet
    un nomobjet.width et .height pour la taille et top/left pour la position del atu peux en déduire la fin du bloc.

    Le prob, 'est que la mesure retournée est en "twips" qui correspond à 1/20 de point typographique soit 1/1440 de pouce donc à peu près 17.573 micromètres.( source wikipedia ). De là vu que c'est un imprime écran il te faut récupérer en pixels. 1 pixel = 0,53 mm environ

    Il te faut donc convertir en cm, et prévoir peut-être 1 marge pour les arrondis.
    J'espères que tu aimes les probs de robintes ...


    J'ai pas trouvé la possibilité de retourner directement en cm

    si qq1 a 1 solution plus simple ...
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    J'arrive effectivementà récupérer les coordonnées du controle ActiveX_PDF mais par rapport au formulaire dans lequel il se trouve.
    Ce que je voudrais est donc de récupérer les données left/top/height/width du formulaire.
    Mais impossible, il y a bien les données width et height mais pas top ni left.

    Par contre je ne suis pas sur de devoir convertir les mesures puisque dans le code que j'ai trouvé, je dois lui donner les données left, top, width et height.

  6. #6
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Tu as une autre solution si tu dois ajouter uniquement quelques annotations, flèches, traits ou autre.
    C'est un logiciel de lecture PDF qui s'appelle PDF XChange viewer.
    Ce logiciele est en version démo sans limitation de durée.
    Tu peux ajouter dedans ce que tu as besoin et enregistrer ton PDF sans avoir les logos publicitaires.
    En revanche, d'autres interventions t'ajouteront les logos publicitaires.
    Par exemple, si tu ajouter des pages pdf pour créer un ensemble de pages et que tu enregistres ce document.
    La pirouette consiste à ajouter ces pages et imprimer le tout en PDF, via PDF Créator par exemple, et tu n'auras pas les logos puplicitaires.

    Cordialement

    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Bonjour,

    Merci pour cette réponse.
    En réalité je souhaite éviter d'avoir à installer un logiciel puisque la fonction que je souhaite réaliser doit s'appliquer sur plus de 100 PCs société (=>demande des droits admin => ça va durer très longtemps...).
    J'ai réussis à faire ce que je souhaitais et j'essayerais de poster l'ensemble du code bientôt mais en gros le principe est le suivant:

    1) une personne souhaite ajouter une annotation ou un dessin sur un pdf, donc elle ouvre via un formulaire access un document pdf et réalise un zoom sur la zone concernée.
    2) elle clique sur un bouton qui déclenche le code de ScreenShot uniquement sur l'image du PDF (avec les coordonnées du formulaire par rapport à l'écran.
    3) le code se poursuit en ouvrant un nouveau document visio, en collant le contenu du presse papier, en faisant les mises en forme qui vont bien et en sauvegardant le tout à l'endroit qui convient avec le nom qui faut.

    Le document visio sera par la suite utilisé pour réaliser la modification demandée sur le plan.

    Merci pour l'aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Afficher une image] Comment afficher une impression écran ?
    Par mnina dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 10/11/2005, 10h30
  2. impression d'un formulaire
    Par plume75 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/10/2005, 17h44
  3. impression d'un formulaire
    Par RODIER dans le forum Access
    Réponses: 1
    Dernier message: 04/10/2005, 11h44
  4. impression d'un formulaire
    Par fulgaro dans le forum IHM
    Réponses: 6
    Dernier message: 22/06/2005, 14h43
  5. Bouton Impression écran
    Par eag35 dans le forum MFC
    Réponses: 3
    Dernier message: 04/11/2004, 09h34

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