Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

CommandDialog, Flags, désactiver nb copies ???

12 réponses
Avatar
X
Bonjour

Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
compteurs du nombre de copies, si quelqu'un sait???

Voici ce que j'ai comme code (il manque un flag (copie = 1) ???

On Error GoTo erreur
Form1.CommonDialog1.Orientation = cdlLandscape ' paysage
Form1.CommonDialog1.Flags = &H80000 + &H8 + &H4
'&H80000 Désactive la case à cocher Imp dans fichier.
'&H8 Désactive le bouton Pages + ctrl associé
'&H4 Désactive le bouton d'option Sélection
Form1.CommonDialog1.CancelError = True ' 32755 = stop
Form1.CommonDialog1.ShowPrinter


Merci.
--
ECRIRE
http://irolog.free.fr/ecrire/index.htm

LOGICIELS
http://irolog.free.fr

SITE
http://irolog.free.fr/joe/index.htm

FAQ VB
http://faq.vb.free.fr

PRINCIPE D'UTILISATION DES NEWSGROUPS MICROSOFT
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
********************************************************

10 réponses

1 2
Avatar
Jacques93
Bonjour X,
X a écrit :
Bonjour

Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
compteurs du nombre de copies, si quelqu'un sait???

Voici ce que j'ai comme code (il manque un flag (copie = 1) ???

On Error GoTo erreur
Form1.CommonDialog1.Orientation = cdlLandscape ' paysage
Form1.CommonDialog1.Flags = &H80000 + &H8 + &H4
'&H80000 Désactive la case à cocher Imp dans fichier.
'&H8 Désactive le bouton Pages + ctrl associé
'&H4 Désactive le bouton d'option Sélection
Form1.CommonDialog1.CancelError = True ' 32755 = stop
Form1.CommonDialog1.ShowPrinter


Merci.



Je ne crois pas que cela soit possible de manière simple, le flag
CdlPDUseDevModeCopies (&H40000) ne désactive ce contrôle que si le
driver d'imprimante ne gère pas les copies multiples :

If a printer driver doesn't support multiple copies, setting this flag
disables the Number of copies spinner control in the Print dialog. If a
driver does support multiple copies, setting this flag indicates that
the dialog box stores the requested number of copies in the Copies property.

--
Cordialement,

Jacques.
Avatar
Zoury
Salut X ! :O)


Avant de commencer, j'ai deux petits conseils à te donner.
1. Il faut Emploi l'opérateur Or afin de fusionner des Flags ensembles.
2. Il préférable d'employer des constantes au lieu de valeur "codé en dur".
Ça rend le code plus flexible (d'un coup que la valeur des flags changent un
jour) et le rend plus lisible.

Ex :
Form1.CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection



Maintenant ton problème :
Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
compteurs du nombre de copies, si quelqu'un sait???
'&H8 Désactive le bouton Pages + ctrl associé




Je crois que tu as mal lu la description des Flags.. :
http://msdn.microsoft.com/library/en-us/cmdlg98/html/vbproflagsprint.asp

Celui que tu cherches serait CdlPDUseDevModeCopies et, comme le dit la
description, ça ne fonctionnera pas si ton driver supporte cette option.


Il toutefois possible de désactiver toi même ces contrôles en utilisant les
APIs.
L'emploi l'outil Spy++ (fournit avec VS6) te servira à déterminer quels
contrôles tu cherches et comment tu peux récupérer leur handles.
(Remarques que si tu n'es pas sûr d'avoir compris les 2 phrases ci-haut, je
te recommande la page suivante :
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp
qui te fournira toutes les informations nécessaires à la connaissance du
fonctionnement des fenêtres sous Windows.)


Voici enfin le code. Note que l'interface de la boite de dialogue dépend de
ton driver d'imprimante, alors l'exemple pourrait nécessité des
modifications afin de fonctionner sur ton poste.
'***
' Form1
' 1 CommonDialog
Option Explicit

Private Sub Form_Load()

CommonDialog1.Orientation = cdlLandscape
CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
CommonDialog1.CancelError = True

Call StartTimer(Me.hWnd, 10)
Call CommonDialog1.ShowPrinter

Call Unload(Me)

End Sub
'***
' Module1
Private Declare Function SetTimer _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) As Long

Private Declare Function KillTimer _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long _
) As Long

Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" _
( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long

Private Declare Function FindWindowEx _
Lib "user32" _
Alias "FindWindowExA" _
( _
ByVal hWndParent As Long, _
ByVal hWndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String _
) As Long

Private Declare Function EnableWindow _
Lib "user32" ( _
ByVal hWnd As Long, _
ByVal bEnable As Long _
) As Long

Private Declare Function GetClassNameA _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long _
) As Long

Private m_hWnd As Long

Public Sub StartTimer(ByRef hWnd As Long, ByRef nInterval As Long)
m_hWnd = hWnd
Call SetTimer(m_hWnd, 0, nInterval, AddressOf TimerProc)
End Sub

Private Sub StopTimer()
Call KillTimer(m_hWnd, 0)
End Sub

Private Function GetClassName(ByRef hWnd As Long) As String
GetClassName = Space$(256)
GetClassName = Left$(GetClassName, GetClassNameA(hWnd, GetClassName,
256))
End Function

Public Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal
uElapse As Long, ByVal lpTimerFunc As Long)

Dim hDialogWnd As Long
Dim hWnd1 As Long
Dim hWnd2 As Long

' on test voir si la boîte de dialogue à été créée
hDialogWnd = FindWindow("#32770", vbNullString)
Debug.Print Hex$(hDialogWnd), GetClassName(hDialogWnd)
If (hDialogWnd > 0) Then

' si oui, on recherche les contrôles à rendre inaccessible
' Cherche l'onglet "Général"
hWnd1 = FindWindowEx(hDialogWnd, 0, vbNullString, "Général")
Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
' Cherche le sous-contrôle (assez obscure celui là) contenant
l'interface
hWnd1 = FindWindowEx(hWnd1, 0, "#32770", vbNullString)
Debug.Print Hex$(hWnd1), GetClassName(hWnd1)

' Cherche le label "Nombre de copies"
' (3ième contrôle de classe "Static"
hWnd2 = FindWindowEx(hWnd1, 0, "Static", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' Cherche le textbox relié à "Nombre de copies"
' (2ième contrôle de classe "Edit"
hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Edit", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' Cherche le contrôle de type UpDown relié à "Nombre de copies"
' (seul contrôle de classe "msctls_updown32")
hWnd2 = FindWindowEx(hWnd1, 0, "msctls_updown32", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' on arrête le timer étant donné qu'on en a plus besoin
Call StopTimer
End If

End Sub
'***

En espérant t'avoir aider un tout p'tit peu..
--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Driss HANIB
je crois que "X", n'aime pas bien l'anglais.. ;o))


Driss
"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut X ! :O)


Avant de commencer, j'ai deux petits conseils à te donner.
1. Il faut Emploi l'opérateur Or afin de fusionner des Flags ensembles.
2. Il préférable d'employer des constantes au lieu de valeur "codé en


dur".
Ça rend le code plus flexible (d'un coup que la valeur des flags changent


un
jour) et le rend plus lisible.

Ex :
Form1.CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection



Maintenant ton problème :
> Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
> compteurs du nombre de copies, si quelqu'un sait???
> '&H8 Désactive le bouton Pages + ctrl associé


Je crois que tu as mal lu la description des Flags.. :
http://msdn.microsoft.com/library/en-us/cmdlg98/html/vbproflagsprint.asp

Celui que tu cherches serait CdlPDUseDevModeCopies et, comme le dit la
description, ça ne fonctionnera pas si ton driver supporte cette option.


Il toutefois possible de désactiver toi même ces contrôles en utilisant


les
APIs.
L'emploi l'outil Spy++ (fournit avec VS6) te servira à déterminer quels
contrôles tu cherches et comment tu peux récupérer leur handles.
(Remarques que si tu n'es pas sûr d'avoir compris les 2 phrases ci-haut,


je
te recommande la page suivante :



http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp
qui te fournira toutes les informations nécessaires à la connaissance du
fonctionnement des fenêtres sous Windows.)


Voici enfin le code. Note que l'interface de la boite de dialogue dépend


de
ton driver d'imprimante, alors l'exemple pourrait nécessité des
modifications afin de fonctionner sur ton poste.
'***
' Form1
' 1 CommonDialog
Option Explicit

Private Sub Form_Load()

CommonDialog1.Orientation = cdlLandscape
CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
CommonDialog1.CancelError = True

Call StartTimer(Me.hWnd, 10)
Call CommonDialog1.ShowPrinter

Call Unload(Me)

End Sub
'***
' Module1
Private Declare Function SetTimer _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long _
) As Long

Private Declare Function KillTimer _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal nIDEvent As Long _
) As Long

Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" _
( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long

Private Declare Function FindWindowEx _
Lib "user32" _
Alias "FindWindowExA" _
( _
ByVal hWndParent As Long, _
ByVal hWndChildAfter As Long, _
ByVal lpszClass As String, _
ByVal lpszWindow As String _
) As Long

Private Declare Function EnableWindow _
Lib "user32" ( _
ByVal hWnd As Long, _
ByVal bEnable As Long _
) As Long

Private Declare Function GetClassNameA _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal lpClassName As String, _
ByVal nMaxCount As Long _
) As Long

Private m_hWnd As Long

Public Sub StartTimer(ByRef hWnd As Long, ByRef nInterval As Long)
m_hWnd = hWnd
Call SetTimer(m_hWnd, 0, nInterval, AddressOf TimerProc)
End Sub

Private Sub StopTimer()
Call KillTimer(m_hWnd, 0)
End Sub

Private Function GetClassName(ByRef hWnd As Long) As String
GetClassName = Space$(256)
GetClassName = Left$(GetClassName, GetClassNameA(hWnd, GetClassName,
256))
End Function

Public Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal
uElapse As Long, ByVal lpTimerFunc As Long)

Dim hDialogWnd As Long
Dim hWnd1 As Long
Dim hWnd2 As Long

' on test voir si la boîte de dialogue à été créée
hDialogWnd = FindWindow("#32770", vbNullString)
Debug.Print Hex$(hDialogWnd), GetClassName(hDialogWnd)
If (hDialogWnd > 0) Then

' si oui, on recherche les contrôles à rendre inaccessible
' Cherche l'onglet "Général"
hWnd1 = FindWindowEx(hDialogWnd, 0, vbNullString, "Général")
Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
' Cherche le sous-contrôle (assez obscure celui là) contenant
l'interface
hWnd1 = FindWindowEx(hWnd1, 0, "#32770", vbNullString)
Debug.Print Hex$(hWnd1), GetClassName(hWnd1)

' Cherche le label "Nombre de copies"
' (3ième contrôle de classe "Static"
hWnd2 = FindWindowEx(hWnd1, 0, "Static", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' Cherche le textbox relié à "Nombre de copies"
' (2ième contrôle de classe "Edit"
hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbNullString)
hWnd2 = FindWindowEx(hWnd1, hWnd2, "Edit", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' Cherche le contrôle de type UpDown relié à "Nombre de copies"
' (seul contrôle de classe "msctls_updown32")
hWnd2 = FindWindowEx(hWnd1, 0, "msctls_updown32", vbNullString)
Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
Call EnableWindow(hWnd2, False)

' on arrête le timer étant donné qu'on en a plus besoin
Call StopTimer
End If

End Sub
'***

En espérant t'avoir aider un tout p'tit peu..
--
Cordialement
Yanick
MVP pour Visual Basic




Avatar
X
Ne pas l'aimer, certes, mais aussi ne pas assez le comprendre, ceci
expliquant peut être cela, soyons magnanimes :o)




"Driss HANIB" a écrit dans le message de news:

| je crois que "X", n'aime pas bien l'anglais.. ;o))
|
|
| Driss
| "Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
| news:
| > Salut X ! :O)
| >
| >
| > Avant de commencer, j'ai deux petits conseils à te donner.
| > 1. Il faut Emploi l'opérateur Or afin de fusionner des Flags ensembles.
| > 2. Il préférable d'employer des constantes au lieu de valeur "codé en
| dur".
| > Ça rend le code plus flexible (d'un coup que la valeur des flags
changent
| un
| > jour) et le rend plus lisible.
| >
| > Ex :
| > Form1.CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
| >
| >
| >
| > Maintenant ton problème :
| > > Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
| > > compteurs du nombre de copies, si quelqu'un sait???
| > > '&H8 Désactive le bouton Pages + ctrl associé
| >
| >
| > Je crois que tu as mal lu la description des Flags.. :
| > http://msdn.microsoft.com/library/en-us/cmdlg98/html/vbproflagsprint.asp
| >
| > Celui que tu cherches serait CdlPDUseDevModeCopies et, comme le dit la
| > description, ça ne fonctionnera pas si ton driver supporte cette option.
| >
| >
| > Il toutefois possible de désactiver toi même ces contrôles en utilisant
| les
| > APIs.
| > L'emploi l'outil Spy++ (fournit avec VS6) te servira à déterminer quels
| > contrôles tu cherches et comment tu peux récupérer leur handles.
| > (Remarques que si tu n'es pas sûr d'avoir compris les 2 phrases ci-haut,
| je
| > te recommande la page suivante :
| >
|
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp
| > qui te fournira toutes les informations nécessaires à la connaissance du
| > fonctionnement des fenêtres sous Windows.)
| >
| >
| > Voici enfin le code. Note que l'interface de la boite de dialogue dépend
| de
| > ton driver d'imprimante, alors l'exemple pourrait nécessité des
| > modifications afin de fonctionner sur ton poste.
| > '***
| > ' Form1
| > ' 1 CommonDialog
| > Option Explicit
| >
| > Private Sub Form_Load()
| >
| > CommonDialog1.Orientation = cdlLandscape
| > CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
| > CommonDialog1.CancelError = True
| >
| > Call StartTimer(Me.hWnd, 10)
| > Call CommonDialog1.ShowPrinter
| >
| > Call Unload(Me)
| >
| > End Sub
| > '***
| > ' Module1
| > Private Declare Function SetTimer _
| > Lib "user32" _
| > ( _
| > ByVal hWnd As Long, _
| > ByVal nIDEvent As Long, _
| > ByVal uElapse As Long, _
| > ByVal lpTimerFunc As Long _
| > ) As Long
| >
| > Private Declare Function KillTimer _
| > Lib "user32" _
| > ( _
| > ByVal hWnd As Long, _
| > ByVal nIDEvent As Long _
| > ) As Long
| >
| > Private Declare Function FindWindow _
| > Lib "user32" _
| > Alias "FindWindowA" _
| > ( _
| > ByVal lpClassName As String, _
| > ByVal lpWindowName As String _
| > ) As Long
| >
| > Private Declare Function FindWindowEx _
| > Lib "user32" _
| > Alias "FindWindowExA" _
| > ( _
| > ByVal hWndParent As Long, _
| > ByVal hWndChildAfter As Long, _
| > ByVal lpszClass As String, _
| > ByVal lpszWindow As String _
| > ) As Long
| >
| > Private Declare Function EnableWindow _
| > Lib "user32" ( _
| > ByVal hWnd As Long, _
| > ByVal bEnable As Long _
| > ) As Long
| >
| > Private Declare Function GetClassNameA _
| > Lib "user32" _
| > ( _
| > ByVal hWnd As Long, _
| > ByVal lpClassName As String, _
| > ByVal nMaxCount As Long _
| > ) As Long
| >
| > Private m_hWnd As Long
| >
| > Public Sub StartTimer(ByRef hWnd As Long, ByRef nInterval As Long)
| > m_hWnd = hWnd
| > Call SetTimer(m_hWnd, 0, nInterval, AddressOf TimerProc)
| > End Sub
| >
| > Private Sub StopTimer()
| > Call KillTimer(m_hWnd, 0)
| > End Sub
| >
| > Private Function GetClassName(ByRef hWnd As Long) As String
| > GetClassName = Space$(256)
| > GetClassName = Left$(GetClassName, GetClassNameA(hWnd, GetClassName,
| > 256))
| > End Function
| >
| > Public Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal
| > uElapse As Long, ByVal lpTimerFunc As Long)
| >
| > Dim hDialogWnd As Long
| > Dim hWnd1 As Long
| > Dim hWnd2 As Long
| >
| > ' on test voir si la boîte de dialogue à été créée
| > hDialogWnd = FindWindow("#32770", vbNullString)
| > Debug.Print Hex$(hDialogWnd), GetClassName(hDialogWnd)
| > If (hDialogWnd > 0) Then
| >
| > ' si oui, on recherche les contrôles à rendre inaccessible
| > ' Cherche l'onglet "Général"
| > hWnd1 = FindWindowEx(hDialogWnd, 0, vbNullString, "Général")
| > Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
| > ' Cherche le sous-contrôle (assez obscure celui là) contenant
| > l'interface
| > hWnd1 = FindWindowEx(hWnd1, 0, "#32770", vbNullString)
| > Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
| >
| > ' Cherche le label "Nombre de copies"
| > ' (3ième contrôle de classe "Static"
| > hWnd2 = FindWindowEx(hWnd1, 0, "Static", vbNullString)
| > hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
| > hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
| > Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| > Call EnableWindow(hWnd2, False)
| >
| > ' Cherche le textbox relié à "Nombre de copies"
| > ' (2ième contrôle de classe "Edit"
| > hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbNullString)
| > hWnd2 = FindWindowEx(hWnd1, hWnd2, "Edit", vbNullString)
| > Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| > Call EnableWindow(hWnd2, False)
| >
| > ' Cherche le contrôle de type UpDown relié à "Nombre de copies"
| > ' (seul contrôle de classe "msctls_updown32")
| > hWnd2 = FindWindowEx(hWnd1, 0, "msctls_updown32", vbNullString)
| > Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| > Call EnableWindow(hWnd2, False)
| >
| > ' on arrête le timer étant donné qu'on en a plus besoin
| > Call StopTimer
| > End If
| >
| > End Sub
| > '***
| >
| > En espérant t'avoir aider un tout p'tit peu..
| > --
| > Cordialement
| > Yanick
| > MVP pour Visual Basic
| >
| >
|
|
Avatar
X
Bonjour,

Merci, cependant je ne comprends pas trop pourquoi employer des OR pour
les flags, "OR", étant exclusif, ça, ou ceci ou cela... Or, c'est le cas de
le dire, pour les flags, on les veut toutes au même moment, ne serait-ce pas
davantage de facto un "AND", fla1 and flag2 and flag3 ???
Peux-tu m'expliquer :o) ???







"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
| Salut X ! :O)
|
|
| Avant de commencer, j'ai deux petits conseils à te donner.
| 1. Il faut Emploi l'opérateur Or afin de fusionner des Flags ensembles.
| 2. Il préférable d'employer des constantes au lieu de valeur "codé en
dur".
| Ça rend le code plus flexible (d'un coup que la valeur des flags changent
un
| jour) et le rend plus lisible.
|
| Ex :
| Form1.CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
|
|
|
| Maintenant ton problème :
| > Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
| > compteurs du nombre de copies, si quelqu'un sait???
| > '&H8 Désactive le bouton Pages + ctrl associé
|
|
| Je crois que tu as mal lu la description des Flags.. :
| http://msdn.microsoft.com/library/en-us/cmdlg98/html/vbproflagsprint.asp
|
| Celui que tu cherches serait CdlPDUseDevModeCopies et, comme le dit la
| description, ça ne fonctionnera pas si ton driver supporte cette option.
|
|
| Il toutefois possible de désactiver toi même ces contrôles en utilisant
les
| APIs.
| L'emploi l'outil Spy++ (fournit avec VS6) te servira à déterminer quels
| contrôles tu cherches et comment tu peux récupérer leur handles.
| (Remarques que si tu n'es pas sûr d'avoir compris les 2 phrases ci-haut,
je
| te recommande la page suivante :
|
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows.asp
| qui te fournira toutes les informations nécessaires à la connaissance du
| fonctionnement des fenêtres sous Windows.)
|
|
| Voici enfin le code. Note que l'interface de la boite de dialogue dépend
de
| ton driver d'imprimante, alors l'exemple pourrait nécessité des
| modifications afin de fonctionner sur ton poste.
| '***
| ' Form1
| ' 1 CommonDialog
| Option Explicit
|
| Private Sub Form_Load()
|
| CommonDialog1.Orientation = cdlLandscape
| CommonDialog1.Flags = cdlPDDisablePrintToFile Or cdlPDNoSelection
| CommonDialog1.CancelError = True
|
| Call StartTimer(Me.hWnd, 10)
| Call CommonDialog1.ShowPrinter
|
| Call Unload(Me)
|
| End Sub
| '***
| ' Module1
| Private Declare Function SetTimer _
| Lib "user32" _
| ( _
| ByVal hWnd As Long, _
| ByVal nIDEvent As Long, _
| ByVal uElapse As Long, _
| ByVal lpTimerFunc As Long _
| ) As Long
|
| Private Declare Function KillTimer _
| Lib "user32" _
| ( _
| ByVal hWnd As Long, _
| ByVal nIDEvent As Long _
| ) As Long
|
| Private Declare Function FindWindow _
| Lib "user32" _
| Alias "FindWindowA" _
| ( _
| ByVal lpClassName As String, _
| ByVal lpWindowName As String _
| ) As Long
|
| Private Declare Function FindWindowEx _
| Lib "user32" _
| Alias "FindWindowExA" _
| ( _
| ByVal hWndParent As Long, _
| ByVal hWndChildAfter As Long, _
| ByVal lpszClass As String, _
| ByVal lpszWindow As String _
| ) As Long
|
| Private Declare Function EnableWindow _
| Lib "user32" ( _
| ByVal hWnd As Long, _
| ByVal bEnable As Long _
| ) As Long
|
| Private Declare Function GetClassNameA _
| Lib "user32" _
| ( _
| ByVal hWnd As Long, _
| ByVal lpClassName As String, _
| ByVal nMaxCount As Long _
| ) As Long
|
| Private m_hWnd As Long
|
| Public Sub StartTimer(ByRef hWnd As Long, ByRef nInterval As Long)
| m_hWnd = hWnd
| Call SetTimer(m_hWnd, 0, nInterval, AddressOf TimerProc)
| End Sub
|
| Private Sub StopTimer()
| Call KillTimer(m_hWnd, 0)
| End Sub
|
| Private Function GetClassName(ByRef hWnd As Long) As String
| GetClassName = Space$(256)
| GetClassName = Left$(GetClassName, GetClassNameA(hWnd, GetClassName,
| 256))
| End Function
|
| Public Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal
| uElapse As Long, ByVal lpTimerFunc As Long)
|
| Dim hDialogWnd As Long
| Dim hWnd1 As Long
| Dim hWnd2 As Long
|
| ' on test voir si la boîte de dialogue à été créée
| hDialogWnd = FindWindow("#32770", vbNullString)
| Debug.Print Hex$(hDialogWnd), GetClassName(hDialogWnd)
| If (hDialogWnd > 0) Then
|
| ' si oui, on recherche les contrôles à rendre inaccessible
| ' Cherche l'onglet "Général"
| hWnd1 = FindWindowEx(hDialogWnd, 0, vbNullString, "Général")
| Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
| ' Cherche le sous-contrôle (assez obscure celui là) contenant
| l'interface
| hWnd1 = FindWindowEx(hWnd1, 0, "#32770", vbNullString)
| Debug.Print Hex$(hWnd1), GetClassName(hWnd1)
|
| ' Cherche le label "Nombre de copies"
| ' (3ième contrôle de classe "Static"
| hWnd2 = FindWindowEx(hWnd1, 0, "Static", vbNullString)
| hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
| hWnd2 = FindWindowEx(hWnd1, hWnd2, "Static", vbNullString)
| Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| Call EnableWindow(hWnd2, False)
|
| ' Cherche le textbox relié à "Nombre de copies"
| ' (2ième contrôle de classe "Edit"
| hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbNullString)
| hWnd2 = FindWindowEx(hWnd1, hWnd2, "Edit", vbNullString)
| Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| Call EnableWindow(hWnd2, False)
|
| ' Cherche le contrôle de type UpDown relié à "Nombre de copies"
| ' (seul contrôle de classe "msctls_updown32")
| hWnd2 = FindWindowEx(hWnd1, 0, "msctls_updown32", vbNullString)
| Debug.Print Hex$(hWnd2), GetClassName(hWnd2)
| Call EnableWindow(hWnd2, False)
|
| ' on arrête le timer étant donné qu'on en a plus besoin
| Call StopTimer
| End If
|
| End Sub
| '***
|
| En espérant t'avoir aider un tout p'tit peu..
| --
| Cordialement
| Yanick
| MVP pour Visual Basic
|
|
Avatar
Zoury
Salut Driss ! :O)

je crois que "X", n'aime pas bien l'anglais.. ;o))



Hehe ! J'viens juste de vérifier la provenance de ses messages. :OD

en effet... il n'aime pas l'anglais.
Mais bon, il a déjà vu plusieurs fois ce type d'exemple alors je ne crois
pas que les fonctions FindWindow() et FindWindowEx() lui soient totalement
inconnues.


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
X
Merci :o)



"Jacques93" a écrit dans le message de news:
ui%
| Bonjour X,
| X a écrit :
| > Bonjour
| >
| > Dans les flags d'un CommonDialog, je n'arrive pas à désactiver le
| > compteurs du nombre de copies, si quelqu'un sait???
| >
| > Voici ce que j'ai comme code (il manque un flag (copie = 1) ???
| >
| > On Error GoTo erreur
| > Form1.CommonDialog1.Orientation = cdlLandscape ' paysage
| > Form1.CommonDialog1.Flags = &H80000 + &H8 + &H4
| > '&H80000 Désactive la case à cocher Imp dans fichier.
| > '&H8 Désactive le bouton Pages + ctrl associé
| > '&H4 Désactive le bouton d'option Sélection
| > Form1.CommonDialog1.CancelError = True ' 32755 = stop
| > Form1.CommonDialog1.ShowPrinter
| >
| >
| > Merci.
|
| Je ne crois pas que cela soit possible de manière simple, le flag
| CdlPDUseDevModeCopies (&H40000) ne désactive ce contrôle que si le
| driver d'imprimante ne gère pas les copies multiples :
|
| If a printer driver doesn't support multiple copies, setting this flag
| disables the Number of copies spinner control in the Print dialog. If a
| driver does support multiple copies, setting this flag indicates that
| the dialog box stores the requested number of copies in the Copies
property.
|
| --
| Cordialement,
|
| Jacques.
Avatar
Zoury
> Peux-tu m'expliquer :o) ???



Yep !

Tu te rappelles de l'algèbre de BOOL ?

opérateur ET
vrai ET vrai = vrai
vrai ET faux = faux
faux ET vrai = faux
faux ET faux = faux

opérateur OU
vrai OU vrai = vrai
vrai OU faux = vrai
faux OU vrai = vrai
faux OU faux = faux



Les opérateur And et Or appliquer sur des nombres en VB applique la même
logique sur chacun des bits de ces nombres :

opérateur ET
1 ET 1 = 1
1 ET 0 = 0
0 ET 1 = 0
0 ET 0 = 0

opérateur OU
1 OU 1 = 1
1 OU 0 = 1
0 OU 1 = 1
0 OU 0 = 0


Par exemple, supposons les deux valeurs suivantes (en notation binaire) :
1 => 0001
2 => 0010
8 => 1000

Si on applique un And tu obtiens ceci (je compare les trois nombres en deux
étapes) :
0001
0010 And
------------
0000
1000 And
------------
0000


Tandis que si on applique un Or tu obtiens ceci :
0001
0010 Or
------------
0011
1000 Or
------------
1011

on obtient donc une "fusion" des trois nombres


Ce message t'en diras plus avec un exemple théorique suivi d'un exemple de
code :
http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
X
Ok j'ai compris, merci :o)
Mais sinon mauvais lien, je ne crois pas devoir lire le nom que le lien fait
apparaître...
----------------





"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %
|> Peux-tu m'expliquer :o) ???
|
| Yep !
|
| Tu te rappelles de l'algèbre de BOOL ?
|
| opérateur ET
| vrai ET vrai = vrai
| vrai ET faux = faux
| faux ET vrai = faux
| faux ET faux = faux
|
| opérateur OU
| vrai OU vrai = vrai
| vrai OU faux = vrai
| faux OU vrai = vrai
| faux OU faux = faux
|
|
|
| Les opérateur And et Or appliquer sur des nombres en VB applique la même
| logique sur chacun des bits de ces nombres :
|
| opérateur ET
| 1 ET 1 = 1
| 1 ET 0 = 0
| 0 ET 1 = 0
| 0 ET 0 = 0
|
| opérateur OU
| 1 OU 1 = 1
| 1 OU 0 = 1
| 0 OU 1 = 1
| 0 OU 0 = 0
|
|
| Par exemple, supposons les deux valeurs suivantes (en notation binaire) :
| 1 => 0001
| 2 => 0010
| 8 => 1000
|
| Si on applique un And tu obtiens ceci (je compare les trois nombres en
deux
| étapes) :
| 0001
| 0010 And
| ------------
| 0000
| 1000 And
| ------------
| 0000
|
|
| Tandis que si on applique un Or tu obtiens ceci :
| 0001
| 0010 Or
| ------------
| 0011
| 1000 Or
| ------------
| 1011
|
| on obtient donc une "fusion" des trois nombres
|
|
| Ce message t'en diras plus avec un exemple théorique suivi d'un exemple de
| code :
|
http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5
|
|
| --
| Cordialement
| Yanick
| MVP pour Visual Basic
|
|
Avatar
Zoury
> Mais sinon mauvais lien, je ne crois pas devoir lire le nom que le lien
fait
apparaître...



de quel lien parles-tu ? celui discutant des Windows ou celui expliquant les
bitmasks ?
aussi à quel nom fais-tu référence ? (tu m'as perdu un peu.. ;O)



"X" <.> a écrit dans le message de news:
%
Ok j'ai compris, merci :o)
Mais sinon mauvais lien, je ne crois pas devoir lire le nom que le lien
fait
apparaître...
----------------





"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: %
|> Peux-tu m'expliquer :o) ???
|
| Yep !
|
| Tu te rappelles de l'algèbre de BOOL ?
|
| opérateur ET
| vrai ET vrai = vrai
| vrai ET faux = faux
| faux ET vrai = faux
| faux ET faux = faux
|
| opérateur OU
| vrai OU vrai = vrai
| vrai OU faux = vrai
| faux OU vrai = vrai
| faux OU faux = faux
|
|
|
| Les opérateur And et Or appliquer sur des nombres en VB applique la même
| logique sur chacun des bits de ces nombres :
|
| opérateur ET
| 1 ET 1 = 1
| 1 ET 0 = 0
| 0 ET 1 = 0
| 0 ET 0 = 0
|
| opérateur OU
| 1 OU 1 = 1
| 1 OU 0 = 1
| 0 OU 1 = 1
| 0 OU 0 = 0
|
|
| Par exemple, supposons les deux valeurs suivantes (en notation binaire)
:
| 1 => 0001
| 2 => 0010
| 8 => 1000
|
| Si on applique un And tu obtiens ceci (je compare les trois nombres en
deux
| étapes) :
| 0001
| 0010 And
| ------------
| 0000
| 1000 And
| ------------
| 0000
|
|
| Tandis que si on applique un Or tu obtiens ceci :
| 0001
| 0010 Or
| ------------
| 0011
| 1000 Or
| ------------
| 1011
|
| on obtient donc une "fusion" des trois nombres
|
|
| Ce message t'en diras plus avec un exemple théorique suivi d'un exemple
de
| code :
|
http://groups.google.com/group/microsoft.public.fr.vb/browse_frm/thread/add2c7a07fc4bbdf/af6ff365e2f675b5#af6ff365e2f675b5
|
|
| --
| Cordialement
| Yanick
| MVP pour Visual Basic
|
|




1 2