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 10:57
Contact :
Status : Hors ligne

Treeview dynamique

#1

Message par Nicoloquinte » sam. 04 févr. 2017 15:51

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 : 5749
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique

#2

Message par mikell » sam. 04 févr. 2017 17:32

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 10:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#3

Message par Nicoloquinte » sam. 04 févr. 2017 17:50

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 : 5749
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique

#4

Message par mikell » sam. 04 févr. 2017 23:09

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 10:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#5

Message par Nicoloquinte » dim. 05 févr. 2017 12:40

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 : 5749
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Treeview dynamique  

#6

Message par mikell » dim. 05 févr. 2017 13:13

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 10:57
Contact :
Status : Hors ligne

Re: Treeview dynamique

#7

Message par Nicoloquinte » dim. 05 févr. 2017 15:40

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