[RESOLU] sélection d'une colonne (ListIconGadget)
[RESOLU] sélection d'une colonne (ListIconGadget)
Bonjour à tous
Comment savoir si une colonne d'une ListIconGadget a été sélectionnée?
(Je croyais que la valeur -1 était réservée pour les colonnes mais je constate que ce n'est pas le cas malheureusement)
Attention, il s'agit d'une ancienne version de Pb (4.2), le programme est volumineux et compliqué (je n'ai pas envie d'émigrer cette version)
Merci
Comment savoir si une colonne d'une ListIconGadget a été sélectionnée?
(Je croyais que la valeur -1 était réservée pour les colonnes mais je constate que ce n'est pas le cas malheureusement)
Attention, il s'agit d'une ancienne version de Pb (4.2), le programme est volumineux et compliqué (je n'ai pas envie d'émigrer cette version)
Merci
Dernière modification par omega le sam. 12/août/2017 20:39, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: sélection d'une colonne (ListIconGadget)
Bonjour,
Code : Tout sélectionner
If GetGadgetItemState(IdList,Position) & #PB_ListIcon_Selected
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: sélection d'une colonne (ListIconGadget)
Non, j'ai déjà vu cette instuction:
Ceci concerne les lignes et non pas les colonnes
Merci quand même
Code : Tout sélectionner
If GetGadgetItemState(IdList,Position) & #PB_ListIcon_Selected
Merci quand même
Win7 (x64) 64 bits Pb 5.72
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: sélection d'une colonne (ListIconGadget)
Oui c'est vrai je ne pense pas qu'il existe une commande pour cette action, par-contre voici une procédure qui pourrait le faire
Code : Tout sélectionner
Procedure myEvent()
Protected x=WindowMouseX(0)
Protected i,x1=GadgetX(0),x2=x1
For i=1 To 5
x2+GadgetX(0)+GetGadgetItemAttribute(0,i,#PB_ListIcon_ColumnWidth)
If x>=x1 And x<=x2
Debug "You're on column "+Str(i)
Break
EndIf
x1=x2
Next
EndProcedure
; Open window
OpenWindow(0,0,0,800,600,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(0,0,0,800,600,"Column_1",100,#PB_ListIcon_FullRowSelect)
; add few columns
For i=2 To 5
AddGadgetColumn(0,i,"Column_"+Str(i),100)
Next
; add few records
For i=1 To 10
text.s="Record A_"+Str(i)+Chr(10)+
"Record B_"+Str(i)+Chr(10)+
"Record C_"+Str(i)+Chr(10)+
"Record D_"+Str(i)+Chr(10)+
"Record E_"+Str(i)+Chr(10)+
AddGadgetItem(0,-1,text)
Next
; set callbacks
BindGadgetEvent(0,@myEvent())
; Main loop
Repeat
WaitWindowEvent()
Until Event()=#PB_Event_CloseWindow
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: sélection d'une colonne (ListIconGadget)
J'ai testé ce code mais je reçois un message d'erreur au niveau de cette commande:
C'est peut être lié à mon ancienne version de Pb ?
Code : Tout sélectionner
BindGadgetEvent(0,@myEvent())
Win7 (x64) 64 bits Pb 5.72
Re: sélection d'une colonne (ListIconGadget)
Oui il est allé trop vite.
Oublie les callback via bindevent en 4.xx
Oublie les callback via bindevent en 4.xx
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
- microdevweb
- Messages : 1802
- Inscription : mer. 29/juin/2011 14:11
- Localisation : Belgique
Re: sélection d'une colonne (ListIconGadget)
Bonjour je n'ai pas installer Pb 4.2, mais j'ai modifié le code qui devrait fonctionné avec
Code : Tout sélectionner
Procedure myEvent()
Protected x=WindowMouseX(0)
Protected i,x1=GadgetX(0),x2=x1
For i=1 To 5
x2+GadgetX(0)+GetGadgetItemAttribute(0,i,#PB_ListIcon_ColumnWidth)
If x>=x1 And x<=x2
Debug "You're on column "+Str(i)
Break
EndIf
x1=x2
Next
EndProcedure
; Open window
OpenWindow(0,0,0,800,600,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(0,0,0,800,600,"Column_1",100,#PB_ListIcon_FullRowSelect)
; add few columns
For i=2 To 5
AddGadgetColumn(0,i,"Column_"+Str(i),100)
Next
; add few records
For i=1 To 10
text.s="Record A_"+Str(i)+Chr(10)+
"Record B_"+Str(i)+Chr(10)+
"Record C_"+Str(i)+Chr(10)+
"Record D_"+Str(i)+Chr(10)+
"Record E_"+Str(i)+Chr(10)+
AddGadgetItem(0,-1,text)
Next
Global gEvent
; Main loop
Repeat
gEvent=WaitWindowEvent()
Select gEvent
Case #PB_Event_Gadget
myEvent()
EndSelect
Until gEvent=#PB_Event_CloseWindow
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Work at Centre Spatial de Liège
Re: sélection d'une colonne (ListIconGadget)
(Précision pour les débutants qui pourraient lire ce topic)
Le principe consiste à comparer la position X de la souris (WindowMouseX()) par rapport à la largeur de chaque colonne GetGadgetItemAttribute(0,i,#PB_ListIcon_ColumnWidth) relative à la position X du gadget GadgetX() dans la fenêtre.

Le principe consiste à comparer la position X de la souris (WindowMouseX()) par rapport à la largeur de chaque colonne GetGadgetItemAttribute(0,i,#PB_ListIcon_ColumnWidth) relative à la position X du gadget GadgetX() dans la fenêtre.

Re: sélection d'une colonne (ListIconGadget)
Merci beaucoup, ça marche !
Cependant, j'ai 2 petites remarques :
1. La version 4.2 n'accepte pas cette syntaxe:
Je l'ai donc modifiée de cette façon:
2. J'aurais préféré que la sélection soit détectée au niveau des titres des colonnes (car je dois trier la colonne sélectionnée), le fait
de sélectionner une ligne m'oblige à faire autre chose que le tri (modification ou suppression de l'enregistrement par exemple).
De toute façon, c'est toujours un plus pour moi.
Je vous remercie pour votre aide.
Cependant, j'ai 2 petites remarques :
1. La version 4.2 n'accepte pas cette syntaxe:
Code : Tout sélectionner
text.s="Record A_"+Str(i)+Chr(10)+
"Record B_"+Str(i)+Chr(10)+
"Record C_"+Str(i)+Chr(10)+
"Record D_"+Str(i)+Chr(10)+
"Record E_"+Str(i)
Je l'ai donc modifiée de cette façon:
Code : Tout sélectionner
text.s="Record A_"+Str(i)+Chr(10)+"Record B_"+Str(i)+Chr(10)+"Record C_"+Str(i)+Chr(10)+"Record D_"+Str(i)+Chr(10)+"Record E_"+Str(i)
2. J'aurais préféré que la sélection soit détectée au niveau des titres des colonnes (car je dois trier la colonne sélectionnée), le fait
de sélectionner une ligne m'oblige à faire autre chose que le tri (modification ou suppression de l'enregistrement par exemple).
De toute façon, c'est toujours un plus pour moi.
Je vous remercie pour votre aide.
Win7 (x64) 64 bits Pb 5.72
Re: [RESOLU] sélection d'une colonne (ListIconGadget)
Tu ne peux pas cliquer sur l'entête de colonne, mais tu peux utiliser -1 avec GetGadgetItemText() pour avoir le titre de la colonne.J'aurais préféré que la sélection soit détectée au niveau des titres des colonnes
GetGadgetItemText(<Listicon>, -1, <numéro de la colonne>))
Re: [RESOLU] sélection d'une colonne (ListIconGadget)
Code : Tout sélectionner
GetGadgetItemState()
J'ai déjà testé cette instruction qui ne donne rien.
Merci quand même
Win7 (x64) 64 bits Pb 5.72
Re: [RESOLU] sélection d'une colonne (ListIconGadget)
RECTIFICATIF : L'instruction GetGatgetItemText donne en effet le texte de la colonne spécifiée
Ce que je veux, c'est savoir QUELLE EST LA COLONNE qui a été sélectionnée.
Dans cet exemple, la colonne est une donnée connue (il faut obligatoirement la spécifier), alors que celle que je cherche est inconnue.
J'ai essayé pour ligne=-1
malheureusement, ce cas n'est pas détecté par EventGadget()
Code : Tout sélectionner
GetGatgetItemText(#Listicon,-1,wcol)
Dans cet exemple, la colonne est une donnée connue (il faut obligatoirement la spécifier), alors que celle que je cherche est inconnue.
J'ai essayé
Code : Tout sélectionner
GetGatgetItemState(#Listicon,ligne)
malheureusement, ce cas n'est pas détecté par EventGadget()
Win7 (x64) 64 bits Pb 5.72
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [RESOLU] sélection d'une colonne (ListIconGadget)
En natif avec PureBasic ce n'est pas possible.Ce que je veux, c'est savoir QUELLE EST LA COLONNE qui a été sélectionnée.
■ Tu vas devoir associer un callback qui va analyser les actions sur ton ListIconGadget.
Ce callback va recevoir des messages envoyés par un control de ta fenêtre. Dans ton cas ce control est ta ListIconGadget()
- Les messages sont analysés avec l'API événementielle #WM_NOTIFY .
- Le message est associé à la structure Microsoft NMHDR.
- Le membre hwndFrom de cette structure permettra de connaitre quel est le gadget émetteur du message.
- Le membre code de cette structure permet de connaitre le type d’événement. Par exemple #LVN_COLUMNCLICK
- S'agissant de ton ListIconGadget(), la structure Miscrosoft NMLISTVIEW sera associé à ce gadget.
- Le membre iSubItem de cette structure permet de connaitre la colonne sélectionnée.

■ Le code de test.
Code : Tout sélectionner
EnableExplicit
Enumeration window
#mf
EndEnumeration
Enumeration gadget
#ListIcon
EndEnumeration
Procedure Callback(Window.l, Message.l, wParam.l, lParam.l)
Protected result = #PB_ProcessPureBasicEvents, Column
Protected *pnmh.NMHDR ; Le messages receptionné est associé à la structure Microsoft NMHDR
Protected *pnmv.NMLISTVIEW ; la structure Miscrosoft NMLISTVIEW est associé au ListIconGadget
Select Message
Case #WM_NOTIFY ; Reception d'un message
*pnmh = lParam ; Le message est envoyé au pointeur de la structure NMHDR
;Le membre hwndFrom permet de connaitre quel est le gadget émetteur du message
If *pnmh\hwndFrom = GadgetID(#ListIcon)
;Le membre code de cette structure permet de connaitre le type d’événement
Select *pnmh\code
Case #LVN_COLUMNCLICK
;L'information est envoyé au poineur de la structure NMLISTVIEW
*pnmv = lParam ;
;Le membre iSubItem permet de connaitre la colonne sélectionnée.
Column = *pnmv\iSubItem
MessageRequester("Information", "Clicked on Column "+Str(Column),0)
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(#mf, 0, 0, 800, 600, "ListiconGadget : Quel est la colonne sélectionnée ?", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
ListIconGadget(#ListIcon, 10, 10, 780, 550, "Column0", 100, #PB_ListIcon_FullRowSelect )
AddGadgetColumn(#ListIcon, 1, "Column1", 200)
AddGadgetColumn(#ListIcon, 2, "Column2", 200)
AddGadgetColumn(#ListIcon, 3, "Column3", 200)
AddGadgetItem(#ListIcon, 0, "Row0" +Chr(10) + "XXX" + Chr(10)+ "XXX" + Chr(10)+ "XXX")
AddGadgetItem(#ListIcon, 1, "Row1" +Chr(10) + "XXX" + Chr(10)+ "XXX" + Chr(10)+ "XXX")
AddGadgetItem(#ListIcon, 2, "Row2" +Chr(10) + "XXX" + Chr(10)+ "XXX" + Chr(10)+ "XXX")
AddGadgetItem(#ListIcon, 3, "Row3" +Chr(10) + "XXX" + Chr(10)+ "XXX" + Chr(10)+ "XXX")
SetWindowCallback(@Callback())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
NMHDR structure : https://msdn.microsoft.com/fr-fr/librar ... s.85).aspx
NMLISTVIEW structure : https://msdn.microsoft.com/fr-fr/librar ... s.85).aspx
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [RESOLU] sélection d'une colonne (ListIconGadget)
@falsam
C'est exactement ce que je cherche !
Merci beaucoup Falsam ! ça marche.
C'est exactement ce que je cherche !
Merci beaucoup Falsam ! ça marche.
Win7 (x64) 64 bits Pb 5.72