Treeview dynamique

Aide sur les Interfaces Graphique Utilisateurs (GUI).
Règles du forum
.
Répondre
Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Contact :
Status : Hors ligne

Treeview dynamique

#1

Message 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
Nico ¤_¤

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique

#2

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#3

Message 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
Nico ¤_¤

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique

#4

Message 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...
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#5

Message 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 ......
Nico ¤_¤

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 5973
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique  

#6

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Avatar du membre
Nicoloquinte
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 15 juil. 2016 11:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#7

Message 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)
Nico ¤_¤

Répondre