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

Langage Delphi Discussion :

Sauvegarder les Items d'une TListBox


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut Sauvegarder les Items d'une TListBox
    salut à tous ,


    J'ai charger un fichier binaire dans une listbox et je souhaiterais enregistrer ce fichier aprés modification , j'ai utiliser la méthode listbox.items.savetofile mais celle ci ne focntionne pas .


    mon code :
    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
     
    function ReadFile(const Filename : string; Strs : TStrings): Boolean;
    var Buffer  : THexaLine;   { le buffer }
        Count   : cardinal;    { compteur offset de ligne | taille du buffer }
        TSL     : TStringList; { tstringlist temporaire pour ne pas ecrire directement dans Strs }
        TFS     : TFileStream; { }
        S       : String;      { String contenant le fichier}
        N, A    : Integer;     { Variable d'index }
        R       : TStringPos;  { Resultat de position des string }
    begin
       ReadFile := False;
       TSL := nil; { on nilliize pour eviter les erreur de liberation }
       TFS := nil; { }
       try
         { on crée la stringlist et on place les offsets de colones }
         TSL := TStringList.Create;
     
         { on init count a 0 }
         count := 0;
     
         { si le fichier existe }
         if FileExists(FileName) then begin
            { on crée le stream et on ouvre le fichier en mode lecture seule }
            TFS := TFileStream.Create(FileName, fmOpenRead);
            { on se place au debut (inutile mais plus sur) }
            TFS.Seek(0, soFromBeginning);
     
            SetLength(S, TFS.Size);
            TFS.Read(S[1], TFS.Size);
     
            { boucle de parsing du binaire }
            N := 0;
            while N < Length(S) do begin
              R := PosFirstOf(S, ValueList,N);
               N := R.Pos;
              //and not $F;
               if R.Index = -1 then break;
     
     
              A := R.Pos + Length(ValueList[R.Index])-1 ;
     
              while N <= A do Begin
                { on rempli le buffer }
                Count := $10;
                Move(S[N], Buffer[0], Count);
                { on place le buffer dans une chaine qu'on ajoute dans la liste
                  valeur hexa (hex) | }
                TSL.Add( format('%s ',[ HexaLineToStr(Buffer,Count),HexaLineToChr(Buffer,Count)] ) );
     
                     // HexaLineToStr(Buffer,Count),
     
     
               N := N+ Count;
              End;
     
            End;
     
            { on assigne les chaines de TSL a STRS }
            Strs.Assign(TSL);
     
            ReadFile := True;
         end;
     
       finally
         { on libere la liste temporaire et le stream }
         TFS.Free;
         TSL.Free;
       end;
    end;

    Le but et de sauvegarder le fichier binaire , merci pour toute aide ou conseil .

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    J'ai fait ICI pour un TreeView, le code peut s'adpater pour une TListBox, en quelques minutes ... mais si tu dois spécifiquement conserver le format que tu lis, il nous faudrait pour que l'on puisse t'aider un exemple de contenu du fichier et sa représentation dans une TListBox

    Sinon, ma proposition sauvegarde directement l'objet sous forme de DFM Binaire, ainsi que les data (record)

    Sinon pour tes Try, tu les écris à l'envers, inutile de mettre à nil ...

    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
       try
         { on crée la stringlist et on place les offsets de colones }
         TSL := TStringList.Create;
         try
     
            { on init count a 0 }
            count := 0;
     
            { si le fichier existe }
            if FileExists(FileName) then begin
               { on crée le stream et on ouvre le fichier en mode lecture seule }
              TFS := TFileStream.Create(FileName, fmOpenRead);
              try
                ...
              finally
                TFS.Free();
              end;
              ...
            end;
            ...
          finally
            TSL.Free();
          end;
        except
          on E: EOutOfMemory do
            ...
        end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut et merci pour l'astuce , ce que je voulais c'est d'enregistrer le fichier aprés les chnagements effectuer dans un Item de la listbox .


    l' image attachée montre le fonctionnement du programme .

    Si on séléctionne un Item on pourras l'editer à partir de l'Edit et l'ajouter à la listbox , le probléme se pose au niveau de l'enregistrement du fichier aprés l'avoir modifier .

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    es-tu limité en format de fichier ou non ?
    Si oui, quel est le format de fichier ?
    Si non, utilise TStream.WriteComponent ?

    Sinon, cela ressemble à un editeur hexadécimal, ... donc on fait tu veux juste lire et écrire un fichier binaire, je ne vois pas ce que tu pose donc problème, tu écris le fichier en parcourant ligne à ligne et tu peux applique la réciproque à HexaLineToStr ... et comme tu lit de 16 en 16 (quoi que en relisant, je n'ai pas compris ce PosFirstOf, ... un exemple de fichier serait l'idéale), tu peux très bien mettre un tag sur la ligne modifiée (utilise objects), et avec un seek tu peux donc facilement écraser le fichier en cours ...

    pourquoi deux paramètres pour un seul emplacement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TSL.Add( format('%s ',[ HexaLineToStr(Buffer,Count),HexaLineToChr(Buffer,Count)] ) );
    cela ne suffit pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TSL.Add(HexaLineToStr(Buffer,Count));
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut ,

    non je ne suis pas limité au format de fichier .
    le format du fuchier est binaire .
    merci pour le code je viens de changer la ligne à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TSL.Add(HexaLineToStr(Buffer,Count));
    Le seul soucis actuel c'est l'enregistrement du fichier binaire aprés que l'on ait modifier un Item de la listbox .

    La modification de l'item se fait par le button Modifier que voici son code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.ButtonModifierClick(Sender: TObject);
     
    begin
    ListBox1.Items[ListBox1.ItemIndex]:=Edit1.Text;
     
    end;

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Citation Envoyé par Marley_T Voir le message
    non je ne suis pas limité au format de fichier .
    le format du fuchier est binaire .
    lol, mais tout fichier est binaire, même un fichier texte, c'est son exploitation qui différe, ce que je te demande est-ce que ton fichier à une structure (genre un séparateur regulier, un délimiteur, ...) ou ce n'est qu'une simple suite de chiffre hexadécimal, et donc tu veux faire ton propre éditeur genre UltraEdit ... car ton algo de lecture pour lire un fichier binaire comme un éditeur Hexa est EXTREMEMENT compliqué (et pas optimisé avec un chargement complet du fichier dans une string ...) !

    Donc on en revient à l'utilisation de ce PosFirstOf et ce tableau ValueList qui sort de nulle part ... tu as un format de fichier lié au contenu de ValueList qui sert de séparateur ...

    Tient ce sujet devrait te plaire
    "Calculateur de Chaine de Caractere avec un séparateur", c'est la manipulation de fichier binaire, lecture et écriture ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut ,

    le format de la chaine est en format hexadecimal comme UltraEdit ou autre editeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    2C D0 BE BA 3F B1 A2 92 B4 27 81 5C 81 5D FC DA 
    A0 6B E4 EF 86 37 74 31 12 15 B6 DD 82 24 82 28 
    96 28 2D EB D2 0B 3B 18 88 D4 6C C8 DA D4 0B B9 
    E9 DE E4 AB 35 DE 06 19 2C EC 58 70 B0 68 47 5F 
    E1 47 A7 CF 7A 05 2D AC 92 4E 06 E6 D2 8E 44 A4 
    6E DE 59 A5 99 64 1A 17 13 12 BD E2 CB D3 71 0F 
    68 35 01 9E A1 DE 65 E4 42 E3 05 2A D1 13 64 48 
    41 2E F2 61 66 10 E9 5F 2B 13 49 87 7B BC 28 5F 
    73 AB 3F 5D B9 BA D3 46 63 67 38 02 17 2C D1 14
    BA AB 74 D9 44 E1 B1 D6 96 28 29 E7 CC 9E 4F B9
    j'ai utiliser une fonction d'un ami pour sauveragder le fichier que voici

    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
     
    procedure WriteFile(const Filename : string; Strs : TStrings);
    Var
       TFS     : TFileStream;
       i       : Integer;
       Buffer  : THexaLine;
    begin
         TFS := nil;
         try
            if FileExists(FileName) then
              // If application.MessageBox(pchar('Le fichier existe deja voulez vous le remplacer'),pchar('Remplacer?'),MB_YESNO+MB_ICONQUESTION) = IDYes Then
                  If Not deletefile(FileName) Then
                  begin
     
                       Exit;
                  end;
     
            { on crée le stream et on ouvre le fichier en mode ecriture}
            TFS := TFileStream.Create(FileName, fmCreate);
            { on se place au debut (inutile mais plus sur) }
            TFS.Seek(0,soFromBeginning);
     
     
            begin
     
               TFS.Write(Buffer,SizeOf(Buffer));
                 end;
            end;
     
         finally
             TFS.Free;
         end;
    end;

    Ensuite , lorsque on click sur le button enregistrer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm3.btn_enregistrerClick(Sender: TObject);
    begin
         If SaveDialog1.Execute Then
         begin
              WriteFile(OpenDialog1.FileName,Listbox1.Items);
         End;

    Le code enregsitre un fichier de 4 octets pas tout le fichier binaire .
    J'ai essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFS.Write(TFS,SizeOf(TFS));
    , pareil ça enregistre un fichier de 6 octets pas tout le fichier qui est sauvegarder .
    Le but et d'enregistrer tout le fichier .

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    C'est donc bien cela, c'est effroyablement compliqué !

    ta fonction WriteFile, écrit buffer mais ce dernier n'est jamais rempli !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFS.Write(TFS,SizeOf(TFS));
    TFS est un pointeur (un objet), donc 4 octets ... faudrait reprendre les bases de la programmation delphi ...

    tient, essaye ça, j'ai trouvé cela dans mon application à bordel, ça devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm3.btn_enregistrerClick(Sender: TObject);
    begin
         If SaveDialog1.Execute Then
         begin
              HexaStringToBinFile(OpenDialog1.FileName,Listbox1.Items.Text);
         End;
    end;
    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
    procedure HexaStringToBinFile(const OutFileName: string; const HexaText: string);
     
       function LowCharCase(C: Char): Char;
       asm
               CMP     AL,'A'
               JB      @@exit
               CMP     AL,'Z'
               JA      @@exit
               SUB     AL,'A' - 'a'
       @@exit:
       end;
     
    var
       HexaCleanText: string;
       HexaBuffer: array of Char;
       OutFile: file;
       I, Count: Integer;
    begin
       AssignFile(OutFile, OutFileName);
       Rewrite(OutFile, 1);
       try
          Count := 0;
          SetLength(HexaCleanText, Length(HexaText));
          ZeroMemory(@HexaCleanText[1], Length(HexaCleanText));
          for I := 1 to Length(HexaText) do
          begin
             if HexaText[I] in ['0'..'9', 'A'..'F', 'a'..'f'] then
             begin
                Inc(Count);
                HexaCleanText[Count] := LowCharCase(HexaText[I]);
             end;
          end;
          Count := Count div 2;
          SetLength(HexaBuffer, Count);
          HexToBin(@HexaCleanText[1], @HexaBuffer[0], Count);
          BlockWrite(OutFile, HexaBuffer[0], Count);
       finally
          CloseFile(OutFile);
       end;
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut ,

    je vais essayer ce code et te tenir au courrant en début de soirée et merci encore Shai ...

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    Merci beaucoup , mais ton code n'enregistre pas le fichier .
    Voici le projet complet .

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Ta TListBox contient 0x000000 00 00 00 ... c'est évidemment trop pour ma fonction qui écrit tout ce qui passe tant que c'est de l'hexa ... tu peux maintenant l'adapter ...

    Sinon ton code contient un bouton Enregistrer mais sans gestionnaire du Click ... et ma fonction sinon fonctionne pour écrire juste la partie 00 00 00, je l'ai testé !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut ,

    Le but et de sauvegarder tout le fichier (FileSize) , je t'ai uploader le projet complét pour avoir une idée ShaiLeTroll et voir si tu pourras sauvegarder tout le contenu du fichier .

  13. #13
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    SAlut
    Bon c'est moi qui ai fait la fonction WriteFile et Shail je prend ta remarque comme une attack personnelle ... lol mdr je blague.
    Alors deja je vais mettre le code que j'ai produit ... rien a voir avec ce qui a ete donné plus haut ...

    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 WriteFile(const Filename : string;Listing: TStrings);
    Var
       TFS     : TFileStream;
       i       : Integer;
       Buffer  : THexaLine;
    begin
         TFS := nil;
         try
            if FileExists(FileName) then
               If application.MessageBox(pchar('Le fichier existe deja voulez vous le remplacer'),pchar('Remplacer?'),MB_YESNO+MB_ICONQUESTION) = IDYes Then
                  If Not deletefile(FileName) Then
                  begin
                       //mettre un message...  Impossible d'effacer
                       Exit;
                  end;
     
            { on crée le stream et on ouvre le fichier en mode ecriture}
            TFS := TFileStream.Create(FileName, fmCreate);
            { on se place au debut (inutile mais plus sur) }
            TFS.Seek(0,soFromBeginning);
     
            For i := 0 to listing.Count -1 Do
            begin
                 If Listing[i] <> '' then
                 begin
                      Buffer := StrToLineHexa(Listing[i]);
                      TFS.Write(Buffer,SizeOf(Buffer));
                 end;
            end;
     
         finally
             TFS.Free;
         end;
    end;
    Y'a eu un gros copié coller malheureux je crois, enfin bon voila la verité est retabli et le fichier créé fait contient bien le bout de vidéo que tu cherche a extraire de ton fichier binaire.

    Je met en fichier joins pour que tu ais toutes le infos Shail, si je fais fausse route ca m'interesse de savoir pourquoi

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #14
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut Qwazerty ,

    Je chercher a sauvegarder tout le fichier binaire , si tu charge un fichier de
    100 KO tu va enregistrer un fichier de 100 KO .

    Le but c'est d'ouvrir un fichier binaire, le lire , ensuite l'enregsitrer .

    Ta fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFS.Write(Buffer,SizeOf(Buffer));
    n'enregistre pas tout le fichier binaire et c'est le but rechercher .

    On cherche à ouvrir un fichier de n'importe quelle taille , ensuite l'enregistrer .

  15. #15
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Lol, le code Qwazerty fonctionne en affichant QUE 00 00 00 et en ajoutant pas les 0x000001 00 00 00 ... tout comme la mienne, je l'ai testé ! (j'ai remplacé StrToLineHexa par HexToBin ... en fait le code est presque le même, l'un avec Stream, l'autre avec fonction pascal)

    tu te prends la tête Marley_T , ... il faut poser ton travail, tu affiche à l'écran plus de données qu'en contient le fichier, il faut donc faire la fonction pour éliminer les infos écrans et n'écrire que l'utile ... prend du recul, écrit clairement la fonctionnalité sur le papier, et ensuite tu programme avec delphi ... reviens nous voir si tu as un problème technique concret, pour le moment, tu ne sais pas d'où tu viens, ni où tu vas ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  16. #16
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    salut ,


    On ouvre un fichier binaire , la premiére ligne du fichier dans la listbox est
    11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
    On va la modifier et la remplacer par
    33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
    On Enregistre les modifs et on ferme le fichier qu'on a ouvert .
    C'est le but rechercher .
    Fichiers attachés Fichiers attachés

  17. #17
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut
    Je crois que tu as du mal à piger,

    tu lis
    "11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 "
    tu affiche
    "0x00000000 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 ..............."
    donc tu dois découper chaque ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Buffer := Copy(ListBox.Items[I], 12, 47));
    Buffer := TraductionHexa(Buffer);
    Write(Buffer, Length(Buffer));
    Attention mon Buffer est une chaine, donc c'est Length et non pas SizeOf ... d'ailleurs passage par la structure HexaLine est totalement inutile !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  18. #18
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    RE ,


    Non !

    - On Ouvre un fichier Binaire .
    - La 1 ére ligne affichée dans la listbox de ce fichier est la ligne
    1111111111111111111111111111111111111111111111111111
    On va la modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items[ListBox1.ItemIndex]:=Edit1.Text;
    Dans EDIT1 on mets cette ligne
    2222222222222222222222222222222222222222222222222222

    La ligne 2222222222222222222222222222222222222222222222
    Va remplacer la ligne
    111111111111111111111111111111111111111111111111111111
    On enregistre la MODIFICATION et on FERME le fichier .


    As tu compris cela ?

  19. #19
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 94
    Points : 34
    Points
    34
    Par défaut
    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
     procedure TForm3.SauvegarderClick(Sender: TObject);
    var
     
       TFS     : TFileStream;
       MEM     : TMemoryStream;
       Buffer  : THexaLine;
       S        : string;
    begin
     
     
     
      if SaveDialog1.Execute() then begin
      MEM.Write(Fichier, SizeOf(THexaLine));
      MEM.Write(S[1], SizeOf (Buffer));
     
     
          ListBox1.Items.SaveToStream(TFS);
     
      finally
     
    TFS.Free;
    MEM.Free;
     
      end;
     
     
     
    end;

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 534
    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 534
    Points : 25 082
    Points
    25 082
    Par défaut


    1- Projet1.rar est différent de ce que tu dis ci-dessous, on ne sait plus où aller
    2- Quel est l'intérêt de mettre un code aussi incohérent que celui ci dessus ?

    Enfin, tu peux utiliser HexaStringToBinFile que j'ai déjà fourni, cela fonctionne parfaitement avec un chargement complet du fichier dans une TListBox ... elle est juste gourmande en mémoire ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Lire les items d'une SyslistView32 d'un autre process
    Par DiGiTAL_MiDWAY dans le forum Windows
    Réponses: 5
    Dernier message: 20/10/2006, 21h10
  2. Réponses: 2
    Dernier message: 31/07/2006, 09h18
  3. [VBA-E] compter les item d'une listbox
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/07/2006, 15h29

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