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

Composants VCL Delphi Discussion :

Virtualtreeview


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut Virtualtreeview
    Bonjour,
    Comment peut on sauvegarder plusieurs colonnes d'un virtualtreeview?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Qu'entends-tu par "sauvegarder" ?
    Si c'est les données de chaque colonne, si tu as codé correctement, il suffit d'enregistrer les données sur lesquelles chacun des noeuds pointent
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    salut,

    explique toi un peu, car il est un peu nul le garçon a qui tu t'adresse...

    eh oui, je sais je sais mais autodidact et quand il a le temp..

    ce que je veux dire: [sauvegarder les donnees (nodes) du tableau qui est sur plusieurs colonnes.]

    cette commande ne me sauvegarde que la premiere colonne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vst2.SaveToFile(c:\sauvegarde.dat);

    Mon code d'origine :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    procedure TForm1.ListeMusiqueClick(Sender: TObject);
    var
      Repertoire : string;
      savartiste,savtitre, savalbum: string;
      minute, seconde : integer;
      DureeMp3 : string;
    begin
      NombreMp3 :=0;
      fillchar(TableauMP3,sizeof(TableauMP3),0);   // vider tout le tableau
      {determine le repertoire à scruter}
      Repertoire := FolderList.Directory; // On recupere le repertoire selectionné
      if CompareStr(copy(Repertoire,length(Repertoire),1),'\')<>0 then
           Repertoire := Repertoire + '\';
      TrouverRepertoire(Repertoire);  // appel de la procedure TrouverRepertoire
    NombreMp3:=0;
    while NombreMp3<=strtoint(edit5.Text) do begin
    MPEGaudio := TMPEGaudio.Create;
    if MPEGaudio.ReadFromFile(TableauMP3[NombreMp3].Chemin)then begin
    minute:= (trunc(MPEGaudio.Duration/60));
    seconde:= (trunc(((MPEGaudio.Duration/60)-(minute))*60));
    if seconde>=10 then DureeMp3:=inttostr(minute) + ':' + inttostr(seconde)
    else DureeMp3:=inttostr(minute) + ':' + '0'+ inttostr(seconde);
    end;
    MPEGaudio.Free;
      FileTag := TID3v2.Create;
      FileTag.ReadFromFile (TableauMP3[NombreMp3].Chemin);
      if Filetag.Exists then begin
        if filetag.Artist=savartiste then begin
          if VST2.HasChildren[Node] then begin
            node:=vst2.AddChild(nil);
            Data:=vst2.GetNodeData(Node);
            Data.ARTISTE:=FileTag.ARTIST;
            Data.Genre:=FileTag.Genre;
            if filetag.Title<>savtitre then begin
              node:=vst2.AddChild(node);
              Data:=vst2.GetNodedata(Node);
              Data.Album:=FileTag.Album;
              Data.Genre:=FileTag.Genre;
              Data.Piste:=FileTag.Track;
              Data.titre:=FileTag.Title;
              data.Chemin:= TableauMP3[NombreMp3].Chemin;
              Data.Duree:=DureeMp3;
            end;
          end
          else begin
            node:=node.Parent;
            node:=vst2.AddChild(node);
            Data:=vst2.GetNodeData(node);
            Data.Album:=FileTag.Album;
            Data.Genre:=FileTag.Genre;
            Data.Piste:=FileTag.Track;
            Data.titre:=FileTag.Title;
            data.Chemin:= TableauMP3[NombreMp3].Chemin;
            Data.Duree:=DureeMp3;
          end;
        end
        else begin
          node:=vst2.AddChild(nil);
          Data:=vst2.GetNodeData(Node);
          Data.ARTISTE:=FileTag.ARTIST;
          Data.Genre:=FileTag.Genre;
          data.Chemin:= TableauMP3[NombreMp3].Chemin;
          Node:=VST2.AddChild(Node);
          Data:=vst2.GetNodedata(Node);
          Data.Album:=FileTag.Album;
          Data.Genre:=FileTag.Genre;
          Data.Piste:=FileTag.Track;
          Data.titre:=FileTag.Title;
          data.Chemin:= TableauMP3[NombreMp3].Chemin;
          Data.Duree:=DureeMp3;
        end;
      end;
    savartiste:= filetag.Artist;
    savtitre:= filetag.title;
    savalbum:= FileTag.Album;
    inc(NombreMp3); // connaitre le nombre de MP3 trouvés
    VST2.Header.SortColumn:=4;
    VST2.Header.SortDirection := sdAscending;
    VST2.Header.SortColumn:=1;
    VST2.Header.SortDirection := sdAscending;
    VST2.Header.SortColumn:=0;
    VST2.Header.SortDirection := sdAscending;
    FileTag.Free;
    end;
    end;
     
    procedure  TForm1.TrouverRepertoire(Chemin : String);
    var
      Recherche : TSearchRec ;
      Trouver : Boolean;
    begin
      {On arrive dans un repertoire, on cherche tous les mp3 puis on cherche les repertoires.
      Si on trouve un repertoire, on "rentre dedans" et on recommence le processus...}
      TrouverFichier(Chemin,'*.mp3');  // Permet de lister tous les fichiers determinés d'un repertoire
      Try
        Trouver := (FindFirst(Chemin+'*.*',faDirectory,Recherche) = 0) ;
        while (Trouver) do
        begin
          {"." étant le meme repertoire (evite une boucle), ".." étant le repertoire pere}
          If (Recherche.Name <> '.') and (Recherche.Name <> '..') and ((Recherche.Attr and faDirectory) <> 0) Then
          Begin
            TrouverRepertoire(Chemin+Recherche.Name+'\');
            Trouver := (FindNext(Recherche) = 0) ;
          end
          else
            Trouver := (FindNext(Recherche) = 0);
        end;
      Finally
        FindClose(Recherche) ; { <= IMPERATIF pour libérer ressources Win32 }
      end;
    end;
     
    {Trouve tout les fichier d'un répertoire}
    Procedure TForm1.TrouverFichier(Chemin : String ; Masque : String);
    var
      Recherche : TSearchRec ;
      Trouver : Boolean;
    begin
      Try
        Trouver := (FindFirst(Chemin+Masque,FaAnyFile,Recherche) = 0) ;
        while (Trouver) do begin
          setlength(TableauMP3,NombreMp3+1); // tableau dynamique car on ne connait pas le nombre de MP3
          TableauMP3[NombreMp3].Chemin := (Chemin+Recherche.Name);  // chemin + le nom
          TableauMP3[NombreMp3].MP3 := copy(Recherche.Name,1,Length(Recherche.Name)-4);  // le nom sans ".mp3"
        inc(NombreMp3); // connaitre le nombre de MP3 trouvés
        edit5.Text:= inttostr(NombreMp3-1);
        Trouver := (FindNext(Recherche) = 0) ;
        end;
      Finally
        FindClose(Recherche) ; { <= IMPERATIF pour libérer ressources Win32 }
      end;
     
    end;
     
    procedure TForm1.SuppSelClick(Sender: TObject);
    begin
    vst2.BeginUpdate;
      vst2.DeleteSelectedNodes;
      vst2.EndUpdate;
    end;
     
    procedure TForm1.SuppToutClick(Sender: TObject);
    begin
    vst2.OnFreeNode := nil;
      vst2.Clear;
      SetLength(TableauMP3,0);
      vst2.OnFreeNode := vst2FreeNode
    end;
     
    procedure TForm1.SaveListClick(Sender: TObject);
    begin
    vst2.SaveToFile(drivecombobox1.text + '\' + edit1.text);
    end;
     
    procedure TForm1.LoadListClick(Sender: TObject);
    begin
    vst2.LoadFromFile(drivecombobox1.text + '\' + edit1.text);
    end;
     
    procedure TForm1.VST2SaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Stream: TStream);
    var
    Len: integer;
    begin
    Data := vst2.GetNodeData(node);
    Len := Length ( data.ARTISTE + data.TITRE);
    Stream.Write(Len, Sizeof (Len));
    Stream.Write(PChar( data.ARTISTE + data.TITRE )^, Len);
    end;
     
    procedure TForm1.VST2LoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Stream: TStream);
    var
    Len: integer;
    begin
    Data := vst2.GetNodeData(node);
    Stream.Read(Len, Sizeof (Len));
    SetLength(data.ARTISTE, Len);
    Stream.read(PChar( data.ARTISTE)^, Len);
    end;
     
    procedure TForm1.VST2Click(Sender: TObject);
    var
    minute, seconde : integer;
    begin
    FileTag := TID3v2.Create;
    ClearAll;
    if data.Chemin = '' then exit;
      if FileExists(data.Chemin) then
        if FileTag.ReadFromFile(data.Chemin) then
          if FileTag.Exists then begin
            TagExistsValue.Text := 'Oui';
            VersionValue.Text := '2.' + IntToStr(FileTag.VersionID);
            SizeValue.Text := IntToStr(FileTag.Size) + ' octets';
            TitleEdit.Text := FileTag.Title;
            ArtistEdit.Text := FileTag.Artist;
            AlbumEdit.Text := FileTag.Album;
            if FileTag.Track > 0 then TrackEdit.Text := IntToStr(FileTag.Track);
            YearEdit.Text := FileTag.Year;
            GenreEdit.Text := FileTag.Genre;
            CommentEdit.Text := FileTag.Comment;
            edit6.Text := '';
          end
          else TagExistsValue.Text := 'Non'
        else ShowMessage('Erreur lors de la lecture de: ' + Data.TITRE)
      else ShowMessage('Le fichier n''existe pas: ' + Data.TITRE);
    FileTag.Free;
    MPEGaudio := TMPEGaudio.Create;
    if MPEGaudio.ReadFromFile(data.Chemin)then begin
    minute:= (trunc(MPEGaudio.Duration/60));
    seconde:= (trunc(((MPEGaudio.Duration/60)-(minute))*60));
    if MPEGaudio.Valid then edit6.text := inttostr(minute)+ ':'+ inttostr(seconde);//FormatDateTime ('h:nn:ss', minute / (24.0 * 60 * 60 * 1000));//FormatFloat('.0', MPEGaudio.Duration) + ' sec.'
    end
    else  edit6.text := '';
    MPEGaudio.Free;
    end;
    cordialement

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Ouch ....
    Edite ton post et mets les balises code ainsi que l'indentation de ton code... Avant de te faire hurler dessus
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    merci,

    Est-ce que j'ai bien tout compris ce que tu viens de me dire?

    excuse moi c'est la premiere fois que je post quelque chose dans le forum. Je n'ais pas encors tout bien compris.

    Cordialement

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Je me demandais un truc:
    pourquoi tu fais SaveToFile sur ton TVirtualTreeView alors que tu as une structure de données? Au lieu de passer par le TVirtualTreeView, fait une méthode SaveToFile qui enregistre le tableau TableauMP3...
    Sinon, il semble que tu fasses un amalgame avec les pointeurs dans VST2SaveNode... Donne les déclarations de Data...
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 53
    Par défaut
    bonsoir,

    enregistrer le tableau c'est bien, mais avec 30 000 morceaux de musiques c'est long a traiter après.

    d'ailleur j'ai un autre souci, au bout de 11500 morceau traiter le systeme me dit gentillement: not enough Memory!!!!!

    cordialement

Discussions similaires

  1. Drag and drop d'une structure avec virtualtreeview
    Par laudur dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/05/2006, 16h14
  2. Filtrer un VirtualTreeView??
    Par Ben_Le_Cool dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/03/2006, 14h07
  3. virtualtreeView+Database
    Par nodel dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/01/2006, 19h28
  4. Remplir un VirtualTreeView
    Par Benjy dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/07/2005, 18h16
  5. Pb installation VirtualTreeView
    Par Benjy dans le forum C++Builder
    Réponses: 1
    Dernier message: 11/07/2005, 00h44

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