[R] Lier des actions à des Items TreeView
Posté : jeu. 25 août 2016 11:17
Tout d'abord bonjour à tous!
Alors voilà ma question, je suis actuellement en train de réaliser un programme avec un TreeView chargé à partir d'un fichier .ini , mon problème et que je voudrais lier le double clique sur les items du TreeView à des actions, comme ouvrir une page internet ou un dossier(exemple: ShellExecute("www.google.com") ).
(j'ai déjà la fonction permettant de détecter un clique sur un Item) Il reste à lier l'action automatiquement à partir d'un lien dans le fichier .ini à chaque Item.
Je m'en remet à vous pour m'aider ou simplement m'aiguiller, merci d'avance!
exemple fichier.ini:
programme:
Alors voilà ma question, je suis actuellement en train de réaliser un programme avec un TreeView chargé à partir d'un fichier .ini , mon problème et que je voudrais lier le double clique sur les items du TreeView à des actions, comme ouvrir une page internet ou un dossier(exemple: ShellExecute("www.google.com") ).
(j'ai déjà la fonction permettant de détecter un clique sur un Item) Il reste à lier l'action automatiquement à partir d'un lien dans le fichier .ini à chaque Item.
Je m'en remet à vous pour m'aider ou simplement m'aiguiller, merci d'avance!
exemple fichier.ini:
[lien]
google=//www.google.fr
[DOC]
mes documents=C\Bibliothèques\Documents
[autres liens]
programmation=autoit;https://www.autoitscript.fr/ |exemple;www.exemple.com
google=//www.google.fr
[DOC]
mes documents=C\Bibliothèques\Documents
[autres liens]
programmation=autoit;https://www.autoitscript.fr/ |exemple;www.exemple.com
;
; TEST v.1
;
;includes------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListboxConstants.au3>
#include <EditConstants.au3>
#include <GuiTreeView.au3>
#include <Array.au3>
;initialisation variables--------------------------------------------------------------------------------------------------------------------------------------------------------------
$fDblClk = False
Dim $i, $var, $file, $TreeView1, $var2, $TreeView2, $TreeView3, $test1, $varx, $var, $file, $x
$file = "fichier.ini"
;initialisation GUI--------------------------------------------------------------------------------------------------------------------------------------------------------------------
$GUI = GUICreate("TEST", 300 , @DesktopHeight, @DesktopWidth-300 , 0,$WS_POPUP);création de la fenêtre
$barredep = GUICtrlCreateLabel(" TEST", 0, 0, 300, 20, -1, $GUI_WS_EX_PARENTDRAG) ;barre de déplacement du widget
$barredep = GuiCtrlSetColor(-1,0X0000FF)
$barredep = GUICtrlSetBkColor (-1,0X606060)
$list = GUICtrlCreateTreeView(0, 40, 300,@DesktopHeight-60 , BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE);création de la liste
GUISetState(@SW_SHOW, $GUI)
;initialisation----------------------------------------------------------------------------------------------------------------------------------------------------------------------
GUIRegisterMsg($WM_NOTIFY, "MY_WM_NOTIFY") ; initialisation double clique list
_IniGetSectionNames();fonction chargement liste à partir d'un fichier ini
;evenementiel GUI----------------------------------------------------------------------------------------------------------------------------------------------------------------------
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $fDblClk = True Then ; fonction en cas de double clique sur la liste
$sText = _GUICtrlTreeView_GetText($list, _GUICtrlTreeView_GetSelection($list)); recupération de l'élément sélectionné dans la liste
;...
$fDblClk = False ; remise à zéro de la variable pour pouvoir double cliquer à nouveau
EndIf
WEnd
;libération de la mémoire------------------------------------------------------------------------------------------------------------------------------------------------------------
;fonctions---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func MY_WM_NOTIFY($hWnd, $Msg, $wParam, $lParam); fonction détection double clique sur liste
Switch $wParam
Case $list
Local $tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tagNMHDR, 3) = $NM_DBLCLK Then $fDblClk = True
EndSwitch
$tagNMHDR = 0
EndFunc
;fonction remplissage liste----------------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniGetSectionNames()
$varx = IniReadSectionNames($file)
If @error Then
MsgBox(4096, "", "Error occured, probably no INI file.")
Else
For $x = 1 To $varx[0]
_IniReadInfo($varx[$x])
Next
EndIf
EndFunc
;fonction remplissage liste suite----------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniReadInfo($sSection)
Dim $sValue
$var = IniReadSection($file, $sSection)
If @error Then
MsgBox(4096, "", "Error occured, check INI file.")
Else
$TreeView2 = GUICtrlCreateTreeViewitem($sSection, $list)
For $i = 1 To $var[0][0]
$TreeView3 = GUICtrlCreateTreeViewItem($var[$i][0], $TreeView2)
$sValue = StringSplit($var[$i][1], '|')
For $x = 1 To $sValue[0]
if $sValue[$x] <> '' Then $TreeView4 = GUICtrlCreateTreeViewitem($sValue[$x], $TreeView3)
Next
Next
EndIf
EndFunc
; TEST v.1
;
;includes------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListboxConstants.au3>
#include <EditConstants.au3>
#include <GuiTreeView.au3>
#include <Array.au3>
;initialisation variables--------------------------------------------------------------------------------------------------------------------------------------------------------------
$fDblClk = False
Dim $i, $var, $file, $TreeView1, $var2, $TreeView2, $TreeView3, $test1, $varx, $var, $file, $x
$file = "fichier.ini"
;initialisation GUI--------------------------------------------------------------------------------------------------------------------------------------------------------------------
$GUI = GUICreate("TEST", 300 , @DesktopHeight, @DesktopWidth-300 , 0,$WS_POPUP);création de la fenêtre
$barredep = GUICtrlCreateLabel(" TEST", 0, 0, 300, 20, -1, $GUI_WS_EX_PARENTDRAG) ;barre de déplacement du widget
$barredep = GuiCtrlSetColor(-1,0X0000FF)
$barredep = GUICtrlSetBkColor (-1,0X606060)
$list = GUICtrlCreateTreeView(0, 40, 300,@DesktopHeight-60 , BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE);création de la liste
GUISetState(@SW_SHOW, $GUI)
;initialisation----------------------------------------------------------------------------------------------------------------------------------------------------------------------
GUIRegisterMsg($WM_NOTIFY, "MY_WM_NOTIFY") ; initialisation double clique list
_IniGetSectionNames();fonction chargement liste à partir d'un fichier ini
;evenementiel GUI----------------------------------------------------------------------------------------------------------------------------------------------------------------------
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If $fDblClk = True Then ; fonction en cas de double clique sur la liste
$sText = _GUICtrlTreeView_GetText($list, _GUICtrlTreeView_GetSelection($list)); recupération de l'élément sélectionné dans la liste
;...
$fDblClk = False ; remise à zéro de la variable pour pouvoir double cliquer à nouveau
EndIf
WEnd
;libération de la mémoire------------------------------------------------------------------------------------------------------------------------------------------------------------
;fonctions---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func MY_WM_NOTIFY($hWnd, $Msg, $wParam, $lParam); fonction détection double clique sur liste
Switch $wParam
Case $list
Local $tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
If DllStructGetData($tagNMHDR, 3) = $NM_DBLCLK Then $fDblClk = True
EndSwitch
$tagNMHDR = 0
EndFunc
;fonction remplissage liste----------------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniGetSectionNames()
$varx = IniReadSectionNames($file)
If @error Then
MsgBox(4096, "", "Error occured, probably no INI file.")
Else
For $x = 1 To $varx[0]
_IniReadInfo($varx[$x])
Next
EndIf
EndFunc
;fonction remplissage liste suite----------------------------------------------------------------------------------------------------------------------------------------------------
Func _IniReadInfo($sSection)
Dim $sValue
$var = IniReadSection($file, $sSection)
If @error Then
MsgBox(4096, "", "Error occured, check INI file.")
Else
$TreeView2 = GUICtrlCreateTreeViewitem($sSection, $list)
For $i = 1 To $var[0][0]
$TreeView3 = GUICtrlCreateTreeViewItem($var[$i][0], $TreeView2)
$sValue = StringSplit($var[$i][1], '|')
For $x = 1 To $sValue[0]
if $sValue[$x] <> '' Then $TreeView4 = GUICtrlCreateTreeViewitem($sValue[$x], $TreeView3)
Next
Next
EndIf
EndFunc