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

C++Builder Discussion :

Tmemo au format hex


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut Tmemo au format hex
    Bonjour tout le monde,

    tout d’abord je précise que je travaille avec c++ builder 10 seatle
    je vous explique a peux près ce que je veux en essayant d’être le-plus claire possible

    sur mon projet j'ai un "opendialogue1" avec lequel je sélectionne un fichier avec l'extension .hex
    qui s'affiche dans le memo1 , jusqu'ici tout va bien ,
    j'ai bien le nombre de ligne exacte et ce que j’aimerai c'est faire des colonnes de 2 ou 4 chiffre
    au lieux d'avoir genre un truque comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    :
    :107010000000000000000000000000000000000070
    :1070200004019FE5AA10A0E35520A0E32030A0E3CF
    :10703000A03180E5A03190E5403013E2FCFFFF0A6B
    :107040000130A0E30C3180E50B30A0E3843080E513
    :107050008C1080E58C2080E50130A0E3803080E555
    j'aimerai plutôt un format comme sa c'est plus propre et plus lisible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    :
    :1070  1000  0000  0000  0000   000   000 0000  000  0000  070
    :1070  0004  19FE  5AA1  0A0E  3552  0A0E 320  0A0E3CF
    :1070  3000  3180  A031  E54   3013   FCFFFF0A  B
    :1070  0000  30A0  E30C  80E50B30A  3843080E  13
    :1070  0008  1080  58C2  80E50130A  803080E5


    j'ai parcourue le net a la recherche de solution mai j'ai vraiment rien trouver ici c'est mon dernier recoure

    voici mon code actuel au cas ou :
    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
     
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
     
      AnsiString op=" [ ";
     
      if(OpenDialog1->Execute()) {
      Form1->Caption="Slim SoftProgPic "+op+ OpenDialog1->FileName+" ]";
      AnsiString ExtensionApplication = ExtractFileExt(OpenDialog1->FileName).LowerCase(); // = l'extension".hex"
     
      //debut condition message erreur extension : message d'erreur.
      if(ExtensionApplication!=".hex"){
    	 MessageDlg("Erreur d'extension sur le fichier selectionner [ "+ExtensionApplication+" ]",mtError, TMsgDlgButtons() << mbOK, 0);return;
      }//fin de condition si message d'erreur
     
     
       TStringList *Liste    =   new TStringList;
       Liste->LoadFromFile(OpenDialog1->FileName);
       int NbLignes          =   Liste->Count;
       AnsiString NomComplet =   ExtractFileName(OpenDialog1->FileName);//Extraire nom du fichier
       AnsiString Chaine     =   Liste->Strings[NbLignes-1];
       ProgressBar1->Min     =   0;
       ProgressBar1->Max     =   NbLignes;
       Memo1->Font->Size     =   10;
       Memo1->Font->Name     =  "arial";
       Memo1->Font->Color    =   clBlue;
     
     
     
     
     
     
     
      for(int i=0;i<=NbLignes;i++){
     
    		ProgressBar1->Position++; // Incrémente la position de la ProgressBar1
    		Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
     
     
    		if(i==NbLignes){ //si chargement fichier terminer
    		Memo1->Font->Color=clBlue;
    		LabelCompteLigneFichier->Caption="Nombre de lignes : "+IntToStr(NbLignes);
    		int FichierHandle = FileOpen(OpenDialog1->FileName, fmOpenRead);
    		LabelTailleFichier->Caption=NomComplet+op+FormatFloat("### ### ### Ko",FileSeek(FichierHandle, 0, 2))+" ] ";
    		}//*********************************************************************
    		else{//si chargement fichier  pas terminer
    		Memo1->Font->Color=clGray;
    		LabelCompteLigneFichier->Caption="Chargement du fichier...";
    		}
     
     
       }
     
     
     }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    En regardant la méga liste Fr0sT-Brutal/awesome-delphi, on trouve ATViewer

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par foetus Voir le message
    En regardant la méga liste Fr0sT-Brutal/awesome-delphi, on trouve ATViewer
    Merci à toi je vais de ce pas y jeter un coup d'oeil
    Je te tien au courant.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    salut je viens de tester ATviewr du moin j'ai essayer, mai impossible a faire marcher avec c++builder seatle
    merci encore d'avoir essayer si il y a une autre solution je suis preneur en attendant je cheche encore de mon coter comment faire

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Déjà pour commencer, mets un filtre dans ton OpenDialog pour ne voir, ne sélectionner et n'ouvrir que des *.HEX !

    Ton fichier *.HEX c'est du HEX INTEL (donc avec son formatage spécifique par ligne genre :BBAAAATTHHHHHH.....HHHHCC) ?

    Dans ce cas, tu as juste besoin de TStringGrid (d'après ce que je me souviens de mon BCB 3 Pro) !
    Au moins, tous les champs seront bien séparés ce qui t'économise la couleur !
    Il faut quoi ... dix minutes pour le faire, le code pour extraire les données par champs ... c'est pas compliqué quand même!

    A plus !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par henderson Voir le message
    Salut !

    Déjà pour commencer, mets un filtre dans ton OpenDialog pour ne voir, ne sélectionner et n'ouvrir que des *.HEX !
    ...
    Bonjour henderson,
    Merci pour ton message ,pour ce qui est du filtre comme ce n'était pas le problème j'avais l'intention de le faire après avoir trouver la solution pour mon format hex.

    Et pour le Tstringrid je ne sais pas dutout comment faire pour mettre au format que je souhaite malgré toute mes recherche je ne trouve pas d 'explication claire sur ce sujet j'ai trouver comment faire pour convertir une chaîne de caractères en hex mai pour ce qui es de convertir les ligne se trouvant dans un fichier je ne trouve rien la dessus.

    Ensuite je ne doute pas que se soit pas compliquer mai pour sa faut qu' on m explique au moin une fois.
    C'est comme dire a un enfant combien font 2+2
    Si on lui a jamais expliquer il le sera jamais et pourtant c est pas compliquer comme tu dis

    En tout cas merci pour ton message
    Cdt.

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    TForm, TMenu, TOpenDialog et TMemo

    Une simple méthode suffit en réponse au OnClick de Open (MenuItem) !
    Ici, je traite au format HEX-INTEL.
    Mets : Memo1::ScrollBars sur ssBoth !
    Memo1::Align sur alClient !
    Memo1::Font sur Courrier New : 11 ou 12

    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
    void __fastcall TForm1::Open1Click(TObject *Sender)
    {
    //
    int c;
    int j, nb;
    AnsiString N;
    AnsiString BB;
    AnsiString AA;
    AnsiString HH;
    AnsiString TT;
    AnsiString CC;
    AnsiString TAB = "  ";
    if(OpenDialog1->Execute())
        {
        Memo1->Lines->Clear();
        Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
        for(j=0; j<Memo1->Lines->Count; j++)
            {
            N = Memo1->Lines->Strings[j];
            BB = N.SubString(1, 3);
     
    	// peut-être peut-on mieux faire pour caluler nb 
            c = BB[2];
            if(c <= '9')c = c - '0';
            else c = c - 'A' + 0xA;
            nb = c;
     
            c = BB[3];
            if(c <= '9')c = c - '0';
            else c = c - 'A' + 0xA;
            nb = (nb*16) + c;
     
            AA = N.SubString(4,4);
            TT = N.SubString(8,2);
            HH = N.SubString(10, nb * 2);
            CC = N.SubString(10 + (nb*2), 2);
            N = BB + TAB + AA + TAB + TT + TAB + HH + TAB + CC;
            Memo1->Lines->Strings[j] = N;
            }
        }
    }
    Pour info ce code est compilé et testé avec BCB 3 Pro sous WINDOWS XP !

    Je te laisse décliner tout ça sur un TStringGrid (consultes les propriétés de TStringGrid ... tu comprendras !)!
    Par contre, dans ce cas, il faut utiliser une TStringList pour charger le fichier
    Lorsque tu en as terminé avec le remplissage des cellules avec les sous-chaînes, la TStringList ne sert plus à rien !

    A plus !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Points : 55
    Points
    55
    Par défaut
    Merci infiniment , henderson je vais essayer d'adapter tout sa a ma version de c++ builder
    En même temps je vais décortiquer ce code pour voir un peut le fonctionnement je te tien courant
    Encore 1000 merci

Discussions similaires

  1. Format Intel HEX en binaire
    Par Shikamaru86 dans le forum C
    Réponses: 4
    Dernier message: 13/04/2007, 18h24
  2. afficher des bytes sous format hex
    Par zantar dans le forum MFC
    Réponses: 2
    Dernier message: 21/12/2005, 12h54
  3. Format d'un exe pour DOS et pour Windows
    Par Alfhiger dans le forum Assembleur
    Réponses: 4
    Dernier message: 12/06/2002, 11h57
  4. lire une image au format RAW
    Par Anonymous dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/05/2002, 00h11
  5. Réponses: 3
    Dernier message: 06/05/2002, 18h24

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