OVH Cloud OVH Cloud

Clic sur Node

4 réponses
Avatar
Jérôme Prioux
Mon application comporte entre autres une barre d'outils avec un bouton
Loupe et un TreeView.
Lorsque l'on enfonce le bouton Loupe (tbPressed) et qu'on survole le
TreeView avec la souris, le pointeur se transforme en loupe (jusque là,
c'est OK).
Lorsqu'on clique, avec ce pointeur, sur le TreeView avec le bouton gauche,
on augmente la taille de la police, avec le droit, on la diminue.
Le problème, c'est que lorsqu'on clique n'importe où dans le contrôle, ça
peut être sur un noeud. Et là, le contrôle développe l'arborescence sans
qu'on lui demande.
Y a-t-il moyen d'éviter ça ?
J'ai essayé de mettre la propriété Enabled à False lorsque le bouton est
enfoncé mais dans ce cas, le pointeur de la souris reste le pointeur par
défaut.
--
________________________
Jérôme Prioux
jerome.prioux@free.fr
.

4 réponses

Avatar
François Picalausa
Bonjour/soir,

Une solution serait de faire ignorer les messages WM_LBUTTONDOWN,
WM_LBUTTONUP et WM_LBUTTONDBLCLK (et les mêmes avec R pour le boutton droit)
au treeview.

voici un exemple utilisant mon composant (bientôt disponible) de sous
classement pour te donner une idée de comment faire:
Option Explicit

Private WithEvents Subclassing As SubclassIt.Subclassing
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203

'Stoque la taille approximative actuelle
Private NRS As Long

Private Sub Command1_Click()
If TreeView1.MousePointer = ccCustom Then
TreeView1.MousePointer = ccArrow
Else
TreeView1.MousePointer = ccCustom
End If
End Sub

Private Sub Form_Load()
TreeView1.Nodes.Add , , , "Test"
TreeView1.Nodes.Add , , , "Test2"
TreeView1.Nodes.Add , , , "Test3"

Set Subclassing = New SubclassIt.Subclassing
Subclassing.SubClass TreeView1.hWnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
Subclassing.Unsubclass
Set Subclassing = Nothing
End Sub

Private Sub Subclassing_Message(ByVal hWnd As Long, ByVal Msg As Long, ByVal
wParam As Long, ByVal lParam As Long, SetNewValue As Boolean, NewValue As
Long)
Select Case hWnd
Case TreeView1.hWnd 'Pour le treeview uniquement
Select Case Msg
Case WM_LBUTTONDOWN
If TreeView1.MousePointer = ccCustom Then
SetNewValue = True 'On redéfinit la valeur retournée
NewValue = 0 'Elle sera de 0 (message traité avec
succès, ici)
NRS = NRS + 3
TreeView1.Font.Size = NRS
End If
Case WM_LBUTTONUP, WM_LBUTTONDBLCLK
If TreeView1.MousePointer = ccCustom Then
SetNewValue = True
NewValue = 0
End If
End Select
End Select
End Sub

Tu trouvera un exemple de sous classement sans composant sur la faq:
http://faq.vb.free.fr/index.php?question€

Tu trouveras d'autres composants de sous classement sur le web, notament sur
www.vbaccelerator.com

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


"Jérôme Prioux" a écrit dans le message de
news:3f34e70a$0$27049$
Mon application comporte entre autres une barre d'outils avec un
bouton Loupe et un TreeView.
Lorsque l'on enfonce le bouton Loupe (tbPressed) et qu'on survole le
TreeView avec la souris, le pointeur se transforme en loupe (jusque
là, c'est OK).
Lorsqu'on clique, avec ce pointeur, sur le TreeView avec le bouton
gauche, on augmente la taille de la police, avec le droit, on la
diminue.
Le problème, c'est que lorsqu'on clique n'importe où dans le
contrôle, ça peut être sur un noeud. Et là, le contrôle développe
l'arborescence sans qu'on lui demande.
Y a-t-il moyen d'éviter ça ?
J'ai essayé de mettre la propriété Enabled à False lorsque le bouton
est enfoncé mais dans ce cas, le pointeur de la souris reste le
pointeur par défaut.


Avatar
François Picalausa
Bonjour/soir,

La sélection u noeud est alors changée, ça ne résoud pas le problème....

Une solution plus simple est de stoquer le noeud lors de la mise en mode
zoom et resélectionner le noeud lors d'un changement... un autre problème
réside dans le fait qu'il peut y avoir plusieurs noeuds ouverts et donc, il
faudrait stoquer leur état ouvert fermé dans leur tag par exemple..
ensuite,au nodeclick, fermer ou ouvrir le noeud en fonction du tag...

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


"YVAN" a écrit dans le message de
news:
plus simplement :
treeview1.SelectedItem.Expanded = Not treeview1.SelectedItem.Expanded


Jérôme Prioux wrote in message
news:<3f34e70a$0$27049$...
Mon application comporte entre autres une barre d'outils avec un
bouton
Loupe et un TreeView.
Lorsque l'on enfonce le bouton Loupe (tbPressed) et qu'on survole le
TreeView avec la souris, le pointeur se transforme en loupe (jusque
là,
c'est OK).
Lorsqu'on clique, avec ce pointeur, sur le TreeView avec le bouton
gauche,
on augmente la taille de la police, avec le droit, on la diminue.
Le problème, c'est que lorsqu'on clique n'importe où dans le
contrôle, ça
peut être sur un noeud. Et là, le contrôle développe l'arborescence
sans
qu'on lui demande.
Y a-t-il moyen d'éviter ça ?
J'ai essayé de mettre la propriété Enabled à False lorsque le bouton
est
enfoncé mais dans ce cas, le pointeur de la souris reste le pointeur
par
défaut.




Avatar
blancmunier1
le pb est de ne pas développer l'arborescence...
avec ma proposition, l'arborescence n'est pas développée est
l'évènement est bien généré, malgré qu'un noeud soit sélectionné...

"François Picalausa" wrote in message news:<OMt#2u$...
Bonjour/soir,

La sélection u noeud est alors changée, ça ne résoud pas le problème....

Une solution plus simple est de stoquer le noeud lors de la mise en mode
zoom et resélectionner le noeud lors d'un changement... un autre problème
réside dans le fait qu'il peut y avoir plusieurs noeuds ouverts et donc, il
faudrait stoquer leur état ouvert fermé dans leur tag par exemple..
ensuite,au nodeclick, fermer ou ouvrir le noeud en fonction du tag...

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


"YVAN" a écrit dans le message de
news:
> plus simplement :
> treeview1.SelectedItem.Expanded = Not treeview1.SelectedItem.Expanded
>
>
> Jérôme Prioux wrote in message
> news:<3f34e70a$0$27049$...
>> Mon application comporte entre autres une barre d'outils avec un
>> bouton
>> Loupe et un TreeView.
>> Lorsque l'on enfonce le bouton Loupe (tbPressed) et qu'on survole le
>> TreeView avec la souris, le pointeur se transforme en loupe (jusque
>> là,
>> c'est OK).
>> Lorsqu'on clique, avec ce pointeur, sur le TreeView avec le bouton
>> gauche,
>> on augmente la taille de la police, avec le droit, on la diminue.
>> Le problème, c'est que lorsqu'on clique n'importe où dans le
>> contrôle, ça
>> peut être sur un noeud. Et là, le contrôle développe l'arborescence
>> sans
>> qu'on lui demande.
>> Y a-t-il moyen d'éviter ça ?
>> J'ai essayé de mettre la propriété Enabled à False lorsque le bouton
>> est
>> enfoncé mais dans ce cas, le pointeur de la souris reste le pointeur
>> par
>> défaut.


Avatar
François Picalausa
Bonjour/soir,

Le problème posé a la base est en effet ne ne pas développer
l'arborescence... mait comme il est dir que la loupe doit changer fontsize,
on peut supposer qu'il ne faut pas non plus changer la sélection... ce n'est
bien entendu qu'une supposition ;-)

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


"YVAN" a écrit dans le message de
news:
le pb est de ne pas développer l'arborescence...
avec ma proposition, l'arborescence n'est pas développée est
l'évènement est bien généré, malgré qu'un noeud soit sélectionné...

"François Picalausa" wrote in message
news:<OMt#2u$...
Bonjour/soir,

La sélection u noeud est alors changée, ça ne résoud pas le
problème....

Une solution plus simple est de stoquer le noeud lors de la mise en
mode
zoom et resélectionner le noeud lors d'un changement... un autre
problème
réside dans le fait qu'il peut y avoir plusieurs noeuds ouverts et
donc, il
faudrait stoquer leur état ouvert fermé dans leur tag par exemple..
ensuite,au nodeclick, fermer ou ouvrir le noeud en fonction du tag...

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


"YVAN" a écrit dans le message de
news:
plus simplement :
treeview1.SelectedItem.Expanded = Not
treeview1.SelectedItem.Expanded


Jérôme Prioux wrote in message
news:<3f34e70a$0$27049$...
Mon application comporte entre autres une barre d'outils avec un
bouton
Loupe et un TreeView.
Lorsque l'on enfonce le bouton Loupe (tbPressed) et qu'on survole
le
TreeView avec la souris, le pointeur se transforme en loupe (jusque
là,
c'est OK).
Lorsqu'on clique, avec ce pointeur, sur le TreeView avec le bouton
gauche,
on augmente la taille de la police, avec le droit, on la diminue.
Le problème, c'est que lorsqu'on clique n'importe où dans le
contrôle, ça
peut être sur un noeud. Et là, le contrôle développe l'arborescence
sans
qu'on lui demande.
Y a-t-il moyen d'éviter ça ?
J'ai essayé de mettre la propriété Enabled à False lorsque le
bouton
est
enfoncé mais dans ce cas, le pointeur de la souris reste le
pointeur
par
défaut.