Je suis en train de me faire un logiciel-outis pour préparer l'année scolaire à venir. Il s'agit d'une sorte de classeur numérique ou je range et stocke mes cours. Le classeur se présente d'une part sous la forme d'un arbre (TreeView) pour choisir les matières puis les chapitres et d'une autre part où je peux traiter mon texte (editeur HTML). Seulement, il y a un léger bug qui m'empêche de modifier le nom des différents items de mon TreeView.
Lorsque cette ligne est activée :
Code : Tout sélectionner
GUICtrlCreateObj($Input_Remarks, 198, 22, 800, 660)Voici le code de mon programme :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiTreeView.au3>
#Include <IE.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
Global $TreeView, $nMsg, $iIndex, $sText
$mainForm = GUICreate("Cours +", 999, 707, 231, 63)
$MenuItem1 = GUICtrlCreateMenu("&Fichier")
$MenuItem1_1 = GUICtrlCreateMenuItem("Sauvegarder"&@TAB&"Ctrl+S", $MenuItem1)
$MenuItem1_2 = GUICtrlCreateMenuItem("", $MenuItem1)
$MenuItem1_3 = GUICtrlCreateMenuItem("Fermer", $MenuItem1)
$MenuItem2 = GUICtrlCreateMenu("&Edition")
$MenuItem2_1 = GUICtrlCreateMenuItem("Ajouter une matière"&@TAB&"Ctrl+M", $MenuItem2)
$MenuItem3 = GUICtrlCreateMenu("&Aide")
$MenuItem3_1 = GUICtrlCreateMenuItem("A propos de ...", $MenuItem3)
GUICtrlCreateGroup("", -2, 1, 193, 685, -1, $WS_EX_TRANSPARENT)
$Tab = GUICtrlCreateTab(0, 22, 181, 662)
$Tab_Cours = GUICtrlCreateTabItem("Cours")
GUICtrlCreateGroup("", 10, 43, 163, 633)
$TreeView = GUICtrlCreateTreeView(12, 51, 159, 622, BitOR($GUI_SS_DEFAULT_TREEVIEW,$TVS_EDITLABELS), $WS_EX_CLIENTEDGE)
$generalitem = GUICtrlCreateTreeViewItem("General", $TreeView)
$ContextMenu = GUICtrlCreateContextMenu($TreeView)
$C_MenuItem1 = GUICtrlCreateMenuItem("Renommer", $ContextMenu)
$C_MenuItem2 = GUICtrlCreateMenuItem("Supprimer", $ContextMenu)
$C_MenuItem3 = GUICtrlCreateMenuItem("", $ContextMenu)
$C_MenuItem4 = GUICtrlCreateMenuItem("Ajouter un chapitre", $ContextMenu)
$Tab_Recherche = GUICtrlCreateTabItem("Recherche")
GUICtrlCreateGroup("", 10, 70, 163, 32)
$Label = GUICtrlCreateLabel("Entrer le mot-clé à trouver :", 10, 49, 131, 17)
GUICtrlSetBkColor(-1, 0xF0F0F0)
$Input = GUICtrlCreateInput("", 12, 78, 159, 21)
$List = GUICtrlCreateList("", 10, 110, 163, 526)
$Button = GUICtrlCreateButton("Rechercher", 49, 648, 85, 25)
GUICtrlCreateTabItem("")
GUICtrlCreateGroup("", 189, 1, 825, 685)
$Input_Remarks = _IECreateEmbedded()
;~ GUICtrlCreateObj($Input_Remarks, 198, 22, 800, 660)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
Dim $Form1_AccelTable[2][2] = [["^s", $MenuItem1_1],["^m", $MenuItem2_1]]
GUISetAccelerators($Form1_AccelTable)
GUISetState(@SW_SHOW)
Opt("GUICloseOnESC", 0)
$dll = DllOpen("user32.dll")
;~ _GetFonctionInfos()
While 1
$msg = GUIGetMsg()
Local $pressed = _IsPressedMod($dll)
If $pressed = 27 And ControlCommand($mainForm,"", "Edit1", "IsVisible", "") Then _Cancel(); pressed esc
If $pressed = 13 And ControlCommand($mainForm,"", "Edit1", "IsVisible", "") Then _Rename(); pressed enter
Switch $msg
Case $MenuItem1_1
;~ _SaveFonctionsInfos()
;~ _GetFonctionInfos()
Case $MenuItem1_3
_Exit()
Case $MenuItem2_1
$new_subj = InputBox("Nouvelle matière", "Entrer le nom de la nouvelle matière à ajouter :", "", "", 262, 150, @DesktopWidth/2- 131, @DesktopHeight/2-75, "", $mainForm)
If @error Then
;nothing
ElseIf $new_subj = "" Then
MsgBox(0, "Erreur", "Aucune donnée transmise")
Else
_GUICtrlTreeView_Add($TreeView, 0, $new_subj)
_GUICtrlTreeView_Sort($TreeView)
EndIf
Case $C_MenuItem1
$h_item = GUICtrlSendMsg($TreeView, $TVM_GETNEXTITEM, $TVGN_CARET, 0)
GUICtrlSendMsg($TreeView, $TVM_EDITLABELA, 0, $h_item)
Case $C_MenuItem2
$hItem = _GUICtrlTreeView_GetSelection($TreeView)
$tItem = _GUICtrlTreeView_GetText($TreeView, $hItem)
If _GUICtrlTreeView_GetParentHandle($TreeView, $hItem) <> 0 Then
$category = "le chapitre"
Else
$category = "la matière"
EndIf
If MsgBox(4 + 32, "Supprimer " & $tItem, "Voulez-vous vraiment supprimer " & $category & " " & $tItem & " ?", "", $mainForm) = 6 Then
_GUICtrlTreeView_Delete($TreeView, $hItem)
EndIf
Case $C_MenuItem4
$hItem = _GUICtrlTreeView_GetSelection($TreeView)
$tItem = _GUICtrlTreeView_GetText($TreeView, $hItem)
$new_chap = InputBox("Nouveau chapitre de " & $tItem, "Entrer le nom du nouveau chapitre à ajouter :", "", "", 256, 150, @DesktopWidth/2- 128, @DesktopHeight/2-75, "", $mainForm)
If @error Then
;nothing
ElseIf $new_chap = "" Then
MsgBox(0, "Erreur", "Aucune donnée transmise")
Else
_GUICtrlTreeView_AddChild($TreeView, $hItem, $new_chap)
_GUICtrlTreeView_Sort($TreeView)
_GUICtrlTreeView_Expand($TreeView, $hItem)
EndIf
Case $GUI_EVENT_CLOSE
_Exit()
EndSwitch
WEnd
;~ Func _GetFonctionInfos()
;~ $texte = FileRead("txtFunctions\test.txt")
;~ $infos = Stringsplit($texte,"###",1)
;~ $hOpen = FileOpen(@ScriptDir & "\res\lib\data\temp.html",2)
;~ $html = FileWrite($hOpen,FileRead(@ScriptDir & "\res\lib\base.html") &'<textarea name="area1" id="area1" cols="99">'&$texte&'</textarea>'&'</body></html>')
;~ _IENavigate ($Input_Remarks, @ScriptDir & "\res\lib\data\temp.html")
;~ FileClose($hOpen)
;~ EndFunc
;~ Func _SaveFonctionsInfos()
;~ $hOpen = FileOpen("txtFunctions\test.txt",2)
;~ $html = Stringsplit(_IEDocReadHTML($Input_Remarks),'</DIV></DIV><TEXTAREA',1)
;~ $html = Stringsplit($html[1],'contentEditable=true>',1)
;~ FileWrite($hOpen,$html[2])
;~ FileClose($hOpen)
;~ EndFunc
Func _Rename()
Local $newText = ControlGetText($mainForm, "", "Edit1")
Local $item = GUICtrlRead($TreeView)
GUICtrlSetData($item, $newText)
HotKeySet("{Enter}")
HotKeySet("{Esc}")
GUICtrlSendMsg($TreeView, $TVM_ENDEDITLABELNOW, False, 0)
EndFunc ;==>_Rename
Func _Cancel()
GUICtrlSendMsg($TreeView, $TVM_ENDEDITLABELNOW, True, 0)
HotKeySet("{Enter}")
HotKeySet("{Esc}")
EndFunc ;==>_Cancel
Func _IsPressedMod($dll = "user32.dll")
Local $aR, $bRv, $hexKey, $i
For $i = 8 To 128
$hexKey = '0x' & Hex($i, 2)
$aR = DllCall($dll, "int", "GetAsyncKeyState", "int", $hexKey)
If $aR[0] <> 0 Then Return $i
Next
Return 0
EndFunc ;==>_IsPressedMod
Func _Exit()
DllClose($dll)
GUIDelete()
Exit
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $iIDFrom
Case $TreeView
Switch $iCode
Case $NM_RCLICK
Local $tPoint = _WinAPI_GetMousePos(True, $hWndFrom), $tHitTest
$tHitTest = _GUICtrlTreeView_HitTestEx($hWndFrom, DllStructGetData($tPoint, 1), DllStructGetData($tPoint, 2))
If BitAND(DllStructGetData($tHitTest, "Flags"), $TVHT_ONITEM) Then
_GUICtrlTreeView_SelectItem($hWndFrom, DllStructGetData($tHitTest, 'Item'))
EndIf
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFuncD'avance merci pour m'éclairer.



