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

VB 6 et antérieur Discussion :

Pb capture d'écran et msgbox


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 13
    Points : 10
    Points
    10
    Par défaut Pb capture d'écran et msgbox
    Bonjour à tous !
    Voilà mon problème, j'ai crée un petit formulaire qui effectue une capture d'écran. Mais le problème est qu'il me serait intéressant de le lancer lors d'une erreur sur le logiciel au moment où s'affiche le msgbox d'erreur.
    Seulement lorsqu'un msgbox apparait au 1er plan, il bloque tout le reste ainsi il est impossible de lancer la capture d'écran.
    Pouvez vous m'aider ?
    Merci.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,

    Il serait bien que tu précises VB ou VBA...
    Pour ton problème, il me semble avoir vu la réponse sur le forum : Placer ton msgbox dans une temporisation, à la fin de celle-ci le msgbox "devrait disparaître" (jamais essayé donc sans garantie) et permettre l'affichage de ta copie d'écran.
    Par contre, une chose m'intéresse : Comment fais-tu ta copie d'écran ? A moins qu'elle soit manuelle, ton code m'intéresse. Merci.

    A+

  3. #3
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    Quand ton programme capture une erreur, fais d'abord la copie d'écran puis affiche seulement le MsgBox. C'est aisé avec une gestion d'erreur style "On Error GoTo ..."

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonsoir,
    ouskel'n'or, tu peux faire ceci.
    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
     
    Option Explicit
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
     
    Private Sub Command1_Click()
    Dim msg As String, intx As Integer, Titre
    msg = "Voulez-vous faire une capture d'écran ?"
    Titre = "Capture d'écran"
    intx = MsgBox(msg, vbYesNo, Titre)
    If intx <> vbNo Then
    On Error Resume Next
    Call keybd_event(vbKeySnapshot, 0, 0&, 0&)  'envoie la code de la touche Print Screen (la capture dans le press papier)
    SavePicture Clipboard.GetData(0), "c:\Image.bmp"
    'enregistre la capture a l'adresse c:\Image.bmp
    Else: Exit Sub
    End If
     End Sub
     
    Private Sub Command2_Click()
    Picture1.Picture = LoadPicture("C:\Image.bmp")
    End Sub
    jpleroisse

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello Leroissejp,

    Tout d'abord, laisse moi répondre à ton post "meilleurs voeux" en te souhaitant à toi aussi une bonne année 2006 et que tous tes voeux exprimés dans ton message se réalisent.

    Merci pour ta réponse. Je ne voudrais pas détourner la question posée par prach mais, s'il veut utiliser ton code, autant qu'il ait lui aussi la réponse...
    J'ai en effet un problème avec Clipboard qui n'est pas reconnu et n'est pas déclaré, or je ne connais pas la syntaxe. Un truc comme :

    Private Declare Function Clipboard Lib "user32" () As Quoi ???

    Peux-tu me renseigner ?

    Par avance, merci

    A+

  6. #6
    Membre habitué Avatar de Mandalar
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 121
    Points : 128
    Points
    128
    Par défaut
    Chez moi ca marche impec, et je remarque que le clipboard n'a besoin d'aucune déclaration... (vb6) Tu développes en vba peut-être ?

    Sinon ce que tu veux faire PRACH, c'est enregistrer un message d'erreur graphiquement. Mais tu pourrais gérer l'erreur et l'enregistrer par exemple dans un fichier texte pour l'analyser plus tard, en utilisant :
    et ensuite quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur:
    Enregistrer(Err.Description) 'la fonction enregistrer est à définir pour toi

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello,

    Effectivement je suis sur VBA... 97 de surcroit (!)
    Donc, j'ai à déclarer le presse-papier.
    Si tu as la solution...

    A+

  8. #8
    Membre habitué Avatar de Mandalar
    Profil pro
    Étudiant
    Inscrit en
    Mai 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2004
    Messages : 121
    Points : 128
    Points
    128
    Par défaut
    J'ai trouvé ca avec la visionneuse d'api:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
    Cependant je vois pas trop comment s'en servir ni même a quoi ca peut servir

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Si, ça sert...

    Si tu veux vider le presse-papier, tu dois d'abord déclarer "tout ça"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function EmptyClipboard Lib "user32" () As Long
    Ensuite, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        OpenClipboard 0
        EmptyClipboard
        CloseClipboard
    J'avais trouvé ça sur le forum mais j'ai oublié qui...

    A toutes fins utiles.

    N'empêche que je ne sais toujours pas comment déclarer Clipboard...

    A+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    ouskel'n'or, voici tout ce que j'ai trouvé en VBA 97.

    L’exemple suivant illustre les mouvements de données d’un contrôle TextBox vers le Presse-papiers, du Presse-papiers vers un objet DataObject et d’un objet DataObject vers un autre contrôle TextBox. La méthode GetFromClipboard transfère les données du Presse-papiers vers un objet DataObject. Les méthodes Copy et GetText sont aussi utilisées.
    Pour utiliser cet exemple, copiez le code suivant dans la partie Déclarations d’une feuille et vérifiez que celle-ci contient :

    · deux contrôles TextBox nommés TextBox1 et TextBox2,
    · un contrôle CommandButton nommé CommandButton1.
    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
     
    Dim MyData as DataObject
     
    Private Sub CommandButton1_Click()
        'Sélectionnez un texte avant de le copier dans le
        'Presse-papiers
        TextBox1.SelStart = 0
        TextBox1.SelLength = TextBox1.TextLength
        TextBox1.Copy
     
        MyData.GetFromClipboard
        TextBox2.Text = MyData.GetText(1)
    End Sub
     
    Private Sub UserForm_Initialize()
        Set MyData = New DataObject
        TextBox1.Text = "Placez ces données dans " & _
             "le Presse-papiers, dans un objet " & "DataObject, puis dans le contrôle " & "TextBox2 !"
     
    End Sub
    jpleroisse

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci jp, j'avais quelque chose de proche et, pour du texte, pas de problème pour l'insérer où je le désire.
    Mais ce dont j'aurais besoin est la sauvegarde d'une copie d'écran sous forme de BMP en VBA 97 après copie d'écran par macro. Et là... :

    Pour faire ça :
    SavePicture Clipboard.GetData(0), "c:\Image.bmp"
    je dois déclarer Clipboard. Comment ? J'en sais rien !

    Merci

    A+

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    Ouskel'n'or , cela ne répondra pas à la question d'origine qui consistait à faire une capture d'un MsgBox , mais tu peux tester cette procedure pour effectuer une capture d'écran depuis Excel et l'enregistrer sous forme d'image .jpg

    (testé avec Excel 2002)


    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
    Option Explicit
     
    Private Declare Sub keybd_event Lib "user32" ( _
    ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
    ByVal dwExtraInfo As Long)
     
    Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, _
    ByVal lpFile As String, ByVal lpParameters As String, _
    ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
     
    Sub copieEcran_et_Sauvegarde()
    'michelxld le 30.09.2005
    Dim x As Byte
    Dim Sh As Shape
    Dim monImage As String
     
    keybd_event vbKeySnapshot, 1, 0&, 0&
    DoEvents
     
    x = ActiveSheet.Shapes.Count
     
    Application.ScreenUpdating = False
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste
     
    'verifie si le collage effectué correspond à une image
    If x = ActiveSheet.Shapes.Count Then
    Application.ScreenUpdating = True
    MsgBox "Opération annulée"
    Exit Sub
     
    Else
     
    Set Sh = ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
    monImage = "C:\monImage.jpg"
     
    With ActiveSheet.ChartObjects.Add(0, 0, Sh.Width, Sh.Height).Chart
    .Paste
    .Export monImage, "JPG"
    End With
     
    With ActiveSheet
    .ChartObjects(ActiveSheet.ChartObjects.Count).Delete
    .Shapes(ActiveSheet.Shapes.Count).Delete
    End With
     
    Application.ScreenUpdating = True
     
    '-------------------------------------------------------------
    'option pour les utilisateur de Windows XP :
    'visualisation de l'image créée avec avec l'apercu images_telecopies Windows
    'testé avec Excel2002 et WinXP
     
    'ShellExecute 0, "open", "rundll32.exe", _
    "C:\WINDOWS\System32\shimgvw.dll,ImageView_Fullscreen " & monImage, 0, 1
    '-------------------------------------------------------------
     
    End If
    End Sub

    la procedure peut aussi etre attachée à un CommandButton dans un Userform pour capturer et sauvegarder l'image de la Form



    bonne soiree
    michel

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci pour ton code, SilkyRoad.
    J'ai une info : Il marche du tonnerre sur VBA97 Donc, Youpi ! et toute cette sorte de choses. Heureusement qu'on t'a...
    Bien sûr, merci à toi aussi, leroissejp, je suis sûr qu'il ne manquait pas grand chose à ton code pour qu'il tourne aussi sur VBA 97.

    Tout ça en attendant que PRACH donne de ses nouvelles...

    A+

Discussions similaires

  1. Empécher les captures d'écran
    Par alix the webmasta dans le forum Autres langages pour le Web
    Réponses: 10
    Dernier message: 17/02/2006, 00h24
  2. [VB.NET] Redimensionner Bitmap d'une capture d'écran
    Par HULK dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/01/2006, 11h31
  3. [VB.NET] Capture d'écran
    Par tiboooo dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/01/2006, 18h23
  4. Capture d'écran
    Par lildan dans le forum MFC
    Réponses: 1
    Dernier message: 14/11/2005, 14h26
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

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