OVH Cloud OVH Cloud

pb impression d'un print screen

8 réponses
Avatar
Jacques M.
bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet de faire ma capture
de la fenêtre. Mais, lors de l'exécution du code, soit l'accès au
presse-papier est refusé, soit c'est l'ancien print sreen qui s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?

Merci.

Jacques

8 réponses

Avatar
Jacques93
Bonjour,

Jacques M. a écrit :
bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet de faire ma capture
de la fenêtre. Mais, lors de l'exécution du code, soit l'accès au
presse-papier est refusé, soit c'est l'ancien print sreen qui s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?




je penses qu'il te manque une attente entre
'keybd_event ...' et le 'Clipboard.GetData ...'

Essaie :

Private Sub BtnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0

While Clipboard.GetData(vbCFBitmap) = 0
DoEvents
Wend

Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub

en rajoutant une gestion d'erreur ou un TimeOut, si c'est OK.


--
Cordialement,

Jacques.
Avatar
LE TROLL
Salut,

Pour imprimer ta form, ça devrait suffire, si c'est ça
ta "fenêtre" ???

PrintForm
Printer.EndDoc
----------------------

"Jacques M." <Jacques a écrit
dans le message de news:

bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon
application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet
de faire ma capture
de la fenêtre. Mais, lors de l'exécution du code, soit
l'accès au
presse-papier est refusé, soit c'est l'ancien print sreen
qui s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?

Merci.

Jacques




Avatar
François Picalausa
Hello,

Form.Printform peut effectivement être une solution. Cependant, certains
contrôles n'apparaissent pas comme ils devraient avec cette méthode.
Si c'est le cas, tu peux jeter un oeil à la fiche suivante de la kb:
http://support.microsoft.com/kb/q161299/

--
François Picalausa

"Jacques M." <Jacques a écrit dans le
message de news:
bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet de faire ma
capture de la fenêtre. Mais, lors de l'exécution du code, soit
l'accès au presse-papier est refusé, soit c'est l'ancien print sreen
qui s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?

Merci.

Jacques


Avatar
Jacques M.
merci pour cette solution, simple et efficace.
j'étais parti trop loin pour la voir

Jacques M.

"LE TROLL" a écrit :

Salut,

Pour imprimer ta form, ça devrait suffire, si c'est ça
ta "fenêtre" ???

PrintForm
Printer.EndDoc
----------------------

"Jacques M." <Jacques a écrit
dans le message de news:

> bonjour la groupe,
>
> je souhaite, avec un bouton, imprimer la fenêtre de mon
> application.
> Pour cela, j'ai trouvé l'API "keybd_event" qui me permet
> de faire ma capture
> de la fenêtre. Mais, lors de l'exécution du code, soit
> l'accès au
> presse-papier est refusé, soit c'est l'ancien print sreen
> qui s'imprime...
>
> voici le bout de code qui gère mon bouton d'impression :
> -------
> Private Sub btnPrint_Click()
> Clipboard.Clear
> Set Picture1.Picture = Nothing
> keybd_event VK_SNAPSHOT, 1, 0, 0
> Picture1.Picture = Clipboard.GetData(vbCFBitmap)
> Printer.PaintPicture Picture1.Picture, 0, 0
> Printer.EndDoc
> Set Picture1.Picture = Nothing
> End Sub
> -------
>
> Quelqu'un a-t-il une solution à me proposer ?
>
> Merci.
>
> Jacques
>
>





Avatar
Jacques93
Bonsoir,
Jacques M. a écrit :
bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet de faire ma capture
de la fenêtre. Mais, lors de l'exécution du code, soit l'accès au
presse-papier est refusé, soit c'est l'ancien print sreen qui s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?




Un des avantages avec 'keybd_event' et le presse-papier, outre les
restrictions indiquées par François Picalausa, est de pouvoir imprimer

soit la feuille active :

keybd_event VK_SNAPSHOT, 1, 0, 0 ' = Alt-Impr Ecran

soit tout l'écran :

keybd_event VK_SNAPSHOT, 0, 0, 0 ' = Impr Ecran

Plus de détails ici, en fonction des versions d'OS :

http://support.microsoft.com/kb/240653/fr

--
Cordialement,

Jacques.
Avatar
Christian Hubert-Hugoud
Salut,

Il peut y avoir des questions d'autoredraw, de refresh etc... à partir du
moment où tu imprimes via une picturebox.

Des instructions comme :

set myp.picture = myp.image (ou l'inverse)
myp.refresh

etc...

Christian


"LE TROLL" <le a écrit dans le message de news:
e8x%23Tv%
Salut,

Pour imprimer ta form, ça devrait suffire, si c'est ça ta "fenêtre" ???

PrintForm
Printer.EndDoc
----------------------

"Jacques M." <Jacques a écrit dans le
message de news:
bonjour la groupe,

je souhaite, avec un bouton, imprimer la fenêtre de mon application.
Pour cela, j'ai trouvé l'API "keybd_event" qui me permet de faire ma
capture
de la fenêtre. Mais, lors de l'exécution du code, soit l'accès au
presse-papier est refusé, soit c'est l'ancien print sreen qui
s'imprime...

voici le bout de code qui gère mon bouton d'impression :
-------
Private Sub btnPrint_Click()
Clipboard.Clear
Set Picture1.Picture = Nothing
keybd_event VK_SNAPSHOT, 1, 0, 0
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
Printer.PaintPicture Picture1.Picture, 0, 0
Printer.EndDoc
Set Picture1.Picture = Nothing
End Sub
-------

Quelqu'un a-t-il une solution à me proposer ?

Merci.

Jacques








Avatar
LE TROLL
Jacques, comme dit François, enfin, sur le principe
édicté, tu peux mettre à visibleúlse les contrôles que tu
ne veux pas voir, idem, certaines valeurs, certains contours
ne passe pas aussi, genre "rose"...
----------

"Jacques M." a écrit
dans le message de news:

merci pour cette solution, simple et efficace.
j'étais parti trop loin pour la voir

Jacques M.

"LE TROLL" a écrit :

Salut,

Pour imprimer ta form, ça devrait suffire, si c'est
ça
ta "fenêtre" ???

PrintForm
Printer.EndDoc
----------------------

"Jacques M." <Jacques a
écrit
dans le message de news:

> bonjour la groupe,
>
> je souhaite, avec un bouton, imprimer la fenêtre de mon
> application.
> Pour cela, j'ai trouvé l'API "keybd_event" qui me
> permet
> de faire ma capture
> de la fenêtre. Mais, lors de l'exécution du code, soit
> l'accès au
> presse-papier est refusé, soit c'est l'ancien print
> sreen
> qui s'imprime...
>
> voici le bout de code qui gère mon bouton d'impression
> :
> -------
> Private Sub btnPrint_Click()
> Clipboard.Clear
> Set Picture1.Picture = Nothing
> keybd_event VK_SNAPSHOT, 1, 0, 0
> Picture1.Picture = Clipboard.GetData(vbCFBitmap)
> Printer.PaintPicture Picture1.Picture, 0, 0
> Printer.EndDoc
> Set Picture1.Picture = Nothing
> End Sub
> -------
>
> Quelqu'un a-t-il une solution à me proposer ?
>
> Merci.
>
> Jacques
>
>







Avatar
Jacques M.
J'en prends note. Après plusieurs essais, toutes mes informations pertinentes
apparaissent ; le reste ne sera qu'esthétique !

Merci encore de la solution.

"LE TROLL" a écrit :

Jacques, comme dit François, enfin, sur le principe
édicté, tu peux mettre à visibleúlse les contrôles que tu
ne veux pas voir, idem, certaines valeurs, certains contours
ne passe pas aussi, genre "rose"...
----------