IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

pb de rafraichissement de treeview


Sujet :

Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut pb de rafraichissement de treeview
    bonjour, je suis nouveau dans le monde du delphi.
    ma première tache a été de créer un explorateur de fichier comme le fait windows pour l'utiliser sous citrix.
    l'explorateur est fait et marche en local.Mais , parce qu'il y en a un...
    J'ai utilisé un treeview dans le cazdre de gauche et un listview dans le cadre de droite.Et j'ai des problème de rafraichissement de ces éléments.
    par exemple quand je supprime un repertoir , il est effectivement supprimer "physiquement" mais il est toujours présent dans le treeview et le listview . J'ai beau plier et deplier l'arborescence.
    j'ai essayer avec "treeview.refresh" et "treeview.repaint" , ca ne marche pas.
    il ne me reconstruit pas l'arborescence.
    la seule solution que j'ai trouvé est rappeler la fonction d'initialisation qui me reconstruit tout l'explorateur et la , les changements sont pris en compte.
    mais c'est vraiment inélégant
    Surtout que je le fait pour "suprrimer" et pour "coller" bref des qu'il y a un changement.

    De plus l'arborescence du treeview se replie et je perd le chemin puisque je recréer le tout.( dans la fonction d'initialisation je fais avec des treeview.items.add())

    j'aimerai savoir comment rendre dynamique les treeview et les listview pour que les changement soit pris en compte tout de suite .

    je suppose que c'est trivial comme solution mais la j'avoue je sèche.
    merci d'avance pour vos reponses!

    ( et encore je les pas encore essayer sous citrix : a mon avis ca va pas se faire tout seul!!

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 569
    Points : 25 190
    Points
    25 190
    Par défaut
    un ShellTreeView et un ShellListBox, cherche sur le forum, il t a plein d'utilisation ...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci , je vais reprendre mon projet en utilisant les composant que tu m'a indiqué!

    mais est -t-il possible de réaliser la même chose qu'avec des Ttreeview et Tlistview classique?
    (par exemple: le lecteur C:\ ne doit pas aparaître dans l'arborescence)

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 569
    Points : 25 190
    Points
    25 190
    Par défaut
    Normalement, oui c'est possible, regarde le code de TDirectoryListBox et TFileListBox de l'onglet "Win 3.1"

    Normalement, avec des FindFirst / FindNext, pas de soucis tu construit ton arborescence, ensuite tu joue avec ce genre de Thread, tu peux être averti d'un changement de la situation du répertoire (voir option de FindFirstChangeNotification)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    procedure TNotifyFileChangeThread.Execute();
    var
       HandleNotification: THandle;
       Delay: Cardinal;
    begin
       ReadLastMessages;
     
       Delay := 1000;
       Sleep(Delay);
     
       HandleNotification := FindFirstChangeNotification(PChar(FDirName), True, FILE_NOTIFY_CHANGE_SIZE);
       try
          while not Terminated do
          begin
             case WaitForSingleObject(HandleNotification, Delay) of
                WAIT_OBJECT_0 :
                   begin
                     ReadLastMessages;
                     Synchronize(DoChange);
                     Delay := 1000;
                     FindNextChangeNotification(HandleNotification);
                   end;
                WAIT_ABANDONED : Terminate;
                WAIT_TIMEOUT :
                   begin
                      Synchronize(DoIdle);
                      Delay := 200;
                   end;
             end;
          end;
       finally
          FindCloseChangeNotification(HandleNotification);
       end;
    end;
    Personnellement, mon premier projet en 1999-2000, demandé par mon tuteur, fut un programme de recherche dans la base de registre, qui a fini par une sorte de Regedit complet (manque juste export/import, réseau, et affichage binaire, mais la recherche fourni un sous-arbre au lieu d'avoir un message à chaque noeud dans regedit)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut demande de precision
    merci pour ton aide , mais je suis un peu perdu.
    quel composant dois-je utilisé: shelllistview et shelltreeview ( onglet exemple)
    ou directorListBox et fileListBox (onglet win 3.1) ?

    depuis ton message de vendredi , j'avais recommencé le projet en utilisant les shelllistbox et shelltreview.
    Mais n'est il pas possible d'utiler la methode: FindFirstChangeNotification
    avec les composant lsitview et treeview (onglet win32)?
    dans ce cas je pourrai juste renre dynamique ce que j'avais dejà fait.

    tu me dis aussi de regarder le code de "directorListBox", c'est a dire regarder l'aide fourni avec F1?

    et il faut que je creer des threads? (sous windows ca doit etre galère )

    ces questions doivent paraitre naîve mais je debute en delphi.
    et en developpement sous windows

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 569
    Points : 25 190
    Points
    25 190
    Par défaut
    quel composant dois-je utilisé: shelllistview et shelltreeview ( onglet exemple)
    ou directorListBox et fileListBox (onglet win 3.1) ?

    normalement vaut mieux shelllistview et shelltreeview, ils sont plus "moderne"
    ils vont normalement se comporter comme Explorer

    Mais, si tu ne veux pas refaire ton programme lsitview et treeview sont des bons outils, mais tu devras gérer ton même le rempplissage et avec FindFirstChangeNotification dans un thread tu peux être averti des evolutions du dossier en cours de vue dans l'arborescence
    dans ce cas je pourrai juste renre dynamique ce que j'avais dejà fait.
    OUI

    regarde le code, c'est regarde les fichiers .pas dans Borland\delphi?\...

    et il faut que je creer des threads
    Piour la notification, oui, cherche dans le forum et dans les tuto, l'objet TThread, il n'est pas si compliqué ...

  7. #7
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    il ne faut pas oublié que avant de faire l insertion des node dans une treeview il faut faire un

    et a la fin de l'insertion


  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut limite de compêtence
    merci pour tous vos conseil,
    mais j'ai du mal a mettre en place les solutions que vous m'avez indiqué!


    je vais devoir mettre ce projet de côté , c'est dommage , il manquait pas grand chose. Mais le treeView qui se replie a chaque fois , c'est pas viable

    merci encore, de m'avoir aidé je mis remettrais quand j'aurai plus de temps et de meilleur connaissance en delphi.
    je continu d'apprendre , ce language est intêrressant.

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 569
    Points : 25 190
    Points
    25 190
    Par défaut
    Citation Envoyé par rvzip64
    il ne faut pas oublié que avant de faire l insertion des node dans une treeview il faut faire un

    et a la fin de l'insertion

    Bien, vu, j'ai corrigé bcp de lenteur des applications utlisant des RichEdit, Memo, TreeView, de mon employeur, j'ai halluciné quand j'ai découvert qu'ile ne connaissait pas ... j'ai même corrigé un code de TMS récemment, la gestion du TreeView était lamentable en perf ... ils utilisaient les propriétés Nodes très lente au lieu des fonctions GetFirstNode/GetNext

    Sinon il y a Expand ... mais bon je dis rien

  10. #10
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    De rien lol,

    mais je me rend compte qu'il a pas mal de monde qui oubli de mettre ces deux instuctions, alors que comme tu dis ça accèlère pas mal les perfs et que la treeview n'est pas le seul cmposant à utiliser ce principe.

Discussions similaires

  1. [TreeView] Rafraichissement des styles des items
    Par al2000 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 18/02/2012, 21h25
  2. [ASP.NET] Rafraichissement d'un treeview
    Par IGFP dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/10/2007, 14h04
  3. Rafraichissement d'un TreeView
    Par EssaiEncore dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/11/2005, 16h41
  4. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  5. Rafraichissement d'un treeview
    Par Anaxagore dans le forum IHM
    Réponses: 4
    Dernier message: 31/08/2003, 18h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo