OVH Cloud OVH Cloud

positionnement boite de dialogue

2 réponses
Avatar
Armando R.
bonsoir,
est il possible de positionner la boite de dialogue "Ouvrir un Fichier"
à un endroit précis de la fenêtre de mon application ?...

2 réponses

Avatar
François Picalausa
Hello,

Il existe trois méthode pour repositionner un common dialog.

Si tu affiche la boite de dialogue par l'API GetOpenFileName (ce qui a pour
avantage d'éviter de devoir redistribuer l'ocx), tu peux te référer au post
suivant:
http://groups.google.com/groups?selm=%23ZF0Xs89DHA.2316%40TK2MSFTNGP11.phx.gbl

Si tu emploies le contrôle, le fait de le mettre dans un picturebox (ou
autre container) qui sera lui à la bonne position permet de repositionner la
boite de dialogue. (Ceci ne fonctionne peut-être plus avec le SP6? je viens
de réessayer et pas moyen....)

Il est aussi possible d'intercepter par API la boite de dialogue lorsqu'elle
est affichée, comme montré dans le post suivant:
http://groups.google.com/groups?selm=u1lcQx89DHA.2324%40tk2msftngp13.phx.gbl

--
François Picalausa

"Armando R." a écrit dans le message de news:
41f2ca74$0$25624$
bonsoir,
est il possible de positionner la boite de dialogue "Ouvrir un
Fichier" à un endroit précis de la fenêtre de mon application ?...


Avatar
Christian HUBERT-HUGOUD- Xtrem7
Il faut mettre un hook qui appelle la fonction suivante :

Public Function OFNHookProc(ByVal hdlg As Long, ByVal uiMsg As Long, ByVal
wParam As Long, ByVal lParam As Long) As Long
Dim lpNMHDR As NMHDR
Dim rc As RECT, CurTop&, CurLeft&

If (uiMsg = WM_NOTIFY) Then
Call CopyMemory(lpNMHDR, ByVal lParam, LenB(lpNMHDR))
If (lpNMHDR.Code = CDN_INITDONE) Then
' il faut redimensionner la fenêtre *après* l'exécution de ce
message, sinon les
' contrôles se trouvant dans la fenêtre ne se redimensionne
pas correctement.
' On envoit donc un message custom (WM_USER+1) qui sera traité
*après* CDN_INITDONE
Call PostMessage(hdlg, WM_USER + 1, 0, ByVal 0&)
End If
ElseIf (uiMsg = WM_USER + 1) Then
' on vient de recevoir notre message custom, on
repositionne/redimensionne la fenêtre

CurLeft = BackForm.Left / Screen.TwipsPerPixelX + ((BackForm.width)
/ Screen.TwipsPerPixelX - 800) / 2 + 10
CurTop = BackForm.Top / Screen.TwipsPerPixelY + ((BackForm.height) /
Screen.TwipsPerPixelY - 600) / 2 + 10
If CurLeft < 0 Then CurLeft = 0
If CurTop < 0 Then CurTop = 0

Call MoveWindow(GetParent(hdlg), CurLeft, CurTop, 800 - 20, 600 -
20, 1)

' on a traité le message et on ne veut pas que Windows y touche.
OFNHookProc = 1
End If

End Function

Cette fonction place et redimensionne le dialogue, en fonction de BackForm.
Moi, je l'utilise dans une classe. Si tu veux plus d'infos ou les fichiers :


Cordialement

Christian Hubert-Hugoud

"Armando R." a écrit dans le message de
news:41f2ca74$0$25624$
bonsoir,
est il possible de positionner la boite de dialogue "Ouvrir un Fichier"
à un endroit précis de la fenêtre de mon application ?...