[R] Tip sur un ListViewItem

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

[R] Tip sur un ListViewItem

#1

Message par Iste »

Salutations,

Je cherche simplement a afficher un petit tip au passage de la souris sur mes ListViewItem.
J'ai bêtement essayé un guictrlsettip(), ca marche sur la ListView, mais aucun résultat sur les item

En tapant ListViewItem item du forum anglais, presque rien !

Donc voila, si vous avez une idée pour ca...

Merci
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#2

Message par Tlem »

Ha, c'est rigolo, car je suis en train de travailler dessus aussi pour la prochaine version du Pack AutoIt-Fr. :o

Voilà ce que j'ai trouvé (c'est brut de pomme ... Hein) :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#3

Message par Iste »

Outch,

En plus de faire mal a mon petit double-coeur, en le testant 30sec ca a déclanché une erreur

Code : Tout sélectionner

C:\Documents and Settings\DL\Bureau\brouillon.au3 (42) : ==> [color=#BF0000]Subscript used with non-Array variable.:[/color]
ToolTip("Tip ID = " & _GUICtrlTreeView_GetItemParam($TreeViewHandle, $HotTreeviewItem) & " " & _GUICtrlTreeView_Index($TreeViewHandle, $HotTreeviewItem), $aWinPos[0] + $MousePos[0], $aWinPos[1] + $MousePos[1] + 10)
ToolTip("Tip ID = " & _GUICtrlTreeView_GetItemParam($TreeViewHandle, $HotTreeviewItem) & " " & _GUICtrlTreeView_Index($TreeViewHandle, $HotTreeviewItem), $aWinPos[0] + $MousePos^ ERROR
->11:43:42 AutoIT3.exe ended.rc:1
+>11:43:43 AutoIt3Wrapper Finished
>Exit code: 1    Time: 20.316
m'enfin merci, je vais regarder ca si c'est le seul moyen !

Sinon, en fait je simule déja une List avec une ListView pour gagner en puissance, ne pourrait-on pas passer par un TreeView tant qu'on y est ?

Je cherche de mon coté en tout cas ;)
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#4

Message par Tlem »

Coll, en plus de cela, tu me fait le débuguage. hihihi

Bon, pour l'erreur, c'est tout simple. Si la fenêtre principale n'a plus le focus alors il ne faut plus chercher à afficher le tooltips, sinon on se retrouve à chercher quelque chose qui 'n'existe pas'. ;)

J'ai modifié le code de mon précédent message. :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#5

Message par Iste »

En effet, c'est mieux :p mais beaucoup toujours plus lourd que son alias que j'ai trouvé sur le fofo anglais en cherchant dans les treeview (vu que le resultat est bien celui que je voulais)
► Afficher le texte
source : http://www.autoitscript.com/forum/index ... ntry426933

ton code vient d'un dérivé de celui là ?

edit : en "mixant" les deux, j'en suis arrivé a un truc fonctionel et assez légé, mais le rendu est saccadé
► Afficher le texte
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#6

Message par Tlem »

Iste a écrit :ton code vient d'un dérivé de celui là ?
Non
Iste a écrit :en "mixant" les deux, j'en suis arrivé a un truc fonctionel et assez légé, mais le rendu est saccadé.
Je ne vois pas grande différence en dehors du fait que tu passe en mode événementiel ...

Edit : Je viens de modifier la manière de gérer l'événement. Regarde de nouveau le code pour voir si ca te convient mieux. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Tip sur un ListViewItem

#7

Message par Iste »

Ha ben c'est beaucoup mieux ^^ Je le note pour plus tard, car ca semble etre le mieux qu'on puisse faire
Toute fois, je crois que je vais m'en passer pour mon appli actuelle, car le balladage de la souris bouf quand même 25% d'uc sur la grosse bécane du boulot :s (pis, faut l'avouer, c'est plus long a intégrer, et là, j'ai un peu la flemme ^^')

je passe en [R], car ca répond plutôt bien a la question

Mais c'est vraiment dommage qu'autoit ne gère pas ca nativement, car juste pour ca, mon appli deviendrait super lourde :(

merci ;)
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#8

Message par Tlem »

+1
Et je compatis à la tristesse de ce manque. :cry:

Par contre, pour les 25% d'utilisation UC, il suffit de placer un Sleep(25) au bon endroit pour limiter la casse et descendre ce taux aux environs de 5%. ;)

Code mis à jour dans ce message. 8)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#9

Message par Iste »

En effet, c'est taupe :p

Bah encore merci, je vais peut etre finir par l'inclure dans mon script alors !

Edit : j'ai finalement utilisé ce code

Code : Tout sélectionner

GUISetOnEvent($GUI_EVENT_MOUSEMOVE, "SysEvents")

...

Func SysEvents()
    Local $test = _GUICtrlListView_HitTest($JpackageFrame,MouseGetPos(0),MouseGetPos(1)-200) 
    ;-200, la la fonction fonction comme si le control se trouvait en 0,0 (le mien en 0,200)
    
    If $test[0] <> -1 Then
        Local $iMode = Opt("MouseCoordMode", 1)
        Local $aPos = MouseGetPos()
        Opt("MouseCoordMode", $iMode)

        Local $tip = String(Eval ("Pack"&Number(_GUICtrlListView_GetItemParam($JpackageFrame,$test[0]))&"|tip"))
        ;mes tooltip sont noté a la création des item dans des variables "packID|tip"
        ToolTip($tip,MouseGetPos(0),MouseGetPos(1)+10)
    Else    
        ToolTip("")
    EndIf
EndFunc
 
Ca prend presque aucune ressource, et ca a l'air de fonctionner, mais :
Comment pourrait-on récupérer le texte du tooltip d'un control ?
Et surtout, pourquoi ce code plante ???
Quand je "m'amuse" trop longtemps avec, ca freez plus ou moins longtemps, le problème semble venir du tootip (sans lui ca marche)
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#10

Message par Tlem »

Un code fonctionnel serait plus pratique pour tester ...

En ce qui concerne le texte du tooltip, le mieux est sans doute de gérer ca par index. C'est à dire lors de la création des items, de rajouter dans un tableau le texte de chaque item en fonction de son index. Ensuite dans la fonction qui gère les événements en rapport avec le survol des items, il faut récupérer l'index de l'item qui se trouve en dessous de la souris et le tour est joué. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#11

Message par Iste »

Tlem a écrit :Un code fonctionnel serait plus pratique pour tester ...
Bah je voulais éditer, mais impossible d'isoler le bug pour le moment :/
Le problème doit surement venir d'ailleurs, mais vu que je pense laisser tomber le tooltip pour un input, on saura peut être jamais ^^'

Pour le tootip, c'est à peut de chose pré ce que je fais grace aux Assign() et Eval(), je voulais juste savoir si on pouvait pas rendre ca plus propre.


Bref, j'en reste donc a mon code, j'éditerai une foi le tout bien propre pour apporter ma réponse.

en fait, la j'en suis a un point ou a force de debug, plus rien ne marche....

Edit :

Voila !
Bon, le code semble fonctionner, mais comme j'ai du tout casser et tout réparer, aucune idée de si le bug que j'avais est resté...
Bref, pour le moment ca marche nickel, donc encore une fois merci Thierry, cette fois ce pense que c'est tout bon !

mon code final
► Afficher le texte
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#12

Message par Tlem »

Je viens de m'apercevoir, que la question de départ portait sur un contrôle ListView et que j'ai tout bonnement proposé un code à base d'un TreeView ... :oops:

Pour le TreeView et pour historique, je propose une dernière version qui me semble bien plus propre. ;)
► Afficher le texte
Je pense que je vais aussi passer par un ListView car je vient de trouver comment rajouter la boite à cocher. :roll:
Je vais donc regarder comment faire et je viendrais peut être poster un meilleur code ici car j'ai une piste sur la sélection auto de l'item et donc sans doute le tooltip. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#13

Message par Iste »

En effet, mais TreeView > ListView > List, et j'ai quand meme réussi a faire ce que je voulais avec ton code ^^

Par contre, j'aimerai bien quelques petit explication sur ton dernier code.
Il m'a l'air bien mieux que les autre, mais j'ai du mal a saisir son fonctionnement, notamment, comment tu en arrive a trouver l'handle de l'item sous la souris.
Pourrait-on l'adapter a tout les types de control ?

De ce que j'ai compris, WM_NOTIFY() est appelé a chaque passage sur un event, envoyant en param son handle. J'en entend bien parler dans la page Windows Message Codes de la doc, mais sans plus d'explication :/
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#14

Message par Tlem »

Iste a écrit :comment tu en arrive a trouver l'handle de l'item sous la souris.
c'est cette partie qui me donne le handle :

Code : Tout sélectionner

        Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
        Local $hGuiIndex = DllStructGetData($tInfo, "SubItem")
En fait, je l'ai pioché d'un des exemples de la doc. ;)

Je voulais faire un truc sympa en temporisant le tooltip, mais avec le TreeView, c'est la misère. :evil:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#15

Message par Tlem »

Voici une version avec un ListView. ;)
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#16

Message par jchd »

Perso j'ai botté en touche pour la temporisation. Bien sûr c'est très faisable, mais le plus simple est d'avoir des indicateurs globaux et une fonction AdlibRegister() pour ça (et d'autres choses).

J'ai finalement trouvé que la complication n'en valait pas vraiment la peine et me contente de faire un ToolTip('') sur changement d'item et sur changement de focus. Pour l'utilisateur ce n'est pas gênant, surtout si on a pris soin de bien paramétrer le tooltip pour qu'il ne gêne pas la vue du champ sur lequel il porte, et en faisant passer le texte du tooltip sur plusieurs lignes pour éviter un "machin" atrocement illisible car trop étendu horizontalement.

Un exemple de fonction (tirez pas sur l'ambulance, c'est du très basique) pour faire ça:

Code : Tout sélectionner

Func _StringMulti($sIn, ByRef $sOut, $min, $max)
    Local $a = StringSplit($sIn, " ", 2)
    Local $len = 0, $multi = False
    $sOut = ''
    For $i = 0 to UBound($a) - 1
        If $len < $min Then
            $sOut &= $a[$i] & ' '
            $len += StringLen($a[$i]) + 1
        Else
            $sOut &= @LF & $a[$i] & ' '
            $len = StringLen($a[$i]) + 1
            $multi = True
        EndIf
    Next
    Return $multi
EndFunc
 
$in=la chaîne d'entrée, $out=la sortie par valeur ; $min et $max sont des longueurs (en caractères) entre lesquelles on introduit un saut de ligne. Dans mes applis, j'emploie facilement 70 et 90 respectivement. Si on veut faire "joli", on en arrive à se cogner la métrique de la représentation de la chaîne et travailler dessus, mais c'est vite très lourd et horriblement galère.

En fonction du type de champ et du contenu typique des tooltips qu'on a à afficher, il faut expérimenter un peu pour trouver le juste milieu. Dans mon cas, c'est tout simplement le contenu de champs "trop longs" pour affichage en entier (critère déterminé au pif, car sinon cela implique un détour par la métrique).
► Afficher le texte
Edit : évidemment, le temps que je pioche mes billes pour poster, notre deus ex machina me coupe l'herbe sous le pied ! A propos, j'ai besoin de quelqu'un pour tondre...
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
Clean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 11 avr. 2015 09:04
Localisation : Tolosa
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#17

Message par Clean »

Bonjour,
Désolé pour le déterrage : mais je préfère faire ça plutôt que créer un nouveau topic ...
Bref bonjour la communauté je suis tout fraîchement inscrit sur le fofo :p

Ma question est en lien avec le sujet initiale de ce post :
Quel moyen aurais-je de créer des ToolTip sur des parties d'un texte dans une GUI ?

J'ai réfléchi à des moyens trop lourds d'y arriver donc si quelqu'un à une petite idée ...
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#18

Message par mikell »

"des parties d'un texte dans une GUI" , c'est plutôt vague
Il est où précisément ce texte, dans quel type de controle (label, edit,...) ?
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Clean
Niveau 1
Niveau 1
Messages : 9
Enregistré le : sam. 11 avr. 2015 09:04
Localisation : Tolosa
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#19

Message par Clean »

Dans un label.
Il s'agit en fait d'écrire un texte où certain mots seront des mots-clés, lorsqu'on passera la souris dessus une tooltip indiquera les informations principales et clicker lancera une recherche (i.e. une fonction avec le mot en paramètre).
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Tip sur un ListViewItem

#20

Message par mikell »

Très chaud AMHA si le script doit chercher l'emplacement du mot dans le texte de la label :?
Je te conseille vivement de tricher, en faisant un assemblage de labels avec des éléments de texte ou juste les mots-clé, ou avec des labels transparentes comme ça par exemple
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre