Gerer le bouton "annuler impression" de windows dans un programme vb n

Résolu
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021 - 15 août 2020 à 15:07
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021 - 22 mai 2021 à 09:18
je souhaiterai le "bout de code" qui me permette de vider réellement l'impression en cour (pour l'instant il ne fait que la suspendre si je clique sur annuler). Je suis en train de me noyer sous les lignes de codes que je ne parviens pas à exploiter ni même comprendre.

Voici le code qui pose problème (pas de gestion du bouton annuler).

        Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    If PageNumber > 0 Then
            'MsgBox(PageNumber)
            e.Graphics.DrawString("ART: " & ReferenceArt, New Font("Impact", 16, FontStyle.Bold), Brushes.Black, 30, 20) '1er nb marge gauche 2e marge haute
            e.Graphics.DrawString("Désignation", New Font("Arial", 8, FontStyle.Regular), Brushes.Black, 42, 80) ' Désignation:
            e.Graphics.DrawString(DesignationArt, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 40, 100) '
            e.Graphics.DrawString("QTE :" & QuantiteArt, New Font("Arial", 16, FontStyle.Bold), Brushes.Black, 30, 138) '
            e.Graphics.DrawString(PackArt, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 30, 165) ' & PageNumber() 'ici on indique le nombre d'impression restante
            PageNumber -= 1 'on retire une impression
            e.HasMorePages = (PageNumber > 0)
        End If

End Sub


Private Sub Imprime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Imprime.Click
PrintDocument1.Print()
End Sub


Merci par avance pour votre aide.

bfb <img src="/imgs2

2 réponses

cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
Modifié le 15 août 2020 à 15:29
Bonjour,

tu as déjà posé cette question ici:

https://codes-sources.commentcamarche.net/forum/affich-10102305-gerer-annuler-impression

vu que tu n'as pas trouvé de réponse te satisfaisant, pourquoi ne pas faire manuellement un clic dans la barre de tâche sur l'icône de ton imprimante pour supprimer le document en cours?

Sinon voir ces sites:

https://www.gladir.com/CODER/VBNETWINDOWS/abortdoc.htm

https://codes-sources.commentcamarche.net/source/17708-l-api-abortdoc-permet-d-annuler-l-impression-en-cours-d-un-document

mais je trouve cela bien compliqué alors que tu as une solution toute simple. A toi de voir!


0
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021
Modifié le 15 août 2020 à 15:32
j'ai vu cet article mais je n'ai pas trouvé la façon de l'utiliser. Voici le peut que j'ai trouvé mais ça ne fonctionne pas
Je ne suis pas l'utilisateur final et toutes les fonctions sont verrouillées par mot de passe administrateur. le but du programme entier etant l'impression d'étiquette par un utilisateur ne connaissant pas ou peut l'informatique.

If e.Cancel = True Then
           
            MsgBox("")
            e.HasMorePages = 0
            MsgBox(e.HasMorePages & vbNewLine & PageNumber)
            PageNumber = 0
            MsgBox(PageNumber)
            e.HasMorePages = False
            Refresh()

            Exit Sub
End If


Si vous avez la solution je serai ravi. Merci
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623 > cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021
15 août 2020 à 16:02
Et nous ce qui nous ferait plaisir, serait que tu respectes les règles du forums et ne pas ouvrir de sujet en double....
Cette discussion va être supprimée par un modérateur.
Donc retourne sur le sujet initial pour décrire où tu en es par rapport à celui ci.
Et je te l'ai déjà dit, ce n'est pas un message de windows, mais du composant que tu utilises
0
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021 > Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023
15 août 2020 à 16:16
oups je suis désolé comment transférer ma question sur le même sujet? et si quelqu un à "LA" solution s'il vous plait
0
Whismeril Messages postés 18395 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 27 mai 2023 623 > cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021
15 août 2020 à 16:51
pas de transfert possible
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
15 août 2020 à 19:29
Dans le lien de la source il y a ce code en VB6, vois si tu peux l'adapter!

Private Declare Function AbortDoc Lib "gdi32" (ByVal hdc As Long) As Long

Sub Command1_Click()
    Dim R As Long
    R = AbortDoc(Printer.hdc)
End Sub

'Lancez le programme par F5.
'Vous pouvez alors annuler l'impression par la touche Enter, la touche
'Echappement ou par un click sur le bouton de commande.


@+ le Pivert
0
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021
16 août 2020 à 09:08
Voici ce que j'ai trouvé ça supprime l'impression mais elle reste encore en mémoire et reprend dès que l'on clique de nouveau sur imprimer

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
         'c'est ici que tout ce joue
         If e.Cancel = True Then
            e.HasMorePages = 0
            PageNumber = 0
            e.HasMorePages = False
            Refresh()
            Exit Sub
         End If

	If PageNumber > 0 Then
             e.Graphics.DrawString("ART: " & ReferenceArt, New Font("Impact", 16, FontStyle.Bold), Brushes.Black, 30, 20) '1er nb marge gauche 2e marge haute
            e.Graphics.DrawString("Désignation", New Font("Arial", 8, FontStyle.Regular), Brushes.Black, 42, 80) ' Désignation:
            e.Graphics.DrawString(DesignationArt, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 40, 100) '
            e.Graphics.DrawString("QTE :" & QuantiteArt, New Font("Arial", 16, FontStyle.Bold), Brushes.Black, 30, 138) '
            e.Graphics.DrawString(PackArt, New Font("Arial", 12, FontStyle.Bold), Brushes.Black, 30, 165) ' & PageNumber() 'ici on indique le nombre d'impression restante
            PageNumber -= 1 'on retire une impression
            e.HasMorePages = (PageNumber > 0)
        End If
end sub
--
bfb <img src="/imgs2
0
cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023 136
Modifié le 16 août 2020 à 09:33
 'c'est ici que tout ce joue
         If e.Cancel = True Then
            e.HasMorePages = 0
            PageNumber = 0
            e.HasMorePages = False
            Refresh()
            Exit Sub 'tu quittes donc la 2ème partie n'est pas prise en compte
         End If


Mais je ne comprends toujours pas pourquoi tu t'embêtes alors qu'il est si facile de le faire manuellement!!!!!!!!!!!!!
Tu n'as pas besoin d'être féru en informatique!
0
cs_bfb Messages postés 22 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 22 mai 2021 > cs_Le Pivert Messages postés 7893 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2023
22 mai 2021 à 09:18
merci pour tes explications effectivement ca fonctionne.
0