Pour améliorer la présentation des données (image, texte avec mise en
forme...), je me suis lancé dans la création d'un ActiveX (première fois)
représentant un combo image. Les débuts sont bons mais j'ai un gros soucis
dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je clic à
l'extérieur du combo que la liste disparait.
Pourriez vous m'aider????
Ci joint le projet à ce lien http://cjoint.com/?mslXdKN7uL
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc
"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de news:do3f54$ced$
Bonjour
Pour améliorer la présentation des données (image, texte avec mise en forme...), je me suis lancé dans la création d'un ActiveX (première
fois)
représentant un combo image. Les débuts sont bons mais j'ai un gros
soucis
dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je
clic à
l'extérieur du combo que la liste disparait. Pourriez vous m'aider????
Ci joint le projet à ce lien http://cjoint.com/?mslXdKN7uL
Hello,
Ton projet ne se charge pas (aucun des vbp). C'est parce que tu as sauvé tes fichiers avec des path relatifs spécifiques à ton environnement. Voici un extrait d'un des .vbp:
Ca oblige donc pour pouvoir charger tes projets de reconstruire une arborescence identique à celle que tu utilises.
Peux tu reconstruire un projet clean?
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de
news:do3f54$ced$1@apollon.grec.isp.9tel.net...
Bonjour
Pour améliorer la présentation des données (image, texte avec mise en
forme...), je me suis lancé dans la création d'un ActiveX (première
fois)
représentant un combo image. Les débuts sont bons mais j'ai un gros
soucis
dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je
clic à
l'extérieur du combo que la liste disparait.
Pourriez vous m'aider????
Ci joint le projet à ce lien http://cjoint.com/?mslXdKN7uL
Hello,
Ton projet ne se charge pas (aucun des vbp).
C'est parce que tu as sauvé tes fichiers avec
des path relatifs spécifiques à ton environnement.
Voici un extrait d'un des .vbp:
Ca oblige donc pour pouvoir charger tes projets de reconstruire
une arborescence identique à celle que tu utilises.
Peux tu reconstruire un projet clean?
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
"TouTi" <gelapplication[Nospam]@tiscali.fr> a écrit dans le message de news:do3f54$ced$
Bonjour
Pour améliorer la présentation des données (image, texte avec mise en forme...), je me suis lancé dans la création d'un ActiveX (première
fois)
représentant un combo image. Les débuts sont bons mais j'ai un gros
soucis
dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je
clic à
l'extérieur du combo que la liste disparait. Pourriez vous m'aider????
Ci joint le projet à ce lien http://cjoint.com/?mslXdKN7uL
Hello,
Ton projet ne se charge pas (aucun des vbp). C'est parce que tu as sauvé tes fichiers avec des path relatifs spécifiques à ton environnement. Voici un extrait d'un des .vbp:
Ca oblige donc pour pouvoir charger tes projets de reconstruire une arborescence identique à celle que tu utilises.
Peux tu reconstruire un projet clean?
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
Jacques93
Bonjour Touti, TouTi a écrit :
Bonjour
Pour améliorer la présentation des données (image, texte avec mise en forme...), je me suis lancé dans la création d'un ActiveX (première fois) représentant un combo image. Les débuts sont bons mais j'ai un gros soucis dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je clic à l'extérieur du combo que la liste disparait.
Pour cela, il faut "sous-classer" les messsages de ta fenêtre et intercepter le message WM_NCACTIVATE (Non Client Activate). Dans le code de ta feuille 'view' du composant ocx, tu ajoutes :
Private Sub Form_Load() HookWndProc Me.Hwnd End Sub
Private Sub Form_Unload(Cancel As Integer) UnHookWndProc Me.Hwnd End Sub
Ensuite, tu ajoutes un module à ton composant, et tu y colles le code :
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_WNDPROC = (-4)
Private Declare Function CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Const WM_NCACTIVATE = &H86
Private lpfnOld As Long
Public Sub HookWndProc (hWnd as Long) lpfnOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub
Public Sub UnHookWndProc(hWnd as Long) SetWindowLong hWnd, GWL_WNDPROC, lpfnOld End Sub
Public Function WindowProc(ByVal hWnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Select Case uMsg Case WM_NCACTIVATE If wParam = 0 Then view.Hide End If End Select WindowProc = CallWindowProc(lpfnOld, hWnd, uMsg, wParam, lParam) End Function ' ---------------------------------------------------------------------
ATTENTION : lorsqu'on sous classe les messages, il est d'une part impossible de mettre des points d'arrêt, de tracer le code, et en cas d'erreur => gros plantage de l'IDE VB. Deux solutions :
- Tu ne mets le hook en place que lorsque tout le reste est bon - Tu utilises la dll 'DbgWProc.dll' (Debug Object for AddressOf Subclassing), téléchargeable ici :
avec un exemple de mise en oeuvre (Procèdure 'SubClass' dans cSubClass.cls, avec constante de compilation conditionnelle DEBUGWINDOWPROC)
PS : Comme l'a fait remarquer Jean-Marc, essaie de faire des projets portables d'une machine à l'autre. Deux autres conseils, si je puis me permettre :
Ajoute 'Option Explicit' en début de code, cela force la déclaration des variables. Et peux se faire automatiquement :
les 3 sont de type Variant, ce qui n'est pas la meilleure des choses.
Bon courage ;-)
-- Cordialement,
Jacques.
Bonjour Touti,
TouTi a écrit :
Bonjour
Pour améliorer la présentation des données (image, texte avec mise en
forme...), je me suis lancé dans la création d'un ActiveX (première fois)
représentant un combo image. Les débuts sont bons mais j'ai un gros soucis
dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je clic à
l'extérieur du combo que la liste disparait.
Pour cela, il faut "sous-classer" les messsages de ta fenêtre et
intercepter le message WM_NCACTIVATE (Non Client Activate). Dans le code
de ta feuille 'view' du composant ocx, tu ajoutes :
Private Sub Form_Load()
HookWndProc Me.Hwnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookWndProc Me.Hwnd
End Sub
Ensuite, tu ajoutes un module à ton composant, et tu y colles le code :
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_WNDPROC = (-4)
Private Declare Function CallWindowProc Lib "user32" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_NCACTIVATE = &H86
Private lpfnOld As Long
Public Sub HookWndProc (hWnd as Long)
lpfnOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookWndProc(hWnd as Long)
SetWindowLong hWnd, GWL_WNDPROC, lpfnOld
End Sub
Public Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case uMsg
Case WM_NCACTIVATE
If wParam = 0 Then
view.Hide
End If
End Select
WindowProc = CallWindowProc(lpfnOld, hWnd, uMsg, wParam, lParam)
End Function
' ---------------------------------------------------------------------
ATTENTION : lorsqu'on sous classe les messages, il est d'une part
impossible de mettre des points d'arrêt, de tracer le code, et en cas
d'erreur => gros plantage de l'IDE VB. Deux solutions :
- Tu ne mets le hook en place que lorsque tout le reste est bon
- Tu utilises la dll 'DbgWProc.dll' (Debug Object for AddressOf
Subclassing), téléchargeable ici :
avec un exemple de mise en oeuvre (Procèdure 'SubClass' dans
cSubClass.cls, avec constante de compilation conditionnelle DEBUGWINDOWPROC)
PS : Comme l'a fait remarquer Jean-Marc, essaie de faire des projets
portables d'une machine à l'autre. Deux autres conseils, si je puis me
permettre :
Ajoute 'Option Explicit' en début de code, cela force la déclaration
des variables. Et peux se faire automatiquement :
Pour améliorer la présentation des données (image, texte avec mise en forme...), je me suis lancé dans la création d'un ActiveX (première fois) représentant un combo image. Les débuts sont bons mais j'ai un gros soucis dans la fermeture (hide ou unload) de la liste. J'aimerai lorsque je clic à l'extérieur du combo que la liste disparait.
Pour cela, il faut "sous-classer" les messsages de ta fenêtre et intercepter le message WM_NCACTIVATE (Non Client Activate). Dans le code de ta feuille 'view' du composant ocx, tu ajoutes :
Private Sub Form_Load() HookWndProc Me.Hwnd End Sub
Private Sub Form_Unload(Cancel As Integer) UnHookWndProc Me.Hwnd End Sub
Ensuite, tu ajoutes un module à ton composant, et tu y colles le code :
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_WNDPROC = (-4)
Private Declare Function CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _ ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private Const WM_NCACTIVATE = &H86
Private lpfnOld As Long
Public Sub HookWndProc (hWnd as Long) lpfnOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub
Public Sub UnHookWndProc(hWnd as Long) SetWindowLong hWnd, GWL_WNDPROC, lpfnOld End Sub
Public Function WindowProc(ByVal hWnd As Long, _ ByVal uMsg As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Select Case uMsg Case WM_NCACTIVATE If wParam = 0 Then view.Hide End If End Select WindowProc = CallWindowProc(lpfnOld, hWnd, uMsg, wParam, lParam) End Function ' ---------------------------------------------------------------------
ATTENTION : lorsqu'on sous classe les messages, il est d'une part impossible de mettre des points d'arrêt, de tracer le code, et en cas d'erreur => gros plantage de l'IDE VB. Deux solutions :
- Tu ne mets le hook en place que lorsque tout le reste est bon - Tu utilises la dll 'DbgWProc.dll' (Debug Object for AddressOf Subclassing), téléchargeable ici :
avec un exemple de mise en oeuvre (Procèdure 'SubClass' dans cSubClass.cls, avec constante de compilation conditionnelle DEBUGWINDOWPROC)
PS : Comme l'a fait remarquer Jean-Marc, essaie de faire des projets portables d'une machine à l'autre. Deux autres conseils, si je puis me permettre :
Ajoute 'Option Explicit' en début de code, cela force la déclaration des variables. Et peux se faire automatiquement :
les 3 sont de type Variant, ce qui n'est pas la meilleure des choses.
Hello,
Je rebondis sur ce que disait Jacques sur la déclaration des variables, et en particulier des choses comme Dim i, j, k
Le petit exemple suivant est un grand classique et la question est très souvent posée ici:
' 8<---------------------------------- ' CODE VOLONTAIREMENT ERRONE ' Private Sub Command1_Click() Dim i, j As Integer
i = 3 / 2 j = 3 / 2
If i = j Then MsgBox "ouf, ils sont égaux!" Else MsgBox "Je ne comprend rien, ils ne sont pas égaux :-((((" End If End Sub ' 8<----------------------------------
Dans ce cas, i et j ne sont pas des entiers. La variable i est ici un variant et c'est une grande source d'erreurs.
La syntaxe correcte est bien sur:
Dim i As Integer Dim j As Integer ou Dim i As Integer, j As Integer
Il faudrait peut être ajouter un petit mot à ce sujet dans la FAQ.
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
"Jacques93" <jacques@Nospam> a écrit dans le message de
news:%23F$tu$%23AGHA.1216@TK2MSFTNGP14.phx.gbl...
les 3 sont de type Variant, ce qui n'est pas la meilleure des choses.
Hello,
Je rebondis sur ce que disait Jacques sur la déclaration
des variables, et en particulier des choses comme
Dim i, j, k
Le petit exemple suivant est un grand classique et la
question est très souvent posée ici:
' 8<----------------------------------
' CODE VOLONTAIREMENT ERRONE
'
Private Sub Command1_Click()
Dim i, j As Integer
i = 3 / 2
j = 3 / 2
If i = j Then
MsgBox "ouf, ils sont égaux!"
Else
MsgBox "Je ne comprend rien, ils ne sont pas égaux :-(((("
End If
End Sub
' 8<----------------------------------
Dans ce cas, i et j ne sont pas des entiers. La variable i est ici
un variant et c'est une grande source d'erreurs.
La syntaxe correcte est bien sur:
Dim i As Integer
Dim j As Integer
ou
Dim i As Integer, j As Integer
Il faudrait peut être ajouter un petit mot à ce sujet dans la FAQ.
--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
les 3 sont de type Variant, ce qui n'est pas la meilleure des choses.
Hello,
Je rebondis sur ce que disait Jacques sur la déclaration des variables, et en particulier des choses comme Dim i, j, k
Le petit exemple suivant est un grand classique et la question est très souvent posée ici:
' 8<---------------------------------- ' CODE VOLONTAIREMENT ERRONE ' Private Sub Command1_Click() Dim i, j As Integer
i = 3 / 2 j = 3 / 2
If i = j Then MsgBox "ouf, ils sont égaux!" Else MsgBox "Je ne comprend rien, ils ne sont pas égaux :-((((" End If End Sub ' 8<----------------------------------
Dans ce cas, i et j ne sont pas des entiers. La variable i est ici un variant et c'est une grande source d'erreurs.
La syntaxe correcte est bien sur:
Dim i As Integer Dim j As Integer ou Dim i As Integer, j As Integer
Il faudrait peut être ajouter un petit mot à ce sujet dans la FAQ.
-- Jean-marc Tester mon serveur (VB6) => http://myjmnhome.dyndns.org "There are only 10 kind of people those who understand binary and those who don't." mailto: remove '_no_spam_' ;
TouTi
Jacques et Jean marc
Effectivement, j'ai travaillé sur ce projet que j'ai récupéré sur le net... Je ne me suis occupé que de la partie affichage des images.. mais je vous remercie de vos remarques et de votre aide si précieuse...
TouTi
Jacques et Jean marc
Effectivement, j'ai travaillé sur ce projet que j'ai récupéré sur le net...
Je ne me suis occupé que de la partie affichage des images.. mais je vous
remercie de vos remarques et de votre aide si précieuse...
Effectivement, j'ai travaillé sur ce projet que j'ai récupéré sur le net... Je ne me suis occupé que de la partie affichage des images.. mais je vous remercie de vos remarques et de votre aide si précieuse...