Page 1 sur 1

Treeview dynamique

Posté : sam. 04 févr. 2017 15:51
par Nicoloquinte
Bonjour , j'ai un treewiew qui liste des dossiers :
Func Michel()
   $hSearch = FileFindFirstFile($Repertoire & "\*.*")
   $aFileList = _FileListToArray($Repertoire, "*")
   $iRows = UBound($aFileList, $UBOUND_ROWS)
    Local $PatArr[$iRows - 1]
   For $i = 0 to $irows -2
      $Name = FileFindNextFile($hSearch)
      If @error Then ExitLoop
      $PatArr[$i] = $Name
   Next
       Local $Client[$iRows - 1]
   For $i = 0 to $irows -2
      $Client[$i] = GUICtrlCreateTreeViewItem($PatArr[$i], $Patients)
   Next

EndFunc
mais , j'aimerai , quand j'ajoute , pouvoir relancer la fonction et redessiner complètement le treeview et non ajouter tout les fichier en plus
donc un Update.
j'ai trouvé des histoires de treeview "on the fly"mais ça me parait compliqué pour une tache si pauvre :mrgreen: :mrgreen:

merci d'avance

Re: Treeview dynamique

Posté : sam. 04 févr. 2017 17:32
par mikell
Ce code me semble monstrueusement redondant :mrgreen:
Têt bin que ça pourrait marcher comme ça :
Func Michel()
        $aFileList = _FileListToArray($Repertoire, "*", $FLTA_FILES)
        Local $Client[$aFileList[0]]
        For $i = 1 to $aFileList[0]
            $Client[$i-1] = GUICtrlCreateTreeViewItem($aFileList[$i], $Patients)
        Next
    EndFunc
Sinon un petit code fonctionnel ça aiderait à comprendre ta question

Re: Treeview dynamique

Posté : sam. 04 févr. 2017 17:50
par Nicoloquinte
désolé , j'ai repris un bout de code d'un ancien de mes programmes

sinon
Case $SavePatient
      Grey()
      $FilePath = $FolderName & "\" & GUICtrlRead($FirstName) & " " & GUICtrlRead($LastName)
      DirCreate($FilePath)
      _FileCreate ( $FilePath & "\RensGen.txt" )
      $hFile = FileOpen($FilePath & "\RensGen.txt"  , $FO_OverWrite)
      $RefDate = GuiCtrlRead($BirthDay)&"/"&GuiCtrlRead($BirthMonth)&"/"&GuiCtrlRead($BirthYear)
      FileWrite($hFile ,GUICtrlRead($FirstName) & @Crlf & GUICtrlRead($LastName) & @Crlf & $RefDate & @Crlf )

      Michel()
et en gros , ça me créé un fichier (donc un patient) et ça recharge la liste des patients.

après , je veux pouvoir faire un système de rechèrche donc ........ cela me seras utile
PS : oups je "traite les patients de clients" :mrgreen: (-> les inconnus)


voici mon code total :
#include <ButtonConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <SQLite.au3>
#include <Date.au3>
#include <UpdownConstants.au3>
#include <File.au3>
#include<Array.au3>

Dim $FolderName = "C:\GobyManager\Patients"
Dim $FileCount = 0


$Repertoire = "C:\GobyManager\Patients"
DirCreate($Repertoire)



$Age = 0
$Gui = GUICreate("GObYManager", 1917, 1018, 0, 0, BitOR($GUI_SS_DEFAULT_GUI,$WS_MAXIMIZEBOX,$WS_TABSTOP))

$File = GUICtrlCreateMenu("Fichier")
$NewPat = GUICtrlCreateMenuItem("Nouveau Patient", $File)
$Tri = GUICtrlCreateMenu("Trier par" ,$File)
$SortNameMenuItem = GUICtrlCreateMenuItem("Nom", $Tri)
$SortConsultMenuItem = GUICtrlCreateMenuItem("date de consultation", $Tri)
$SortAgeMenuItem = GUICtrlCreateMenuItem("age", $Tri)
GUICtrlSetState($SortAgeMenuItem, $GUI_CHECKED)
$Opt = GUICtrlCreateMenu("Options")
$SaveOpt = GUICtrlCreateMenu("Sauvegarde", $Opt)
$Load = GUICtrlCreateMenuItem("Charger une base de données", $SaveOpt)
$Export = GUICtrlCreateMenuItem("Exporter une base de données", $SaveOpt)
$NewPatButton = GUICtrlCreateButton("+   Nouveau patient", 66, 947, 275, 41)
$Browse = GUICtrlCreateButton("Rechercher", 248, 40, 91, 33)
$BrInput = GUICtrlCreateInput("Rechercher", 48, 40, 177, 28)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Patients = GUICtrlCreateTreeView(40, 88, 329, 849, BitOR($GUI_SS_DEFAULT_TREEVIEW,$WS_BORDER))






GUICtrlCreateGroup("Informations Personneles", 416, 40, 1473, 409)
$FirstName = GUICtrlCreateInput("Nom", 456, 88, 129, 21)
$LastName = GUICtrlCreateInput("Prénom", 608, 88, 129, 21)
$Edit1 = GUICtrlCreateEdit("", 455, 248, 505, 177, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
$Edit2 = GUICtrlCreateEdit("", 1032, 112, 817, 313, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))

$BirthDay = GUICtrlCreateInput("", 456, 152, 50, 22)
GUICtrlCreateUpdown ( -1 )
$BirthMonth = GUICtrlCreateInput("", 525, 152, 50, 22)
GUICtrlCreateUpdown ( -1 )
$BirthYear = GUICtrlCreateInput("", 596, 152, 50, 22)
GUICtrlCreateUpdown ( -1 ,$UDS_NOTHOUSANDS)

$L1 = GUICtrlCreateLabel("/", 512 ,150, 8, 24)
GUICtrlSetFont(-1, 15, 400, 0, "Arial Narrow")
$L2 = GUICtrlCreateLabel("/", 584, 150, 8, 24)
GUICtrlSetFont(-1, 15, 400, 0, "Arial Narrow")
$L3 = GUICtrlCreateLabel("Nom", 456, 70, 36, 17)
$L4 = GUICtrlCreateLabel("Prénom", 608, 70, 36, 17)
$L5 = GUICtrlCreateLabel("Date de naissance", 456, 132, 200, 17)
$LabelAge = GUICtrlCreateLabel("", 672, 160, 200, 17)
$L6 = GUICtrlCreateLabel("Problèmes récurents", 1032, 85, 500, 17)
$L7 = GUICtrlCreateLabel("Maladies", 456, 208, 50, 17)
$DeletePat = GUICtrlCreateButton("Supprimer", 858, 171, 99, 41)

$List = GUICtrlCreateList("", 1616, 496, 273, 422)
GUICtrlSetData(-1,"")

GUICtrlCreateGroup("Notes sur le patient", 416, 504, 1177, 441)
$EditPatConsult = GUICtrlCreateEdit("", 440, 576, 1129, 345, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
GUICtrlSetData(-1, "")
$ImpCheck = GUICtrlCreateCheckbox("Saisie importante", 1312, 536, 97, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$SavePatient = GUICtrlCreateButton("Enregistrer", 858, 83, 99, 41)
$SaveNotes = GUICtrlCreateButton("Sauvegarder", 1448, 528, 91, 33)

GUISetState(@SW_SHOW)



Local $ArrGrey[20] = [$Edit1,$Edit2,$FirstName,$LastName,$LabelAge,$BirthDay,$BirthMonth,$BirthYear,$DeletePat,$L1,$L2,$L3,$L4,$L5,$L6,$SavePatient,$EditPatConsult,$List,$ImpCheck,$SaveNotes]
Func Grey()
   For $i = 0 To 19
      GUICtrlSetState($ArrGrey[$i], $GUI_DISABLE)
   Next
EndFunc

Func UnGrey()
   For $i = 0 To 19
      GUICtrlSetState($ArrGrey[$i], $GUI_ENABLE)
   Next
EndFunc
Func _DateStandardToCalcDate($sDate)
    Local $ArrD = StringSplit($sDate, '/')
    Return $ArrD[3] & '/' & $ArrD[2] & '/' & $ArrD[1]
EndFunc

Func Michel()
        $aFileList = _FileListToArray($Repertoire, "*")
        Local $Client[$aFileList[0]]
        For $i = 1 to $aFileList[0]
            $Client[$i-1] = GUICtrlCreateTreeViewItem($aFileList[$i], $Patients)
        Next
    EndFunc
Michel()


Grey()

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit
   Case $BirthDay,$BirthMonth,$BirthYear
      $RefDate = GuiCtrlRead($BirthDay)&"/"&GuiCtrlRead($BirthMonth)&"/"&GuiCtrlRead($BirthYear)
      $yBirthdate = _DateStandardToCalcDate($RefDate)
      $Age =  _DateDiff('y', $yBirthdate, _DateStandardToCalcDate(_NowDate()))
      GUICtrlSetData($LabelAge, $Age )
      ConsoleWrite ($yBirthdate & @CRLF)
   Case $NewPat,$NewPatButton
      UnGrey()

   Case $SavePatient
      Grey()
      $FilePath = $FolderName & "\" & GUICtrlRead($FirstName) & " " & GUICtrlRead($LastName)
      DirCreate($FilePath)
      _FileCreate ( $FilePath & "\RensGen.txt" )
      $hFile = FileOpen($FilePath & "\RensGen.txt"  , $FO_OverWrite)
      $RefDate = GuiCtrlRead($BirthDay)&"/"&GuiCtrlRead($BirthMonth)&"/"&GuiCtrlRead($BirthYear)
      FileWrite($hFile ,GUICtrlRead($FirstName) & @Crlf & GUICtrlRead($LastName) & @Crlf & $RefDate & @Crlf )

      Michel()

   EndSwitch
WEnd

Re: Treeview dynamique

Posté : sam. 04 févr. 2017 23:09
par mikell
En fait il faut modifier tes fonctions
Au lancement du script tu lis la base et tu affiches tout ça => fonction n°1
Le bouton Enregistrer lit les infos nouveau patient, met la base à jour, et actualise la liste affichée => fonction n°2
Est-ce qu'une listview ne suffirait pas pour afficher cette liste ? ça serait nettement plus simple à gérer...

Re: Treeview dynamique

Posté : dim. 05 févr. 2017 12:40
par Nicoloquinte
Mhhh je vois ce que je dois faire , mais , je peux pas rendre cela dynamique , a cause du fait que les dossiers soit triés par ordre alphabétique :

dossiers lus par autoit -> élément de la liste :
A -> A
B -> B
G -> G
H -> H

Imaginons , je rentre C


A -> A
B -> B
C -> G
G -> H
H -> C


ça décale tout et du coup , je doit recharger la liste .... a moins qu'il y ait une autre solution ...... :mrgreen:
Je pense que mon code est mal foutu , je lis les dossiers en fonction de leur ordre et non de leur noms ......

Re: Treeview dynamique  

Posté : dim. 05 févr. 2017 13:13
par mikell
je peux pas rendre cela dynamique
Bien sûr que si :roll:
Si j'ai bien compris pour stocker tes données tu as choisi de créer une ribambelle de dossiers avec le nom de chaque patient
A vue de nez je le ferais comme ça :
à l'ouverture du programme :
lecture des noms de dossiers dans une array , _ArraySort par sécurité, affichage de l'array dans la liste
à chaque nouveau patient :
lecture des données, création du dossier avec le nom, _ArrayAdd le nom dans l'array existante, re-_ArraySort et re-affichage
pour consulter un dossier :
clic dans la liste, get le nom sélectionné, ouverture du dossier correspondant et affichage

Re: Treeview dynamique

Posté : dim. 05 févr. 2017 15:40
par Nicoloquinte
Merci beaucoup , j'ai réorganisé mes fonctions : :mrgreen:
$aFileList = _FileListToArray($Repertoire, "*")
Local $Client[$aFileList[0]]
_ArraySort($Client)
AddItems()



Func REOrganize()
   $aFileList = _FileListToArray($Repertoire, "*")
   _ArrayAdd($Client, "")
   _ArraySort($Client)
   _GUICtrlTreeView_DeleteAll ($Patients)
   AddItems()
EndFunc

Func AddItems()
      For $i = 1 to $aFileList[0]
            $Client[$i -1] = GUICtrlCreateTreeViewItem($aFileList[$i], $Patients)
        Next
EndFunc
et le treeview c'est pour une autre fonctionnalité future (checkbox)