OVH Cloud OVH Cloud

Filebox et subclassing

9 réponses
Avatar
Phil
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre de
m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?

Merci de votre aide

Phil

9 réponses

Avatar
Jacques
Bonjour,

Le message LB_SETHORIZONTALEXTENT indique le nombre de pixel dont on se
déplace horizontalement, quand il y a une ScrollBar horizontale. Ceci
suppose qu'elle existe.

http://minilien.com/?oEWOMDuD2X

Pour forcer l'affichage d'une ScrollBar Horizontale :
-------------------------------------------------------

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal
dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_HSCROLL = &H100000

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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_DRAWFRAME = &H20


Private Sub Form_Load()
Dim lResult As Long

lResult = GetWindowLong(Me.File1.hWnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hWnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hWnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER

' L'appel à SetWindowPos force la prise en compte du changement
de style de la fenêtre
End Sub
-----------------------------------------------------------------------

Cela fonctionne pour une FileListBox autant que pour une ListBox



Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre de
m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?

Merci de votre aide

Phil






--
Cordialement,

Jacques.
Avatar
Jacques
Bonjour,

Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre de
m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?



Pas foncièrement différent, si tu envoie le mesagge

Chemin = "C:Windows*.*" & Chr$(0)
SendMessage Me.List1.hwnd, LB_DIR, 0&, ByVal Chemin

à une ListBox, elle commence à resembler à une FileListBox


--
Cordialement,

Jacques.
Avatar
Phil
Impeccable !

Merci Jacques pour ces précisions...Cà fera nettement plus propre (-;

A charge de revanche

Phil

"Jacques" a écrit dans le message de
news: %
Bonjour,

Le message LB_SETHORIZONTALEXTENT indique le nombre de pixel dont on se
déplace horizontalement, quand il y a une ScrollBar horizontale. Ceci
suppose qu'elle existe.

http://minilien.com/?oEWOMDuD2X

Pour forcer l'affichage d'une ScrollBar Horizontale :
-------------------------------------------------------

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Private Const GWL_STYLE = (-16)
Private Const WS_HSCROLL = &H100000

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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_DRAWFRAME = &H20


Private Sub Form_Load()
Dim lResult As Long

lResult = GetWindowLong(Me.File1.hWnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hWnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hWnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER

' L'appel à SetWindowPos force la prise en compte du changement
de style de la fenêtre
End Sub
-----------------------------------------------------------------------

Cela fonctionne pour une FileListBox autant que pour une ListBox



Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre
de m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?

Merci de votre aide

Phil




--
Cordialement,

Jacques.


Avatar
Phil
Pas mal non plus !

Phil
"Jacques" a écrit dans le message de
news:
Bonjour,

Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre
de m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?



Pas foncièrement différent, si tu envoie le mesagge

Chemin = "C:Windows*.*" & Chr$(0)
SendMessage Me.List1.hwnd, LB_DIR, 0&, ByVal Chemin

à une ListBox, elle commence à resembler à une FileListBox


--
Cordialement,

Jacques.


Avatar
Phil
Problème, néanmoins...Comment répondre au scr
"Jacques" a écrit dans le message de
news: %
Bonjour,

Le message LB_SETHORIZONTALEXTENT indique le nombre de pixel dont on se
déplace horizontalement, quand il y a une ScrollBar horizontale. Ceci
suppose qu'elle existe.

http://minilien.com/?oEWOMDuD2X

Pour forcer l'affichage d'une ScrollBar Horizontale :
-------------------------------------------------------

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Private Const GWL_STYLE = (-16)
Private Const WS_HSCROLL = &H100000

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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_DRAWFRAME = &H20


Private Sub Form_Load()
Dim lResult As Long

lResult = GetWindowLong(Me.File1.hWnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hWnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hWnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER

' L'appel à SetWindowPos force la prise en compte du changement
de style de la fenêtre
End Sub
-----------------------------------------------------------------------

Cela fonctionne pour une FileListBox autant que pour une ListBox



Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre
de m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?

Merci de votre aide

Phil




--
Cordialement,

Jacques.


Avatar
Phil
Pardon...Cliqué trop vite...Je disais: comment répondre au scroll de cette
barre ? En créant une windowproc ?

Phil

"Jacques" a écrit dans le message de
news: %
Bonjour,

Le message LB_SETHORIZONTALEXTENT indique le nombre de pixel dont on se
déplace horizontalement, quand il y a une ScrollBar horizontale. Ceci
suppose qu'elle existe.

http://minilien.com/?oEWOMDuD2X

Pour forcer l'affichage d'une ScrollBar Horizontale :
-------------------------------------------------------

Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA"
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Private Const GWL_STYLE = (-16)
Private Const WS_HSCROLL = &H100000

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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOZORDER = &H4
Private Const SWP_DRAWFRAME = &H20


Private Sub Form_Load()
Dim lResult As Long

lResult = GetWindowLong(Me.File1.hWnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hWnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hWnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER

' L'appel à SetWindowPos force la prise en compte du changement
de style de la fenêtre
End Sub
-----------------------------------------------------------------------

Cela fonctionne pour une FileListBox autant que pour une ListBox



Phil wrote:
Hello,

J'essaie actuellement de sous-classer une filebox pour lui faire admettre
de m'afficher une scrollbar horizontale en essayant de lui envoyer un
LB_SETHORIZONTALEXTENT comme à une listbox...Sans résultats...Est-ce que
c'est idiot ou est-ce que la Filebox est foncièrement différente de la
Listbox ?

Merci de votre aide

Phil




--
Cordialement,

Jacques.


Avatar
Jacques
Bonjour
Phil wrote:
Pardon...Cliqué trop vite...Je disais: comment répondre au scroll de cette
barre ? En créant une windowproc ?



Oui, et c'est la que ça se complique :

http://minilien.com/?9fsqMMEThT


Quel est l'objectif que tu recherches, il y a peut être plus simple.

--
Cordialement,

Jacques.
Avatar
Jacques
Jacques wrote:
Bonjour
Phil wrote:

Pardon...Cliqué trop vite...Je disais: comment répondre au scroll de
cette barre ? En créant une windowproc ?




Oui, et c'est la que ça se complique :

http://minilien.com/?9fsqMMEThT


Quel est l'objectif que tu recherches, il y a peut être plus simple.



Répondu trop vite, avec :
----------------------------------------------------------
lResult = GetWindowLong(Me.File1.hwnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hwnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hwnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER
hScrollValue = 1000
SendMessage Me.File1.hwnd, LB_SETHORIZONTALEXTENT, hScrollValue, 0&
---------------------------------------------------------------------

ça roule, reste à déterminer la valeur de hScrollValue en fonction de la
largeur du FileListBox et de ses éléments. Une piste :

http://msdn.microsoft.com/msdnmag/issues/1200/combo/default.aspx

Bon courage.
--
Cordialement,

Jacques.
Avatar
Phil
Jacques a écrit :
Jacques wrote:

Bonjour
Phil wrote:

Pardon...Cliqué trop vite...Je disais: comment répondre au scroll de
cette barre ? En créant une windowproc ?





Oui, et c'est la que ça se complique :

http://minilien.com/?9fsqMMEThT


Quel est l'objectif que tu recherches, il y a peut être plus simple.




Répondu trop vite, avec :
----------------------------------------------------------
lResult = GetWindowLong(Me.File1.hwnd, GWL_STYLE)
lResult = lResult Or WS_HSCROLL
SetWindowLong Me.File1.hwnd, GWL_STYLE, lResult
SetWindowPos Me.File1.hwnd, 0, 0, 0, 0, 0, SWP_DRAWFRAME _
Or SWP_NOMOVE _
Or SWP_NOSIZE _
Or SWP_NOZORDER
hScrollValue = 1000
SendMessage Me.File1.hwnd, LB_SETHORIZONTALEXTENT, hScrollValue, 0&
---------------------------------------------------------------------

ça roule, reste à déterminer la valeur de hScrollValue en fonction de la
largeur du FileListBox et de ses éléments. Une piste :

http://msdn.microsoft.com/msdnmag/issues/1200/combo/default.aspx

Bon courage.


Jacques,

En fait, je vais te dire : j'ai gaedé ma filebox en visibleúlse,
ajouté une listbox à laquelle j'ai ajouté le lb_sethorizontalextent et
le tour est joué...

C'est moins élégant, mais çà marche...
Je garde quand même ton conseil...Je vais tester çà.

Phil