Page 1 sur 1
[..] Label + <a></a>: Gros challenge ou limite de autoit ?
Posté : jeu. 28 févr. 2013 21:12
par zazapeta
Bonjour,
Je vous propose un challenge : Creer une fonction _GuiCtrlCreateHyperLabel qui fait ça :
Code : Tout sélectionner
$str = "Ceci est un exemple. Vous pourrez retrouver cette exemple sur <a href='www.autoit.fr'> Autoit </a> et sur <a href='www.google.fr'> google </a> ou bien encore sur <a href='www.AUTOITCGENIAL.com'> AutoiCGenial </a>."
$myLabel = _GuiCtrlCreateHyperLabel($hGui,$str,150,150,300,100)
Cette fonction permettra de creer un texte avec un lien un l’intérieure. Pour les habituer du HTML ça ne devrait pas poser de problème.
Pour les autres, la balise "<a href='monlien'> bla bla </a>" permet de transformer le texte "bla bla" en un lien hypertexte qui pointe sur 'monlien'. C'est du html.
J'ai cherché, cherché, cherché et encore cherché... no way ! Je pense que ce n'est pas possible de faire ça en autoit.
Détrompez moi !!!
Cordialement.
Et merci d'avance à toutes et à tous qui prendront le temps de me lire.
Zazapeta.
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : jeu. 28 févr. 2013 21:17
par jguinch
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : jeu. 28 févr. 2013 21:23
par zazapeta
Sérieux ???
C'est exactement ça !!!!!!!!
En tout cas merci !
(je suis mauvais moi...

)
Mais merci, merci, merci,merci mille fois !!!!!!!
EDIT :
Je clos le sujet.
Je réouvre le sujet ... car la solution proposer plus haut est trop *complex*

Re: [R] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 08:21
par jguinch
J'ai cherché, cherché, cherché et encore cherché
Mouais....
Re: [R] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 10:20
par mikell
+1
Surtout que ça peut se faire sans un code monstrueux
Même en respectant *à la lettre* le cahier des charges approximatif du post n°1 (ce qui n'est pas forcément souhaitable d'ailleurs) ça reste facile
► Afficher le texte
Code : Tout sélectionner
$str = "Ceci est un exemple. Vous pourrez retrouver cette exemple sur <a href='www.autoit.fr'> Autoit </a>"
;; $myLabel = _GuiCtrlCreateHyperLabel($hGui,$str,150,150,300,100)
;===================================================
#include <GUIConstantsEx.au3>
Opt("GuiOnEventMode", 1)
Global $link[1][2]
$gui = GuiCreate("", 150, 100)
GuiSetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$mylabel = _GuiCtrlCreateHyperLabel($gui, $str, 20, 20, 60, 20)
GuiSetState()
While 1
Sleep(10)
WEnd
;=================================
Func _Surf()
Switch @GUI_CtrlId
Case $mylabel
ShellExecute($link[0][1])
EndSwitch
EndFunc
Func _Exit()
Exit
EndFunc
Func _GuiCtrlCreateHyperLabel($hGui, $sTxt, $left, $top, $width, $height)
$link[0][0] = StringRegExpReplace($sTxt, '.+?>(.+?)<.+', "$1")
$link[0][1] = StringRegExpReplace($sTxt, ".+href='([^']+).+", "$1")
$_label = GuiCtrlCreateLabel($link[0][0], $left, $top, $width, $height)
GuiCtrlSetOnEvent(-1, "_Surf")
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0x0000ff)
GUICtrlSetFont(-1, 9, -1, 4)
GUICtrlSetCursor(-1, 0)
Return $_label
EndFunc
Re: [R] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 11:08
par jguinch
Mickell, avec ton code, où est passé le reste du texte "Ceci est un exemple. Vous pourrez retrouver cette exemple sur" ?

Re: [R] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 11:54
par mikell
Bah
► Afficher le texte
Code : Tout sélectionner
$str = "Ceci est un exemple. Vous pourrez retrouver cette exemple sur <a href='www.autoit.fr'> Autoit </a>"
;$myLabel = _GuiCtrlCreateHyperLabel($hGui,$str,150,150,300,100)
;===================================================
#include <GUIConstantsEx.au3>
Opt("GuiOnEventMode", 1)
Global $link[1][2]
$pre = StringRegExpReplace($str, '(<.+)', "")
$gui = GuiCreate("", 400, 100)
GuiSetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GuiCtrlCreateLabel($pre, 30, 20, 300, 20)
$mylabel = _GuiCtrlCreateHyperLabel($gui, $str, 330, 20, 60, 20)
GuiSetState()
While 1
Sleep(10)
WEnd
;=================================
Func _Surf()
Switch @GUI_CtrlId
Case $mylabel
ShellExecute($link[0][1])
EndSwitch
EndFunc
Func _Exit()
Exit
EndFunc
Func _GuiCtrlCreateHyperLabel($hGui, $sTxt, $left, $top, $width, $height)
$link[0][0] = StringRegExpReplace($sTxt, '.+?>(.+?)<.+', "$1")
$link[0][1] = StringRegExpReplace($sTxt, ".+href='([^']+).+", "$1")
$_label = GuiCtrlCreateLabel($link[0][0], $left, $top, $width, $height)
GuiCtrlSetOnEvent(-1, "_Surf")
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0x0000ff)
GUICtrlSetFont(-1, -1, -1, 4)
GUICtrlSetCursor(-1, 0)
Return $_label
EndFunc
C'est brouillon, c'est sommaire mais c'est juste pour l'idée ^^
Après tout l'usage des liens dans les gui c'est à 99% dans les boîtes "About", et se taper 800 Ko d'includes juste pour une boîte "About", personnellement c'est non

Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 12:01
par zazapeta
En tout cas merci pour vos réponse.
@jguinchard
C'est donc possible. Toutefois,
http://www.autoitscript.com/forum/topic ... slink-udf/ est un peu compliqué à mettre en place. Enfin compliqué, j'entend par là que j'ai pas mal de chose à faire en plus que de taper mon texte

. Mais à regarder de plus près pour voir si y a pas un petit quelque chose à faire là pour automatiser tout c'est dummy et compagnie.
@Mickell
On en est arrivé au même point.

J'ai à peu près implémenter la même chose. Sauf que je ne vois pas trop comment récupérer le texte original et y inclure mon lien.
Hier soir j'ai peut-être fermé le sujet un peu vite. Je le réouvre, car pour le moment

....
Cordialement,
Zazapeta.
P.S.: J'ai modifié le cahier des charges. La fonction doit pouvoir gerer plusieurs liens à la fois. dans le texte.
Re: [R] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 01 mars 2013 17:17
par mikell
Quelque chose comme ça ?
► Afficher le texte
Code : Tout sélectionner
; #Include <Array.au3>
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt("GuiOnEventMode", 1)
$url = "http://www.google.fr"
$txt = BinaryToString(InetRead($url), 1)
$items = StringRegExp($txt, '(?s)<a href="(.*?)</a>', 3)
If not IsArray($items) Then Exit Msgbox(0,"", "erreur")
Global $nb = UBound($items), $links[$nb][2]
For $i = 0 to $nb-1
$links[$i][0] = StringRegExpReplace($items[$i], '.+>(.+?)', "$1")
$links[$i][1] = StringRegExpReplace($items[$i], '(.+?)".+', "$1")
If StringLeft($links[$i][1], 1) = "/" Then $links[$i][1] = $url & $links[$i][1]
Next
;_ArrayDisplay($links)
Global $gui, $labels[$nb], $h = 20
$gui = GuiCreate($url, 300, $nb*20+100)
GuiSetOnEvent($GUI_EVENT_CLOSE, "_Exit")
For $i = 0 to $nb-1
$labels[$i] = _GuiCtrlCreateHyperLabel($links[$i][0], 30, $h+$i*25)
GUICtrlSetTip(-1, $links[$i][1])
GuiCtrlSetOnEvent(-1, "_Surf")
Next
GuiSetState()
While 1
Sleep(10)
WEnd
;=================================
Func _Surf()
For $i = 0 to $nb-1
If @GUI_CtrlId = $labels[$i] Then ShellExecute($links[$i][1])
Next
EndFunc
Func _GuiCtrlCreateHyperLabel($txt, $left, $top)
Local $w = GetStringDimensions($gui, $txt)
Local $_label = GuiCtrlCreateLabel($txt, $left, $top, $w[0]*0.8, $w[1]+4)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0x0000ff)
GUICtrlSetFont(-1, -1, -1, 4)
GUICtrlSetCursor(-1, 0)
Return $_label
EndFunc
Func _Exit()
Exit
EndFunc
Func GetStringDimensions($hWnd, $sText)
Local $hDC = _WinAPI_GetDC($hWnd)
Local $hFont = _SendMessage($hWnd, $WM_GETFONT)
Local $hSelectObject = _WinAPI_SelectObject($hDC, $hFont)
Local $tSIZE = _WinAPI_GetTextExtentPoint32($hDC, $sText)
_WinAPI_SelectObject($hDC, $hSelectObject)
_WinAPI_ReleaseDC($hWnd, $hDC)
Local $aReturn[2] = [DllStructGetData($tSIZE, 1), DllStructGetData($tSIZE, 2)]
Return $aReturn
EndFunc ;==>GetStringDimensions
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : lun. 07 oct. 2013 15:14
par zazapeta
Bonjour,
Je relance le sujet.
Pour palier à ce problème je suis passer à l'html (avec htmllayout.dll).
Est-ce trop compliqué ? En tout cas pour moi, oui.
Cordialement,
zazapeta
PS : J'ai essaye d'utiliser, de simplifier, d'integrer GUISyslink (posté plus haut). C'est pas facile. Si quelqu'un peut m'expliquer, je dis pas non.
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : mer. 09 oct. 2013 14:31
par mikell
Si tu veux la simplicité tu as aussi l'option de tout faire en html avec un controle objet
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <IE.au3>
$html = "Ceci est un exemple. Vous pourrez retrouver cette exemple sur <a href='www.autoit.fr'> Autoit </a> et sur <a href='www.google.fr'> google </a> ou bien encore sur <a href='www.AUTOITCGENIAL.com'> AutoiCGenial </a>."
$oIE = ObjCreate("Shell.Explorer.2")
$hGUI = GUICreate ("test", 300, 100) ;, 10, 50)
GUICtrlCreateObj($oIE, -2, -2, 330, 106)
_IENavigate($oIE, "about:blank")
_IEDocWriteHTML($oIE, $html)
$oIE.refresh()
While $oIE.busy
sleep(100)
Wend
GUISetState()
While GUIGetMsg() <> $GUI_EVENT_CLOSE
Sleep(10)
WEnd
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 22 nov. 2013 15:08
par zazapeta
Merci mikell pour ta participation.
C'est ce que j'ai fait finalement. Un objet activeX pour y integrer mon texte et mes liens.
Poussons le bouchons. Est-il possible de communiquer entre l'html et autoit. Autrement dit, creer un bouton en html et y associer une action autoit. Cela reviens en effet à remplacer le Javascript par de l'autoit (sans passer par htmllayout bien entendu ^^). Un peu comme vbScript. Cela serait génial !
Question HORS SUJET :
Je pense de plus en plus à me tourner vers le javascript + .hta pour creer mon application. Est-il possible d'effectuer les même actions en JS qu'en VBS (et en autoit) (écriture registre, fichier, shellExecute, ect ...) ? Bien sur la perfection ça serait de pouvoir utiliser autoit (j'aime bien ce language ^^').
Cordialement,
zazapeta.
Re: [..] Label + <a></a>: Gros challenge ou limite de autoit
Posté : ven. 22 nov. 2013 16:17
par timmalos
On peut faire ca assez facilement. Dans cet exemple j'ai rajouté les evenements DWebBrowserEvents2, cf MSDN, mais vous pouvez les enlever.
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <IE.au3>
$oIE = ObjCreate("Shell.Explorer.2")
$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents2")
if @error then
Msgbox(0,"AutoIt COM Test", _
"ObjEvent: Can't use event interface 'DWebBrowserEvents'. Error code: " & hex(@error,8))
exit
endif
$hGUI = GUICreate ("Test zazapeta", 800, 600) ;, 10, 50)
GUICtrlCreateObj($oIE, -2, -2, 800, 600)
_IENavigate($oIE, "about:blank")
$oBody = _IETagnameGetCollection($oIE, "body", 0)
_IEDocInsertHTML($oBody, "<a href=http://www.autoitscript.fr>Navigate to http://www.autoitscript.fr</a><p>")
_IEDocInsertHTML($oBody, "<BUTTON id=b1 value='Normal Exit'>Normal Exit</button> ")
_IEDocInsertHTML($oBody, "<BUTTON id=b2 value='Safe Exit'> Safe Exit </button>")
$oButton1 = _IEGetObjById($oIE, "b1")
$oButton2 = _IEGetObjById($oIE, "b2")
$oEvtButton1 = ObjEvent($oButton1, "evtButton_")
$oEvtButton2 = ObjEvent($oButton2, "evtButton_")
GUISetState()
While GUIGetMsg() <> $GUI_EVENT_CLOSE
Sleep(10)
WEnd
$EventObject.Stop ; Tell IE we don't want to receive events.
$EventObject=0 ; Kill the Event Object
exit
Func evtButton_onclick()
Local $o_object = @COM_EventObj
Switch $o_object.value
Case "Normal Exit"
Msgbox(0,"","Tu as cliqué sur le bouton Normal Exit")
Case "Safe Exit"
Msgbox(0,"","Tu as cliqué sur le bouton Safe Exit")
EndSwitch
EndFunc
Func IEEvent_BeforeNavigate2($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
; Note: the declaration is different from the one on MSDN.
ConsoleWrite( "BeforeNavigate: " & $URL & " Flags: " & $Flags & " tgframe: " & $TargetFrameName & " Postdat: " & $PostData & " Hdrs: " & $Headers & " canc: " & $Cancel & @CRLF )
EndFunc
Func IEEvent_StatusTextChange($Text)
ConsoleWrite( "IE Status text changed to: " & $Text & @CRLF )
EndFunc
Func IEEvent_PropertyChange( $szProperty)
ConsoleWrite( "IE Changed the value of the property: " & $szProperty & @CRLF )
EndFunc
Func IEEvent_DownloadComplete()
ConsoleWrite( "IE has finished a navigation operation" & @CRLF )
$oDoc= _IEDocGetObj($oIE)
ConsoleWrite( "-->Document cookie : "& $oDoc.cookie & @CRLF )
ConsoleWrite( "-->Document title : "& $oDoc.title& @CRLF )
ConsoleWrite( "-->Document referrer : "& $oDoc.referrer& @CRLF )
ConsoleWrite( "-->Document url : "& $oDoc.url& @CRLF )
EndFunc
Func IEEvent_NavigateComplete($URL)
; Note: the declaration is different from the one on MSDN.
ConsoleWrite( "IE has finished loading URL: " & $URL & @CRLF )
EndFunc
Func IEEvent_($EventName)
; This is an optional event function to catch non-defined events.
; The parameter contains the name of the event being called.
ConsoleWrite( "Uncatched event: " & $EventName & @CRLF )
EndFunc