Page 1 sur 2
ListIconGadget() et detection a vide...
Publié : sam. 02/févr./2013 13:16
par GallyHC
Bonjour tout le monde,
Voila j'ai un petit probleme avec les ListIconGadget(), quand on clique dessus et qu'il n'y a pas de valeur ou meme si il y a des valeurs d'ailleur mais que l'on clique en dehors d'une valeur, on ne peut pas detecte ce clique apar si on fait un double-clique.
J'aimerais pouvoir savoir si on peut detecte un clique dans un listicongadget même si celui-ci est vide? est-ce possible?
Cordialement,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : sam. 02/févr./2013 16:45
par graph100
Es-ce que ça fait le job ?
Code : Tout sélectionner
OpenWindow(0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 10, 10, 400, 300, "sqsdf", 120)
Repeat
event = WaitWindowEvent()
If EventGadget() = 1 And EventType() = #PB_EventType_LeftClick
Debug "CLIC"
EndIf
Until event = #PB_Event_CloseWindow
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 10:37
par GallyHC
Bonjour graph100,
Oui cela repond parfaitement a ma demande par contre pas du tout la même réaction dans mon logiciel, j'aissais de comprendre pourquoi.
Merci,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 11:59
par GallyHC
Bonjour,
Je viens de comprendre d'ou vient mon problème en gros c'est en mettant l'option "#PB_ListIcon_MultiSelect", et dans le cas d'un selection multiple il faut double cliquer pour pouvoir activer le gadget. est-ce normal et y a t'il un moyen de ne plus avoir cela?
Code : Tout sélectionner
Enumeration
#WINDOWS_0
EndEnumeration
Enumeration
#LISTIC_0
EndEnumeration
OpenWindow(#WINDOWS_0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LISTIC_0, 10, 10, 400, 300, "sqsdf", 120, #PB_ListIcon_MultiSelect)
AddGadgetColumn (#LISTIC_0, 1, "Ext.", 50)
AddGadgetColumn (#LISTIC_0, 2, "Taille", 60)
AddGadgetColumn (#LISTIC_0, 3, "Date", 100)
Repeat
event = WaitWindowEvent()
If EventGadget() = #LISTIC_0 And EventType() = #PB_EventType_LeftClick
Debug "CLIC"
EndIf
Until event = #PB_Event_CloseWindow
Cordialement,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 13:05
par Backup
ton code ne fonctionne pas car ....
lorsque tu cliques en dehors du gadget , par exemple pour bouger la fenetre , ton click est détecté !
hors , il faudrait qu'il le soit seulement ET seulement SI on clique SUR le gagdet !!
pour ça il te faut savoir si ta souris se trouve SUR ou en DEHORs de ton gadget ..
voici comme faire :
Code : Tout sélectionner
Enumeration
#WINDOWS_0
EndEnumeration
Enumeration
#LISTIC_0
EndEnumeration
Declare Callback(WindowID, message, wParam, lParam)
OpenWindow(#WINDOWS_0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LISTIC_0, 10, 10, 400, 300, "sqsdf", 120, #PB_ListIcon_MultiSelect)
AddGadgetColumn (#LISTIC_0, 1, "Ext.", 50)
AddGadgetColumn (#LISTIC_0, 2, "Taille", 60)
AddGadgetColumn (#LISTIC_0, 3, "Date", 100)
SetWindowCallback(@Callback())
Repeat
event = WaitWindowEvent()
If handle=GadgetID(#LISTIC_0) And EventType() = #PB_EventType_LeftClick
Debug "CLIC"
EndIf
Until event = #PB_Event_CloseWindow
Procedure Callback(WindowID, message, wParam, lParam)
shared handle
Resultat = #PB_ProcessPureBasicEvents
Select message
Case #WM_SETCURSOR
;; Debug "Handle= "+Str(wParam)+" , "+"ID= "+Str(GetDlgCtrlID_(wParam))
handle=wParam
EndSelect
ProcedureReturn Resultat
EndProcedure; EPB
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 13:52
par GallyHC
Bonjour Dobro,
Merci pour l'infos que je note bien. Par contre cela m'empeche pas qu'avec l'option "#PB_ListIcon_MultiSelect", il faut double cliquer sur le "ListIconGadget()" pour avoir "CLIC" dans le debugger et j'aimerais qu'un seul clique l'active?
Cordialement,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 14:10
par cederavic
Je ne comprend pas pourquoi ça fonctionne (j'ai le debug quand je relache le clic alors que j'utilise LButtonDown) mais ça fonctionne
Code : Tout sélectionner
Enumeration
#WINDOWS_0
EndEnumeration
Enumeration
#LISTIC_0
EndEnumeration
OpenWindow(#WINDOWS_0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LISTIC_0, 10, 10, 400, 300, "sqsdf", 120, #PB_ListIcon_MultiSelect)
AddGadgetColumn (#LISTIC_0, 1, "Ext.", 50)
AddGadgetColumn (#LISTIC_0, 2, "Taille", 60)
AddGadgetColumn (#LISTIC_0, 3, "Date", 100)
Repeat
event = WaitWindowEvent()
If event = #WM_LBUTTONDOWN
x = DesktopMouseX()
y = DesktopMouseY()
pos.q = y<<32 + x
If WindowFromPoint_(pos) = GadgetID(#LISTIC_0)
Debug "CLIC"
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 14:22
par GallyHC
Bonjour,
cederavic> Bon ben ta solution fonctionne, mais pourquoi en PB avec cette option cela change le fonctionnement du gadget la je ne sais pas?
Merci tout de même pour ta solution.
Cordialement,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : dim. 03/févr./2013 23:15
par nico
C'est bizarre ce qui se passe mais c'est possible que la listicon capture les évènements de la souris ce qui expliquerait ces évènements.
Il faudrait faire des tests en api pure pour être sûr!
Re: ListIconGadget() et detection a vide...
Publié : lun. 04/févr./2013 21:39
par graph100
le code suivant montre qu'il se passe des choses bizarres au niveau de la gestion du gadget lorsqu'il est en mode multiselect...
Une fois qu'on a cliquer dans le gadget, il continu à s'approprier les événements même si la souris est en dehors.
Pour revenir à la normal il doit soit falloir cliquer sur un autre gadget, soit cliquer sur une autre fenetre et revenir...
Je ne pense pas que ce soit entièrement voulu...
Code : Tout sélectionner
Enumeration
#WINDOWS_0
EndEnumeration
Enumeration
#LISTIC_0 = 1
EndEnumeration
OpenWindow(#WINDOWS_0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LISTIC_0, 10, 10, 400, 300, "sqsdf", 120, #PB_ListIcon_MultiSelect)
AddGadgetColumn (#LISTIC_0, 1, "Ext.", 50)
AddGadgetColumn (#LISTIC_0, 2, "Taille", 60)
AddGadgetColumn (#LISTIC_0, 3, "Date", 100)
Repeat
event = WaitWindowEvent()
Debug "----"
Debug EventGadget()
Debug event
If EventGadget() = #LISTIC_0 And Event = #WM_LBUTTONDOWN
Debug "CLIC"
EndIf
Until event = #PB_Event_CloseWindow
Re: ListIconGadget() et detection a vide...
Publié : mar. 05/févr./2013 9:22
par Mesa
Je trouve normal que le listicon en mode multiselect intercepte le premier clic puisque c'est ça fonction justement.
Mais on peut ruser...
Code : Tout sélectionner
Enumeration
#WINDOWS_0
EndEnumeration
Enumeration
#LISTIC_0 = 1
EndEnumeration
;Macro de falsam
;http://forums.purebasic.fr/french/viewtopic.php?f=1&t=13328&view=previous
;Un gadget est il survolé ?
Macro GadgetHoverCheck(x, y, Gadget)
(((Not x<GadgetX(Gadget)) & (Not y<GadgetY(Gadget))) &(Not x>=(GadgetX(Gadget)+GadgetWidth(Gadget))) & (Not y>=(GadgetY(Gadget)+GadgetHeight(gadget))))
EndMacro
OpenWindow(#WINDOWS_0, 0, 0, 500, 400, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LISTIC_0, 10, 10, 400, 300, "sqsdf", 120, #PB_ListIcon_MultiSelect);
AddGadgetColumn (#LISTIC_0, 1, "Ext.", 50)
AddGadgetColumn (#LISTIC_0, 2, "Taille", 60)
AddGadgetColumn (#LISTIC_0, 3, "Date", 100)
Repeat
event = WaitWindowEvent()
Debug "----"
Debug EventGadget()
Debug event
;#LISTIC_0 est-il survolé ?
If GadgetHoverCheck(WindowMouseX(#WINDOWS_0), WindowMouseY(#WINDOWS_0), #LISTIC_0)
Debug "survol"
;Si oui, le bouton gauche est-il enfoncé ?
If event=#WM_LBUTTONDOWN
Debug "------========CLIC=========-------"
EndIf
EndIf
Until event = #PB_Event_CloseWindow
Mesa.
Re: ListIconGadget() et detection a vide...
Publié : mar. 05/févr./2013 14:51
par GallyHC
Bonjour,
Mesa> Je suis tout a fait d'accord dans le principe, mais il serait quand même bien que le gadget donne aussi l'info du premier clique (on a peu etre besoin de faire des actions dans le soft par moment et il faut le savoir).
J'ai fait une petit capture (sur XP et 7) pour montre pourquoi je me penche sur cela
En gros c'est une sorte de "Total Commander", mais qui va aussi gerer les Navigate3 (Tomtom de nouvelle generation).
Si quelqu'un veut déjà testé l'interface pas de prob

c'est ici
http://www.koakdesign.info/nav3/Nav3explorer.exe, bon c'est quand même qu'un début
Cordialement et encore merci pour vos aides,
GallyHC
Re: ListIconGadget() et detection a vide...
Publié : mar. 05/févr./2013 16:18
par Ar-S
Sous Windows 8
il a l'air fonctionnel.
Je vais dire ce que je n'aime pas (ça signifiera que j'aime le reste

)
- Le petit fond jaune lorsqu'on redimensionne une colonne manuellement. Ton "étiquette" est le bleu, reste avec du bleu.
- la police de caractère grasse. Je ne sais pas laquelle c'est mais elle me donne un arrière goût des années 90.
- Les petites icones seraient plus sympa et plus lisibles si elle faisaient 32x32.
- Ajouter un champ de recherche ce qui éviterait d'avoir à aller dans "Commande" => "Rechercher de fichier"
Voilou.
Sinon c'est propre, comme d'hab
P.S : Votre version du logiciel est non enregistr
ée
Re: ListIconGadget() et detection a vide...
Publié : mar. 05/févr./2013 16:53
par GallyHC
Bonjour,
Tu n'as pas forcement tors

je vais voir a faire quelques modifications sur l’interface.
Mais bon j'ai du créer mon splitter car celui de pb et de mémoire ne gere que 2 gadgets (c'est déjà bien qu'il y en a un). alors les couleur ect... ce n'était que pour être lisible. Et je me suis plus penché sur les calculs des positions en cas de redimentionnement que sur les couleurs en fait

.
GallyHC
PS: PT1 c'est moche ce gris avec titre en noir, j'espere que c'est pas par defaut sur 8.
Re: ListIconGadget() et detection a vide...
Publié : mar. 05/févr./2013 17:03
par blendman
Salut GallyHC
J'ai testé moi aussi et je trouve que pour le moment c'est très bien.
Petit question : je trouve très sympa le fait que ça n'affiche qu'une petite barre noire quand tu redimensionne tes colonnes (au lieu de voir la fenêtre buguait un peu comme c'est souvent le cas ^^). Tu fais ça comment ?
Bonne continuation
