Bonjour tout le monde,

Dans mon programme, je dois générer un code-barre 39 (ou bien un code-barre EAN13) mais je ne sais pas par où commencer. J'ai déjà codé la partie qui récupère le code-barre venant de la douchette, branchée sur le port RS232.
En effectuant des recherche, j'ai trouvé quelques code-sources mais je n'arrive pas à les utiliser dans C++ Builder 6.

Voici la classe que j'ai trouvé :

le fichier .h
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
#if !defined(AFX_FCODEBAR39__INCLUDED_)
#define AFX_FCODEBAR39__INCLUDED_
 
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
 
class FCodeBar39
{
public:
    //constructeur et destructeur
    FCodeBar39(void);
    ~FCodeBar39(void);
    //Fonctions Get et Set
    void SetValue(CString str_value)        {m_value = str_value;}
    CString GetValue(void)                    {return m_value;}
    //autres fonctions
    int BC39_Decode(char letter);    //transforme la lettre en code barre(bit)
    void BC39_Expand(int code,char* wn)    //transforme le code barre(bit) en code barre(W N)
    void BC39_Draw(CDC* pDC,RECT* rect,BOOL HORIZ)    //dessine le code bar sur le device context
protected:
    CString m_value;
};
#endif // !defined(AFX_FCODEBAR39__INCLUDED_)
le fichier .cpp
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
#include "StdAfx.h"
#include "fcodebar39.h"
 
int FCodeBar39::BC39_Decode(char letter)
{
    int code;
    switch(letter){
        case '*':code = 0x0094;break;
        case '1':code = 0x0121;break;
        case '2':code = 0x0061;break;
        case '3':code = 0x0160;break;
        case '4':code = 0x0031;break;
        case '5':code = 0x0130;break;
        case '6':code = 0x0070;break;
        case '7':code = 0x0025;break;
        case '8':code = 0x0124;break;
        case '9':code = 0x0064;break;
        case '0':code = 0x0034;break;
        case 'A':code = 0x0109;break;
        case 'B':code = 0x0049;break;
        case 'C':code = 0x0148;break;
        case 'D':code = 0x0019;break;
        case 'E':code = 0x0118;break;
        case 'F':code = 0x0058;break;
        case 'G':code = 0x000D;break;
        case 'H':code = 0x010C;break;
        case 'I':code = 0x004C;break;
        case 'J':code = 0x001C;break;
        case 'K':code = 0x0103;break;
        case 'L':code = 0x0043;break;
        case 'M':code = 0x0142;break;
        case 'N':code = 0x0013;break;
        case 'O':code = 0x0112;break;
        case 'P':code = 0x0052;break;
        case 'Q':code = 0x0007;break;
        case 'R':code = 0x0106;break;
        case 'S':code = 0x0046;break;
        case 'T':code = 0x0016;break;
        case 'U':code = 0x0181;break;
        case 'V':code = 0x00C1;break;
        case 'W':code = 0x01C0;break;
        case 'X':code = 0x0091;break;
        case 'Y':code = 0x0190;break;
        case 'Z':code = 0x00D0;break;
        case '-':code = 0x0085;break;
        case '.':code = 0x0184;break;
        case ' ':code = 0x00C4;break;
        case '$':code = 0x00A8;break;
        case '/':code = 0x00A2;break;
        case '+':code = 0x008A;break;
        case '%':code = 0x002A;break;
        default: code = 0x0000;
    }
    return code;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void FCodeBar39::BC39_Expand(int code,char* wn)
{
    if(code & 0x0100){wn[0]='W';}else{wn[0]='N';}
    if(code & 0x0080){wn[1]='W';}else{wn[1]='N';}
    if(code & 0x0040){wn[2]='W';}else{wn[2]='N';}
    if(code & 0x0020){wn[3]='W';}else{wn[3]='N';}
    if(code & 0x0010){wn[4]='W';}else{wn[4]='N';}
    if(code & 0x0008){wn[5]='W';}else{wn[5]='N';}
    if(code & 0x0004){wn[6]='W';}else{wn[6]='N';}
    if(code & 0x0002){wn[7]='W';}else{wn[7]='N';}
    if(code & 0x0001){wn[8]='W';}else{wn[8]='N';}
    wn[9]='N';
    wn[10]=0x00;
}
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
int FCodeBar39::BC39_Draw(CDC* pDC,RECT* rect,BOOL HORIZ)
{
    char bcarray[400];
    char wn[11];
    char textcopy[100];
    int j,i_code,i_strlen,i_barwidth;
    int i_numchars;
    double d_xdim,d_offset,d_taillebarcode;
    HPEN holdpen;
    HBRUSH holdbrush;
    //si texte > 30 caractere on imprime pas le code à barre
    strcpy(textcopy,m_value);
    if(strlen(textcopy)>30){
        return 1;
    }
    //passe le texte en upper case
    strcpy(bcarray,"");
    strupr(textcopy);
    //charge la table des codes
    i_code=BC39_Decode('*');
    BC39_Expand(i_code,wn);
    strcpy(bcarray,wn);
    //concatene tous les codes sous forme de chaines
    for(j=0;j<(int)(strlen(textcopy));j++){
        i_code=BC39_Decode(textcopy[j]);
        if(i_code){
            BC39_Expand(i_code,wn);
            strcat(bcarray,wn);
        }
    }
    i_code=BC39_Decode('*');
    BC39_Expand(i_code,wn);
    strcat(bcarray,wn);
    //calcul le nb de caractéres necessaires; 10 bytes par caractere
    i_numchars=(int)(strlen(bcarray)/10);
    //selectionne type de pinceau et type de remplissage
    holdbrush=(HBRUSH)SelectObject(pDC->m_hDC,GetStockObject(BLACK_BRUSH));
    holdpen=(HPEN)SelectObject(pDC->m_hDC,GetStockObject(BLACK_PEN));
    i_strlen=strlen(bcarray);
    d_offset=0;
    //calcul la taille intrinseque d'une minibarre
    d_xdim=0;
    d_taillebarcode=0;
    for(j=0;j<i_strlen;j++){
        if(bcarray[j]=='W'){
            d_taillebarcode+=3;
        }
        else{
            d_taillebarcode+=1;
        }
    }
    //impression du code barre horizontal
    if(HORIZ){
        d_xdim=(rect->right-rect->left)/d_taillebarcode;
        for(j=0;j<i_strlen;j++){
            if(((j/2)*2)==j){
                //si c'est une barre
                if(bcarray[j]=='W'){
                    //dessine une barre pleine
                    i_barwidth=(int)(d_xdim*3);
                    Rectangle(pDC->m_hDC,rect->left+(int)d_offset,rect->top,rect->left+(int)d_offset+i_barwidth,rect->bottom);
                    d_offset+=(d_xdim*3);
                }
                else{
                    //dessine une barre vide
                    i_barwidth=(int)d_xdim;
                    Rectangle(pDC->m_hDC,rect->left+(int)d_offset,rect->top,rect->left+(int)d_offset+i_barwidth,rect->bottom);
                    d_offset+=(d_xdim);
                }
            }
            else{
                //laisse un espace blanc
                if(bcarray[j]=='W'){
                    d_offset+=(d_xdim*3);
                }
                else{
                    d_offset+=(d_xdim);
                }
            }
        }
    }
    else{  //impression verticale
        d_xdim=(rect->bottom-rect->top)/d_taillebarcode;
        for(j=0;j<i_strlen;j++){
            if(((j/2)*2)==j){
                //si c'est une barre
                if(bcarray[j]=='W'){
                    //dessine une barre pleine
                    i_barwidth=(int)(d_xdim*3);
                    Rectangle(pDC->m_hDC,rect->left,rect->top+(int)d_offset,rect->right,rect->top+(int)d_offset+i_barwidth);
                    d_offset+=(d_xdim*3);
                }
                else{
                    //dessine une barre vide
                    i_barwidth=(int)d_xdim;
                    Rectangle(pDC->m_hDC,rect->left,rect->top+(int)d_offset,rect->right,rect->top+(int)d_offset+i_barwidth);
                    d_offset+=(d_xdim);
                }
            }
            else{
                //laisse un espace blanc
                if(bcarray[j]=='W'){
                    d_offset+=(d_xdim*3);
                }
                else{
                    d_offset+=(d_xdim);
                }
            }
        }
    }
    SelectObject(pDC->m_hDC,holdpen);
    SelectObject(pDC->m_hDC,holdbrush);
    return 0;
}
Est-ce que quelqu'un peut m'aider ?
Merci