OVH Cloud OVH Cloud

Positionnner une fenêtre

14 réponses
Avatar
Jessy SEMPERE
Bonjour à tous

Je lance une fenêtre de sélection d'un répertoire en utilisant
l'API : "SHBrowseForFolder"

Comment je peux positionner cette fenêtre où je souhaite
sur l'écran ??

Je suppose qu'il faut utiliser l'API SetWindowPos mais le
problème c'est que je n'ai pas le handle de la fenêtre qui s'ouvre...

Merci à tous
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------

10 réponses

1 2
Avatar
Zoury
Salut Jessy! :O)

Tu devras récupèré le handle de la fenêtre avec FindWindow et pour y
parvenir, tu devras démarrer un Timer tout juste avant l'affichage de la
fenêtre car cette dernière est modale.

Voici un exemple
'***
' Module1
Option Explicit

Private m_sTitle As String
Private m_lPosX As Long
Private m_lPosY As Long

Private Const MAX_PATH As Long = 260&

Private Const LMEM_FIXED As Long = &H0
Private Const LMEM_ZEROINIT As Long = &H40
Private Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)

Private Const BIF_NEWDIALOGSTYLE As Long = &H40
Private Const BIF_RETURNONLYFSDIRS As Long = &H1

Private Type BROWSEINFO
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

Private Declare Sub CoTaskMemFree _
Lib "ole32.dll" _
( _
ByVal hMem As Long _
)

Private Declare Function SHBrowseForFolder _
Lib "shell32" _
( _
ByRef lpbi As BROWSEINFO _
) As Long

Private Declare Function SHGetPathFromIDList _
Lib "shell32" _
( _
ByVal pidList As Long, _
ByVal lpBuffer As String _
) As Long

Private Declare Sub MoveMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
( _
ByRef pDest As Any, _
ByRef pSource As Any, _
ByVal dwLength As Long _
)

Private Declare Function LocalAlloc _
Lib "kernel32" _
( _
ByVal uFlags As Long, _
ByVal uBytes As Long _
) As Long

Private Declare Function LocalFree _
Lib "kernel32" _
( _
ByVal hMem As Long _
) As Long

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 SetWindowPos _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long

Private Enum COINIT
COINIT_MULTITHREADED = &H0
COINIT_APARTMENTTHREADED = &H2
COINIT_DISABLE_OLE1DDE = &H4
COINIT_SPEED_OVER_MEMORY = &H8
End Enum

Public Function BrowseFolder _
( _
ByRef hWndOwner As Long, _
ByRef sTitle As String, _
ByRef sDefaultFolder As String, _
Optional ByRef lPosX As Long = -1, _
Optional ByRef lPosY As Long = -1 _
) As String

Dim lpIDList As Long
Dim bi As BROWSEINFO
Dim lpDefaultFolder As Long

With bi

.hWndOwner = hWndOwner
.lpszTitle = sTitle
.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE

lpDefaultFolder = LocalAlloc(LPTR, Len(sDefaultFolder))
Call MoveMemory(ByVal lpDefaultFolder, _
ByVal sDefaultFolder, _
Len(sDefaultFolder))
.lParam = lpDefaultFolder

End With

' Vérifie si la position doit être modifié
If m_lPosX <> -1 Or m_lPosY <> -1 Then
' Ici on démarre le timer
m_sTitle = "Browse For Folder"
m_lPosX = lPosX
m_lPosY = lPosY
Call SetTimer(hWndOwner, 0, 50, AddressOf TimerProc)
End If

lpIDList = SHBrowseForFolder(bi)

If lpIDList <> 0 Then
BrowseFolder = String$(MAX_PATH, Chr$(0))
Call SHGetPathFromIDList(lpIDList, BrowseFolder)
Call CoTaskMemFree(lpIDList)
Call LocalFree(lpDefaultFolder)
Call StripNullTerminator(BrowseFolder)
End If

End Function

Private Sub StripNullTerminator(ByRef s As String)
If InStr(1, s, vbNullChar) Then s = Left$(s, InStr(1, s, vbNullChar) -
1)
End Sub

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

Dim hWndBrowser As Long
hWndBrowser = FindWindow("#32770", m_sTitle)
If hWndBrowser > 0 Then
Call SetWindowPos(hWndBrowser, 0, m_lPosX, m_lPosY, 0, 0, 0)
Call KillTimer(hWnd, 0)
End If

End Sub
'***

'***
' Form1
Option Explicit

Private Sub Form_Load()
Call BrowseFolder(Me.hWnd, _
"Choisi un répertoire", _
"C:Program FilesMicrosoft Visual Studio", _
0, _
0)
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"Jessy SEMPERE" wrote in message
news:bji5k6$6md$
Bonjour à tous

Je lance une fenêtre de sélection d'un répertoire en utilisant
l'API : "SHBrowseForFolder"

Comment je peux positionner cette fenêtre où je souhaite
sur l'écran ??

Je suppose qu'il faut utiliser l'API SetWindowPos mais le
problème c'est que je n'ai pas le handle de la fenêtre qui s'ouvre...

Merci à tous
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------




Avatar
François Picalausa
Bonjour/soir,

à la place de cette méthode bricolage, je t'en propose une moins bricolée
mais beaucoup plus complexe à mettre en oeuvre:
La structure BROWSEINFO possède lpfn, indiquant l'<quote>Address of an
application-defined function that the dialog box calls when an event occurs.
For more information, see the BrowseCallbackProc function.</quote>
Cette adresse peut être récupérée depuis VB5, grâce à l'opérateur AddressOf.
La procédure BrowseCallbackProc a un paramètre hwnd indiquant la boite de
dialogue affichée. De plus, elle peux transmettre, via son uMsg,
BFFM_INITIALIZED qui <quote>Indicates the Browse dialog box has finished
initializing</quote>

A partir de là, le setwindowpos pourrait se faire sans problèmes et surtout,
sans risque que deux fenetre soient coonfondues.
Cette technique est évidemment plus complexe à mettre en oeuvre et ne
pardonne pas en cas d'erreur (faute dans le code, appui sur "stop", emploi
de end au mauvais moment - euh.. j'ai dit au mauais moment? mais avec end,
c'est toujours le mauvais moment -, ...)
Il y a peut-être aussi un exemple sur un site ou l'autre?

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"Zoury" a écrit dans le message de
news:%
Salut Jessy! :O)

Tu devras récupèré le handle de la fenêtre avec FindWindow et pour y
parvenir, tu devras démarrer un Timer tout juste avant l'affichage de la
fenêtre car cette dernière est modale.

Voici un exemple
'***
' Module1
Option Explicit

Private m_sTitle As String
Private m_lPosX As Long
Private m_lPosY As Long

Private Const MAX_PATH As Long = 260&

Private Const LMEM_FIXED As Long = &H0
Private Const LMEM_ZEROINIT As Long = &H40
Private Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)

Private Const BIF_NEWDIALOGSTYLE As Long = &H40
Private Const BIF_RETURNONLYFSDIRS As Long = &H1

Private Type BROWSEINFO
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

Private Declare Sub CoTaskMemFree _
Lib "ole32.dll" _
( _
ByVal hMem As Long _
)

Private Declare Function SHBrowseForFolder _
Lib "shell32" _
( _
ByRef lpbi As BROWSEINFO _
) As Long

Private Declare Function SHGetPathFromIDList _
Lib "shell32" _
( _
ByVal pidList As Long, _
ByVal lpBuffer As String _
) As Long

Private Declare Sub MoveMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
( _
ByRef pDest As Any, _
ByRef pSource As Any, _
ByVal dwLength As Long _
)

Private Declare Function LocalAlloc _
Lib "kernel32" _
( _
ByVal uFlags As Long, _
ByVal uBytes As Long _
) As Long

Private Declare Function LocalFree _
Lib "kernel32" _
( _
ByVal hMem As Long _
) As Long

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 SetWindowPos _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long

Private Enum COINIT
COINIT_MULTITHREADED = &H0
COINIT_APARTMENTTHREADED = &H2
COINIT_DISABLE_OLE1DDE = &H4
COINIT_SPEED_OVER_MEMORY = &H8
End Enum

Public Function BrowseFolder _
( _
ByRef hWndOwner As Long, _
ByRef sTitle As String, _
ByRef sDefaultFolder As String, _
Optional ByRef lPosX As Long = -1, _
Optional ByRef lPosY As Long = -1 _
) As String

Dim lpIDList As Long
Dim bi As BROWSEINFO
Dim lpDefaultFolder As Long

With bi

.hWndOwner = hWndOwner
.lpszTitle = sTitle
.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE

lpDefaultFolder = LocalAlloc(LPTR, Len(sDefaultFolder))
Call MoveMemory(ByVal lpDefaultFolder, _
ByVal sDefaultFolder, _
Len(sDefaultFolder))
.lParam = lpDefaultFolder

End With

' Vérifie si la position doit être modifié
If m_lPosX <> -1 Or m_lPosY <> -1 Then
' Ici on démarre le timer
m_sTitle = "Browse For Folder"
m_lPosX = lPosX
m_lPosY = lPosY
Call SetTimer(hWndOwner, 0, 50, AddressOf TimerProc)
End If

lpIDList = SHBrowseForFolder(bi)

If lpIDList <> 0 Then
BrowseFolder = String$(MAX_PATH, Chr$(0))
Call SHGetPathFromIDList(lpIDList, BrowseFolder)
Call CoTaskMemFree(lpIDList)
Call LocalFree(lpDefaultFolder)
Call StripNullTerminator(BrowseFolder)
End If

End Function

Private Sub StripNullTerminator(ByRef s As String)
If InStr(1, s, vbNullChar) Then s = Left$(s, InStr(1, s, vbNullChar) -
1)
End Sub

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

Dim hWndBrowser As Long
hWndBrowser = FindWindow("#32770", m_sTitle)
If hWndBrowser > 0 Then
Call SetWindowPos(hWndBrowser, 0, m_lPosX, m_lPosY, 0, 0, 0)
Call KillTimer(hWnd, 0)
End If

End Sub
'***

'***
' Form1
Option Explicit

Private Sub Form_Load()
Call BrowseFolder(Me.hWnd, _
"Choisi un répertoire", _
"C:Program FilesMicrosoft Visual Studio", _
0, _
0)
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"Jessy SEMPERE" wrote in message
news:bji5k6$6md$
> Bonjour à tous
>
> Je lance une fenêtre de sélection d'un répertoire en utilisant
> l'API : "SHBrowseForFolder"
>
> Comment je peux positionner cette fenêtre où je souhaite
> sur l'écran ??
>
> Je suppose qu'il faut utiliser l'API SetWindowPos mais le
> problème c'est que je n'ai pas le handle de la fenêtre qui s'ouvre...
>
> Merci à tous
> @+
> Jessy Sempere - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://users.skynet.be/mpfa/
> ------------------------------------
>
>




Avatar
Zoury
Salut François! :O)

à la place de cette méthode bricolage, je t'en propose une moins bricolée
mais beaucoup plus complexe à mettre en oeuvre:



boff.. je trouve la méthode précédente pire à comprendre.. ;O)

J'avais testé la méhtode que tu proposes, mais je n'avais pas réussi le
premier car j'utilisais FindWindow() pour trouvé le hWnd dans le Callback
mais étant donné que la fenêtre n'existe pas encore à ce moment la valeur de
retour était de 0 et ça ne fonctionnait pas. Je n'avais pas remarqué que le
hWnd de la fenêtre nous était fournit dans les paramètres.. :OP

Voici donc l'exemple employant le Callback (le code de form1 est identique)
'***
' Module1
Option Explicit

Private m_lPosX As Long
Private m_lPosY As Long

Private Const SWP_NOSIZE As Long = &H1

Private Const MAX_PATH As Long = 260&

Private Const LMEM_FIXED As Long = &H0
Private Const LMEM_ZEROINIT As Long = &H40
Private Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)

Private Const BIF_NEWDIALOGSTYLE As Long = &H40
Private Const BIF_RETURNONLYFSDIRS As Long = &H1

Private Const BFFM_INITIALIZED As Long = 1

Private Type BROWSEINFO
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

Private Declare Sub CoTaskMemFree _
Lib "ole32.dll" _
( _
ByVal hMem As Long _
)

Private Declare Function SHBrowseForFolder _
Lib "shell32" _
( _
ByRef lpbi As BROWSEINFO _
) As Long

Private Declare Function SHGetPathFromIDList _
Lib "shell32" _
( _
ByVal pidList As Long, _
ByVal lpBuffer As String _
) As Long

Private Declare Sub MoveMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" _
( _
ByRef pDest As Any, _
ByRef pSource As Any, _
ByVal dwLength As Long _
)

Private Declare Function LocalAlloc _
Lib "kernel32" _
( _
ByVal uFlags As Long, _
ByVal uBytes As Long _
) As Long

Private Declare Function LocalFree _
Lib "kernel32" _
( _
ByVal hMem As Long _
) As Long

Private Declare Function SetWindowPos _
Lib "user32" _
( _
ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long _
) As Long

Private Enum COINIT
COINIT_MULTITHREADED = &H0
COINIT_APARTMENTTHREADED = &H2
COINIT_DISABLE_OLE1DDE = &H4
COINIT_SPEED_OVER_MEMORY = &H8
End Enum

Private Function BrowseCallbackProc _
( _
ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal lParam As Long, _
ByVal lpData As Long _
) As Long
If uMsg = BFFM_INITIALIZED And (m_lPosX <> -1 Or m_lPosY <> -1) Then
Call SetWindowPos(hWnd, 0, m_lPosX, m_lPosY, 0, 0, SWP_NOSIZE)
End If
End Function

Public Function BrowseFolder _
( _
ByRef hWndOwner As Long, _
ByRef sTitle As String, _
ByRef sDefaultFolder As String, _
Optional ByRef lPosX As Long = -1, _
Optional ByRef lPosY As Long = -1 _
) As String

Dim lpIDList As Long
Dim bi As BROWSEINFO
Dim lpDefaultFolder As Long

m_lPosX = lPosX
m_lPosY = lPosY

With bi

.hWndOwner = hWndOwner
.lpszTitle = sTitle
.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_NEWDIALOGSTYLE
.lpfnCallback = FARPROC(AddressOf BrowseCallbackProc)

lpDefaultFolder = LocalAlloc(LPTR, Len(sDefaultFolder))
Call MoveMemory(ByVal lpDefaultFolder, _
ByVal sDefaultFolder, _
Len(sDefaultFolder))
.lParam = lpDefaultFolder

End With

lpIDList = SHBrowseForFolder(bi)

If lpIDList <> 0 Then
BrowseFolder = String$(MAX_PATH, Chr$(0))
Call SHGetPathFromIDList(lpIDList, BrowseFolder)
Call CoTaskMemFree(lpIDList)
Call LocalFree(lpDefaultFolder)
Call StripNullTerminator(BrowseFolder)
End If

End Function

Private Function FARPROC(ByRef lp As Long) As Long
FARPROC = lp
End Function

Private Sub StripNullTerminator(ByRef s As String)
If InStr(1, s, vbNullChar) Then s = Left$(s, InStr(1, s, vbNullChar) -
1)
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
Jessy SEMPERE
Bonjour et tout d'abord merci à tous les 2 ;-)

J'ai quelques problème à mettre en pratique donc du coup j'ai
2 - 3 questions :

1°) dans la fonction "BrowseCallbackProc" on vérifie la valeur
de la variable uMsg, mais ce que je ne comprends pas c'est qu'à
aucun moment on la renseigne...

2°) dans la fonction "BrowseFolder" à un moment on définie une
propriété de la boîte de dialogue qui doit s'ouvrir.
.lpfnCallback = FARPROC(AddressOf BrowseCallbackProc)
donc en fait le problème c'est que je suis sous Access97 et il
ne reconnaît pas la fonction "AddressOf", je suppose que c'est une
fonction spécifique de VB... du coup quelle est mon altenative ???

3°) à quoi correspond et surtout à quoi servent ces 3 fonctions :
Call CoTaskMemFree(lpIDList)
Call LocalFree(lpDefaultFolder)
Call StripNullTerminator(BrowseFolder)

Merci dans tous les 2
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
Avatar
Jean Yves SÉVENO
Bonjour,

La mauvaise nouvelle : Office 97 ne supporte pas l'opérateur AddressOf (et
il ne fonctionne même pas correctement sous Office 2000).

La bonne nouvelle : d'éminents spécialistes ont trouvé un contournement.

Rends toi à l'adresse suivante et télécharge un fichier nommé
BrowseForFolder.

http://www.bmsltd.co.uk/MVP/Default.htm

Il s'agit d'un fichier Excel mais le code VBA qu'il contient fonctionnera
tout aussi bien sous Access.

Cordialement.

Jean Yves


"Jessy SEMPERE" a écrit dans le message de
news:bjjuo0$v2m$
Bonjour et tout d'abord merci à tous les 2 ;-)

J'ai quelques problème à mettre en pratique donc du coup j'ai
2 - 3 questions :

1°) dans la fonction "BrowseCallbackProc" on vérifie la valeur
de la variable uMsg, mais ce que je ne comprends pas c'est qu'à
aucun moment on la renseigne...

2°) dans la fonction "BrowseFolder" à un moment on définie une
propriété de la boîte de dialogue qui doit s'ouvrir.
.lpfnCallback = FARPROC(AddressOf BrowseCallbackProc)
donc en fait le problème c'est que je suis sous Access97 et il
ne reconnaît pas la fonction "AddressOf", je suppose que c'est une
fonction spécifique de VB... du coup quelle est mon altenative ???

3°) à quoi correspond et surtout à quoi servent ces 3 fonctions :
Call CoTaskMemFree(lpIDList)
Call LocalFree(lpDefaultFolder)
Call StripNullTerminator(BrowseFolder)

Merci dans tous les 2
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------




Avatar
Jessy SEMPERE
Bonjour et merci

ben je suis preneur mais le problème est que je ne dispose
pas d'accès internet là où je me trouve... snif snif ;-)

donc si tu peux me le faire suivre en boîte perso ce serait
vraiment sympa... ()

merci d'avance

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jean Yves SÉVENO" a écrit dans le message news:
3f5da309$0$20167$
Bonjour,

La mauvaise nouvelle : Office 97 ne supporte pas l'opérateur AddressOf (et
il ne fonctionne même pas correctement sous Office 2000).

La bonne nouvelle : d'éminents spécialistes ont trouvé un contournement.

Rends toi à l'adresse suivante et télécharge un fichier nommé
BrowseForFolder.

http://www.bmsltd.co.uk/MVP/Default.htm

Il s'agit d'un fichier Excel mais le code VBA qu'il contient fonctionnera
tout aussi bien sous Access.

Cordialement.

Jean Yves


Avatar
Jean Yves SÉVENO
C'est fait.

Jean Yves


"Jessy SEMPERE" a écrit dans le message de
news:bjk84h$4on$
Bonjour et merci

ben je suis preneur mais le problème est que je ne dispose
pas d'accès internet là où je me trouve... snif snif ;-)

donc si tu peux me le faire suivre en boîte perso ce serait
vraiment sympa... ()

merci d'avance

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jean Yves SÉVENO" a écrit dans le message


news:
3f5da309$0$20167$
> Bonjour,
>
> La mauvaise nouvelle : Office 97 ne supporte pas l'opérateur AddressOf


(et
> il ne fonctionne même pas correctement sous Office 2000).
>
> La bonne nouvelle : d'éminents spécialistes ont trouvé un contournement.
>
> Rends toi à l'adresse suivante et télécharge un fichier nommé
> BrowseForFolder.
>
> http://www.bmsltd.co.uk/MVP/Default.htm
>
> Il s'agit d'un fichier Excel mais le code VBA qu'il contient


fonctionnera
> tout aussi bien sous Access.
>
> Cordialement.
>
> Jean Yves




Avatar
Zoury
Salut Jean-Yves! :O)

Merci pour l'info. ;O)


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"Jean Yves SÉVENO" wrote in message
news:3f5da309$0$20167$
Bonjour,

La mauvaise nouvelle : Office 97 ne supporte pas l'opérateur AddressOf (et
il ne fonctionne même pas correctement sous Office 2000).

La bonne nouvelle : d'éminents spécialistes ont trouvé un contournement.

Rends toi à l'adresse suivante et télécharge un fichier nommé
BrowseForFolder.

http://www.bmsltd.co.uk/MVP/Default.htm

Il s'agit d'un fichier Excel mais le code VBA qu'il contient fonctionnera
tout aussi bien sous Access.

Cordialement.

Jean Yves


"Jessy SEMPERE" a écrit dans le message de
news:bjjuo0$v2m$
> Bonjour et tout d'abord merci à tous les 2 ;-)
>
> J'ai quelques problème à mettre en pratique donc du coup j'ai
> 2 - 3 questions :
>
> 1°) dans la fonction "BrowseCallbackProc" on vérifie la valeur
> de la variable uMsg, mais ce que je ne comprends pas c'est qu'à
> aucun moment on la renseigne...
>
> 2°) dans la fonction "BrowseFolder" à un moment on définie une
> propriété de la boîte de dialogue qui doit s'ouvrir.
> .lpfnCallback = FARPROC(AddressOf BrowseCallbackProc)
> donc en fait le problème c'est que je suis sous Access97 et il
> ne reconnaît pas la fonction "AddressOf", je suppose que c'est une
> fonction spécifique de VB... du coup quelle est mon altenative ???
>
> 3°) à quoi correspond et surtout à quoi servent ces 3 fonctions :
> Call CoTaskMemFree(lpIDList)
> Call LocalFree(lpDefaultFolder)
> Call StripNullTerminator(BrowseFolder)
>
> Merci dans tous les 2
> @+
> Jessy Sempere - Access MVP
>
> ------------------------------------
> Site @ccess : http://access.jessy.free.fr/
> Pour l'efficacité de tous :
> http://users.skynet.be/mpfa/
> ------------------------------------
>
>




Avatar
Hubert Canevet
Pour l'emploi d'AddressOf sous Access 97, on pourra aussi
être intéressé par les pages suivantes :
http://dbforums.com/archives/t60536.html
http://www.mvps.org/accessfr/apis/api0031.htm



Je ne sais plus où exactement, mais un exemple est publié
quelque part qui permet de colorier un contrôle
différemment d'un enregistrement à l'autre, selon la
valeur d'un champ dans l'enregistrement.

Comme je l'avais essayé je devrais pouvoir retrouver une
copie.

Sous Access 95 pas question, mais en 97 impec.
Avatar
Jessy SEMPERE
Salut Hubert

Oui j'ai MSDN mais chez moi, malheureusement je ne l'ai
pas où je me trouve la journée
(donc quand j'en ai réellement besoin... ;-))

Bon je vais essayer de me pencher dessus chez moi
surtout si ça peut m'apporter plus d'informations qui
seront sommes toutes bien venue je pense...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Hubert Canevet" a écrit dans le message news:
55d501c376dc$290482b0$
Salut Jessy,

As-tu MSDN sous la main ?
Il y a quelque chose sur la question, là-dedans.
Ce serait bien d'avoir tes réactions là-dessus avant de
dire autre chose.

-----Message d'origine-----
Mais j'ai quand même une question technique :
A quoi sert AddressOf ???
En fait bon dans le fichier j'ai bien l'équivalent pour


Access97
et ça fonctionne très bien mais je ne comprends pas du


tout
à quoi ça sert exactement.


1 2