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 :

probleme avec une fonction de code barre


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut probleme avec une fonction de code barre
    bonjour;

    Je suis entrain de développer une application qui intègre une générateur de code barre.
    J’ai trouvé sur Internet les travaux de grandzebu (VB,C++…), mais quand je veux utiliser l’une de ses fonctions, ça marche pas !!!

    Par exemple la code39
    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
     
    long __stdcall Code39(char *BufIn, long SizeIn, unsigned char *BufOut) {
      int i;
      char x;
      if (SizeIn > 0) {
        *BufOut = (char) '*';
        for (i = 0; i < SizeIn; i++) {
          x = *(BufIn + i);
          //Vérifier si caractères valides
          //Check for valid characters
          if (x != 32 && x != 36 && x != 37 && x != 43 && (x < 45 || x > 57) && (x < 65 || x > 90)) return 1;
    	    *(BufOut + i + 1) = x;
        }
        *(BufOut + i + 1) = (char) '*';
    	} else {
    	  return 1;
    	}
      return 0;
    }
    Alors je fait appelle a la fonction en écrivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Code39((Edit1->Text).c_str(),(Edit1->Text).Length(),(Label1->Caption).c_str);
    Mais ça donne rien!!!

    merci d'avance.

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Bonjour !

    Je n'y connais rien au code barre et au code 39, mais en étudiant ton code apparemment le code 39 ne fais que :

    - Vérifier que les caractères sont valide (A-Z, 0-9 ou /+-$.% [espace])
    - Ajouter '*' avant et après la chaine de caractère si celle ci est valide.

    En partant de ce principe voici trois fonction qui pourrait répondre à ta question (celles-ci ne sont pas forcément optimisées, je montre ça juste pour l'idée):

    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
    bool isCode39( char c )
    {
    // teste qu'un caractère est valide : A-Z, 0-9,  - , . , espace , $ , / , + , %
      return(!(c != 32 && c != 36 && c != 37 && c != 43 && (c < 45 || c > 57) && (c < 65 || c > 90) )) ;
     
    }
     
    bool isValidCode39String( AnsiString aString )
    {
    // parcoure chaque caractère de la chaine et vérifie si il est valide
      for( int index=1; index <= aString.Length(); index++)
      {
        if( !isCode39( aString[index] ) )
        {
           return false ;
        }
      }
      return(true);
    }
     
    AnsiString StringToCode39( AnsiString aSource )
    {
    // construit la chaine (ajoute * avant et après si elle est valide
    // sinon retourne une chaine vide ""
      if( isValidCode39String( aSource ) )
        return( "*" + aSource + "*" ) ;
      else
        return( "" ) ;
    }
    A l'utilisation tu fais juste appel a la dernière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1->Caption = StringToCode39( Edit1->Text ) ;

  3. #3
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Sinon si tu souhaite utiliser ta fonction, utilise la plutôt comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      char c[100] ; // en admettant que ton code fais maximum 100 caractères
      if( !Code39(Edit1->Text.c_str(),Edit1->Text.Length(),c) )
      {
         Label1->Caption = c ; 
      }
      else
      {  
       ShowMessage( "Erreur dans le code d'entrée" ) ;
      }

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut merci
    Merci pour cette réponse net et précise, le programme marche super bien. J’ai une autre petite question :
    Dans les fonctions de code barre, y a une autre fonction : CODE128 son entête s’écrit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    long __stdcall Code128(char *BufIn, long SizeIn, long *SizeOut, unsigned char *BufOut)
    Quand j’indique pour SizeOut une valeur quelconque il m’affiche « cannot convert ‘int’ to ‘long’ ». Pouvez vous me dire ce que je dois donner comme paramètre.

    Merci encore

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Où se situe ton erreur exactement? Comment appelle tu ta fonction?

    Je ne connais pas le code de ta fonction, mais essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    long sizeout;
    char c[100] ;
    Code128(Edit1->Text.c_str(), Edit1->Text.Length(), &sizeout, c)

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    Oui c’est ça !!!!
    Avant ça n’a pas marché par ce que j’utilise pas une variable 'c' comme entré.
    Maintenant ça marche super bien.

    Merci beaucoup pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/09/2006, 11h06
  2. Réponses: 7
    Dernier message: 16/08/2006, 10h55
  3. [C#] probleme avec une fonction recursive
    Par K_!!! dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/08/2006, 18h22
  4. probleme avec une fonction enable() toute simple !!
    Par K_!!! dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/05/2006, 15h10
  5. [LG]Probleme avec une fonction
    Par xavier1936 dans le forum Langage
    Réponses: 7
    Dernier message: 08/02/2005, 22h48

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