mikell a écrit :
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
C'est ce que je voulais dire par méthode lourde ^^ (j'y avait dj pensé, mais si pas d'autre solution ...)
Pour les labels transparents : le pb c'est de trouver les coordonnées du mot :/
Après un algo qui cherche l'emplacement des mots-clés (dans le texte) n'est pas un pb.
Je regarderais plus tard le script que t'as envoyé (je peux pas dans l'immédiat)
L'idée c'est juste de spliter le text (une fois qu'on connais les mots-clés c'est très simple).
Il faut donc créer un "module" pour gérer ces pluri-labels (i.e. considérer que cette ensemble de labels n'est en théorie qu'un gros label).
Après on peut créer une tooltip sur le label contenant le mot clés, associer une fonction au click et même changer la typo du texte en fonction d'un MouseGetPos (mais j'ai peur que ca ne ralentisse énormément le script ... :/).
Je regarderais le script de MrCreator, cependant : comment obtenir un labels dont les coordonnées sont exactement définies pour un texte spécifique (i.e. qu'il colle le texte en longueur/largeur/hauteur) ?
Il faut garder en tête qu'à la fin mon texte sera auto-formaté : mes textes seront générés par un moteur de recherche puis affichés de cette manière à l'aider d'une liste de mots-clés déjà connus dont les "infos principales" (i.e. texte de la ToolTip) seront stockées dans un .ini.
Remarque, tu peux aussi utiliser une edit qui permet [relativement] plus facilement une reconnaissance de mot dynamique
Le code là-dessous correspondrait en gros à ton cahier des charges
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
$text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum dolores et ea rebum end"
$hGui = GUICreate("Edit Char From Pos", 400, 300)
$idEdit = GUICtrlCreateEdit($text, 20, 20, 360, 150, $ES_READONLY, $ES_MULTILINE)
GUISetState(@SW_SHOWNA)
Global $word, $len = StringLen($text)
Global $list[3][2] = [ _
["dolor", "commentaire #1"], _
["tempor", "commentaire #2"], _
["voluptua", "commentaire #3"]]
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_MOUSEMOVE
$word = _CheckWords($list)
If IsArray($word) Then
Local $pos = MouseGetPos()
ToolTip($word[0] & " : " & $word[1], $pos[0]+20, $pos[1]+20)
Else
ToolTip("")
EndIf
Case $GUI_EVENT_PRIMARYDOWN
ToolTip("")
If IsArray($word) Then _DoSomething($word[0])
EndSwitch
Wend
Func _DoSomething($var)
Msgbox(0,"", "cliqué sur le mot : " & $var)
EndFunc
Func _CheckWords($array)
Local $s, $res[2]
Local $info = GuiGetCursorInfo()
Local $aCharPos = _GUICtrlEdit_CharFromPos($idEdit, $info[0]-20, $info[1]-20)
If not IsArray($aCharPos) or $aCharPos[0] > $len Then Return
Local $line = _GUICtrlEdit_GetLine($idEdit, $aCharPos[1])
Local $char = $aCharPos[0] - _GUICtrlEdit_LineIndex($idEdit, $aCharPos[1])
$s = StringRegExpReplace(StringRegExpReplace($line, '(.{' & $char & '}\S*).*', "$1"), '.*\s(\S+)', "$1")
$s = StringRegExpReplace($s, '[,;:.]', "")
For $i = 0 to UBound($array)-1
If $s = $array[$i][0] Then
$res[0] = $s
$res[1] = $array[$i][1]
Return $res
EndIf
Next
EndFunc
Edit
Remarque 2, tu pourrais te simplifier encore plus la tâche avec une approche complètement différente :
#include <GUIConstantsEx.au3>
;;#include <IE.au3>
$text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum dolores et ea rebum end."
Global $list[3][2] = [ _
["dolor", "commentaire #1"], _
["tempor", "commentaire #2"], _
["voluptua", "commentaire #3"]]
For $i = 0 to UBound($list)-1
$text = StringRegExpReplace($text, '(?<=\W)' & $list[$i][0] & '(?=\W)', _
"<a><font color = 'red'>" & $list[$i][0] & "</font></a>")
Next
$oIE = ObjCreate("Shell.Explorer.2")
$hGui = GUICreate("Edit Char From Pos", 400, 300)
$GUIActiveX = GUICtrlCreateObj($oIE, 20, 20, 360, 250)
$oIE.Navigate("about:blank")
$oIE.document.write($text)
;$oIE.document.close()
$oIE.Refresh()
GUISetState()
$oLinks = $oIE.document.GetElementsByTagName("a")
For $oLink In $oLinks
ObjEvent($oLink, "_Evt_")
Next
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
;========================================
Func _Evt_onMouseover()
Local $o_link = @COM_EventObj
For $i = 0 to UBound($list)-1
If $o_link.innertext = $list[$i][0] Then ToolTip($list[$i][0] & " : " & $list[$i][1])
Next
EndFunc
Func _Evt_onMouseout()
ToolTip("")
EndFunc
Func _Evt_onMousedown()
ToolTip("")
Local $o_link = @COM_EventObj
For $i = 0 to UBound($list)-1
If $o_link.innertext = $list[$i][0] Then _DoSomething($list[$i][0])
Next
EndFunc
Func _DoSomething($var)
Msgbox(0,"", "cliqué sur le mot : " & $var)
EndFunc
Et c'est plus joli, en plus
" L'échec est le fondement de la réussite. " (Lao-Tseu ) " Plus ça rate, plus on a de chances que ça marche " (les Shadoks )