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

 Delphi Discussion :

generer et imprimer un code barre


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut generer et imprimer un code barre
    Bonjour,

    je cherche une solution pour imprimer un code barre à partir d'un nombre:
    1234567890 par exemple en code 128 ou 39 dans un canvas.

    Pour info: j'utilise Turbo delphi 2006.

    dans mes recherches je suis tombé sur le tuto "Impression de Code-barres avec Quick-Report" mais il semble qu'il manque des composants dans ma version de Delphi : TQRPrintable pour commencer

    j'ai bien récupéré les fichiers associés à ce tuto mais je sais pas quoi en faire.

    je me demande donc si ce tuto est compatible avec ma version de Delphi.

    sinon j'ai pu lire qu'il existe des polices capablent de créer le code barre.

    Pourriez vous me donner quelques conseils à ces sujets.

    cordialement

    ytech

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Tu trouves des polices code 39, par exemple sur www.dafont.com.
    Code 39 est très basique puisque chaque caractère de la table ascii est traduit en une suite de traits (9 traits dont 3 larges). C'est une conversion 1:1.

    Le code 128 est plus compliqué et demande de la calculation (par ex. "A" ne correspond pas au "A" de la table ascii).
    Il y a également 3 interprétations possibles. 128A, B ou C.
    A: contient les chiffres, caractères majuscules et codes de contrôle.
    B: contient les chiffres, caractères majuscules et minuscules.
    C: Uniquement du numérique, mais permet de coder 2 digits par caractère (table de 107 éléments -> codage de 00 à 99). Le code barres est plus-ou-moins 2x plus petit qu'avec un code 39 (Il y a en plus une information du code choisi: starta, startb ou startc et un checksum). A noter qu'il nécessite un nombre pair de digit.

    A toi de déterminer ce que tu dois coder et... la taille de ton étiquette
    Pour que l'information soit lisible (de sûr) avec tout les scanners, il faut qu'un trait fasse au minimum 0.2mm. (donc dans les ~4.2mm par caractère en code 39)

    Une explication du code 128 et les trois tables ici.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Merci pour ces infos
    j'ai donc Téléchargé différentes polices et réussi à imprimer des codes barres malheureusement aucune de mes douchettes arrivent à les lire

    En continuant mes recherches je suis tombé sur un site intéressant , en français, qui propose des polices et des exemples de Sources.

    je vais essayer de digérer ces nouvelles infos.

    je laisse cette discution ouverte quelques jours, j'aurai surement d'autres questions et je suis toujours à l'écoute d'observations.

    Ytech

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Bien sûr, tu n'as pas oublié de mettre des * avant et après le texte

    *moncode*

    edit: je dois avoir dit une bétise sur la longueur par caractère. ~2.4mm...

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Bon pour le code39 c'est bon ça marche.
    les * ont leur importance mais visiblement open office a du mal.

    par contre le code 128 c'est autre chose, j'ai bien compris la conversion.
    ma valeur ex: 1234567890 en code128 de type C donne ,BXnz

    par contre les caractères Start et Stop de typeC soit Ò & Ó me posent problème :
    1- c'est surement idiot mais je ne sait pas les saisir avec mon clavier.
    2- la police code128 ne les interprètent pas.

    Ytech
    Images attachées Images attachées  

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Avec cette police, StartC est le code 205 (Í) et Stop le 206 (Î) (105,106 en code 128). Tu peux les introduire à l'aide du pavé numérique (ex. Alt+205)

    Il faudra encore calculer le checksum et l'ajouter avant le Stop

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    il semble que tu es raison pour Í et Î le code binaire correspond mais chez moi
    alt214 = Í et alt215= Î par contre
    alt205= ═ et alt206 = ╬
    et les différences ne s'arrête pas là!

    je n'ai trouvé aucune table qui correspond réellement à ce que je peux vérifier

    enfin j'avance je vais tester ça et me frotter au checksum

    en attendant merci pour vos conseils

    Ytech

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Je me suis uniquement basé sur les codes de la police que tu nous as fournie

    Mais laissons tomber Open Office et les polices et revenons à du Delphi:

    Voilà l'unité que j'utilise pour imprimer des codes barres 128 (B ou C):

    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
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    unit BarCode128;
     
    interface
     
    uses Classes, SysUtils, Windows, Graphics, Types;
     
    type
      TCodeType = (ctB, ctC);
     
    procedure DrawBarCode128(aText :string; aCanvas :TCanvas; aBarSize :integer; aRect :TRect; aCodeType :TCodeType = ctC);
     
    implementation
     
    type
      TBarCode128 = array [0..5] of smallint;
     
    var
      BarSize :integer;  //min 0.2 mm
     
    const
      NbBar   = 11; //Code 128
     
    //http://www.barcodeman.com/info/c128.php3
      Char128B = ' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
      Codes128 :array [0..102] of TBarCode128 =
        ((2, 1, 2, 2, 2, 2),
        (2, 2, 2, 1, 2, 2),
        (2, 2, 2, 2, 2, 1),
        (1, 2, 1, 2, 2, 3),
        (1, 2, 1, 3, 2, 2),
        (1, 3, 1, 2, 2, 2),
        (1, 2, 2, 2, 1, 3),
        (1, 2, 2, 3, 1, 2),
        (1, 3, 2, 2, 1, 2),
        (2, 2, 1, 2, 1, 3),
        (2, 2, 1, 3, 1, 2),
        (2, 3, 1, 2, 1, 2),
        (1, 1, 2, 2, 3, 2),
        (1, 2, 2, 1, 3, 2),
        (1, 2, 2, 2, 3, 1),
        (1, 1, 3, 2, 2, 2),   //
        (1, 2, 3, 1, 2, 2),
        (1, 2, 3, 2, 2, 1),
        (2, 2, 3, 2, 1, 1),
        (2, 2, 1, 1, 3, 2),
        (2, 2, 1, 2, 3, 1),
        (2, 1, 3, 2, 1, 2),
        (2, 2, 3, 1, 1, 2),
        (3, 1, 2, 1, 3, 1),
        (3, 1, 1, 2, 2, 2),
        (3, 2, 1, 1, 2, 2),
        (3, 2, 1, 2, 2, 1),
        (3, 1, 2, 2, 1, 2),
        (3, 2, 2, 1, 1, 2),
        (3, 2, 2, 2, 1, 1),
        (2, 1, 2, 1, 2, 3),
        (2, 1, 2, 3, 2, 1),
        (2, 3, 2, 1, 2, 1),
        (1, 1, 1, 3, 2, 3),
        (1, 3, 1, 1, 2, 3),
        (1, 3, 1, 3, 2, 1),
        (1, 1, 2, 3, 1, 3),
        (1, 3, 2, 1, 1, 3),
        (1, 3, 2, 3, 1, 1),
        (2, 1, 1, 3, 1, 3),
        (2, 3, 1, 1, 1, 3),
        (2, 3, 1, 3, 1, 1),
        (1, 1, 2, 1, 3, 3),
        (1, 1, 2, 3, 3, 1),
        (1, 3, 2, 1, 3, 1),
        (1, 1, 3, 1, 2, 3),
        (1, 1, 3, 3, 2, 1),
        (1, 3, 3, 1, 2, 1),
        (3, 1, 3, 1, 2, 1),
        (2, 1, 1, 3, 3, 1),
        (2, 3, 1, 1, 3, 1),
        (2, 1, 3, 1, 1, 3),
        (2, 1, 3, 3, 1, 1),
        (2, 1, 3, 1, 3, 1),
        (3, 1, 1, 1, 2, 3),
        (3, 1, 1, 3, 2, 1),
        (3, 3, 1, 1, 2, 1),
        (3, 1, 2, 1, 1, 3),
        (3, 1, 2, 3, 1, 1),
        (3, 3, 2, 1, 1, 1),
        (3, 1, 4, 1, 1, 1),
        (2, 2, 1, 4, 1, 1),
        (4, 3, 1, 1, 1, 1),
        (1, 1, 1, 2, 2, 4),
        (1, 1, 1, 4, 2, 2),
        (1, 2, 1, 1, 2, 4),
        (1, 2, 1, 4, 2, 1),
        (1, 4, 1, 1, 2, 2),
        (1, 4, 1, 2, 2, 1),
        (1, 1, 2, 2, 1, 4),
        (1, 1, 2, 4, 1, 2),
        (1, 2, 2, 1, 1, 4),
        (1, 2, 2, 4, 1, 1),
        (1, 4, 2, 1, 1, 2),
        (1, 4, 2, 2, 1, 1),
        (2, 4, 1, 2, 1, 1),
        (2, 2, 1, 1, 1, 4),
        (4, 1, 3, 1, 1, 1),
        (2, 4, 1, 1, 1, 2),
        (1, 3, 4, 1, 1, 1),
        (1, 1, 1, 2, 4, 2),
        (1, 2, 1, 1, 4, 2),
        (1, 2, 1, 2, 4, 1),
        (1, 1, 4, 2, 1, 2),
        (1, 2, 4, 1, 1, 2),
        (1, 2, 4, 2, 1, 1),
        (4, 1, 1, 2, 1, 2),
        (4, 2, 1, 1, 1, 2),
        (4, 2, 1, 2, 1, 1),
        (2, 1, 2, 1, 4, 1),
        (2, 1, 4, 1, 2, 1),
        (4, 1, 2, 1, 2, 1),
        (1, 1, 1, 1, 4, 3),
        (1, 1, 1, 3, 4, 1),
        (1, 3, 1, 1, 4, 1),
     
        (1, 1, 4, 1, 1, 3),
        (1, 1, 4, 3, 1, 1),
        (4, 1, 1, 1, 1, 3),
        (4, 1, 1, 3, 1, 1),
        (1, 1, 3, 1, 4, 1),
        (1, 1, 4, 1, 3, 1),
        (3, 1, 1, 1, 4, 1),
        (4, 1, 1, 1, 3, 1));
     
    procedure DrawBars(aCanvas :TCanvas; aRect :TRect; var aLeft :integer; Bars :array of smallint);
    var
      i :integer;
     
    begin
      with aCanvas do
        for i := 0 to High(Bars) do
        begin
          if not Odd(i) then
            FillRect(Rect(aLeft, aRect.Top, aLeft +BarSize *Bars[i], aRect.Bottom));
     
          inc(aLeft, BarSize *Bars[i]);
        end;
    end;
     
    procedure DrawCodeB(aText :string; aCanvas :TCanvas; aRect :TRect);
    var
      i, j     :integer;
      Num      :integer;
      Left     :integer;
      CheckSum :integer;
     
    begin
      Left := aRect.Left +(RectWidth(aRect) -(NbBar *BarSize *(Length(aText) +3))) div 2;
     
      //Code 128 B
      DrawBars(aCanvas, aRect, Left, [2, 1, 1, 2, 1, 4]); //Start B
      CheckSum := 104; //Start B
     
      for i := 1 to Length(aText) do
      begin
        Num := Pos(aText[i], Char128B);
        DrawBars(aCanvas, aRect, Left, Codes128[Num]);
        inc(CheckSum, Num *i);
      end;
     
      CheckSum := CheckSum mod 103;
     
      DrawBars(aCanvas, aRect, Left, Codes128[CheckSum]);    //Checksum
      DrawBars(aCanvas, aRect, Left, [2, 3, 3, 1, 1, 1, 2]); //Stop
    end;
     
    procedure DrawCodeC(aText :string; aCanvas :TCanvas; aRect :TRect);
    var
      i, j     :integer;
      Num      :integer;
      Left     :integer;
      CheckSum :integer;
     
    begin
      Left := aRect.Left +(RectWidth(aRect) -(NbBar *BarSize *(Length(aText) div 2 +3))) div 2;
     
      //Code 128 C
      DrawBars(aCanvas, aRect, Left, [2, 1, 1, 2, 3, 2]); //Start C
      CheckSum := 105; //Start C
     
      i := 1;
      j := 1;
      while i < Length(aText) do
      begin
        Num := StrToInt(Copy(aText, i, 2));
        DrawBars(aCanvas, aRect, Left, Codes128[Num]);
        inc(CheckSum, Num *j);
        inc(j);
        inc(i, 2);
      end;
     
      CheckSum := CheckSum mod 103;
     
      DrawBars(aCanvas, aRect, Left, Codes128[CheckSum]);    //Checksum
      DrawBars(aCanvas, aRect, Left, [2, 3, 3, 1, 1, 1, 2]); //Stop
    end;
     
    procedure DrawBarCode128(aText :string; aCanvas :TCanvas; aBarSize :integer; aRect :TRect; aCodeType :TCodeType);
    var
      OldBrushColor :TColor;
      OldPenStyle   :TPenStyle;
     
    begin
      BarSize := aBarSize;
     
      OldBrushColor := aCanvas.Brush.Color;
      OldPenStyle   := aCanvas.Pen.Style;
     
      try
        aCanvas.Brush.Color := clBlack;
        aCanvas.Pen.Style   := psClear;
     
        case aCodeType of
          ctB: DrawCodeB(aText, aCanvas, aRect);
          ctC: DrawCodeC(aText, aCanvas, aRect);
        end;
     
      finally
        aCanvas.Brush.Color := OldBrushColor;
        aCanvas.Pen.Style   := OldPenStyle;
      end;
    end;
     
    end.
    Le code barres est centré dans aRect. aBarSize est la largeur d'un trait. A l'impression, aBarSize doit être calculé en fonction de la résolution de l'imprimante.

    L'appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.FormPaint(Sender: TObject);
    begin
      DrawBarCode128('1234567890', Canvas, 2, ClientRect, ctC);
    end;

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    oK je suis assez d'accord reprenons de l'autonomie

    je vais donc essayer de me familiariser avec cette Unité

    par contre chez moi il y a une petite erreur : RectWith non déclaré


    oui, je sais, j'abuse je suis un assisté

    cordialement

    Ytech
    Images attachées Images attachées  

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    (aRect.Right -aRect.Left)

  11. #11
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Ok ça fonctionne j'ai réussi à afficher le résultat dans un Timage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DrawBarCode128('(00)300000012'+edit1.Text,image1.Canvas, strtoint(combobox1.Text), ClientRect, ctb);
    mais je comprend pas comment je dois faire pour insérer le code barre dans un rectangle sur le canvas de l'imprimante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    begindoc;
       printer.canvas.roundRect(50,2000,pagewidth-50,3000,50,50);
       // je voudrais mon code centrer dans ce rectangle
      enddoc;
    de plus pourrais tu m'en plus à propos de ça

    A l'impression, aBarSize doit être calculé en fonction de la résolution de l'imprimante.
    Pourquoi ? et comment?

    Ytech

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Bon! J'ai réussi à trouver une solution après plusieurs heures à fouiller le net à la recherche d'un exemple.Pas simple pour le débutant, autodidacte, pas du métier que je suis.

    Donc ça fonctionne je dessine le code dans une image puis je l'imprime en faisant un "couper coller" ,si j'ai bien compris, vers le canvas de l'imprimante.

    j'aurais préférer le faire directement mais j'ai pas trouver la solution.

    Par contre je pense qu'il y à une petite erreur dans l'unité BarCode128 pour les codes Type B car il y a des différences entre les valeurs saisies et les valeurs lues ex:
    111222333 => lecture 222333444
    888000999 => 999111:::
    (00)12345=> )11*23456
    (01)12345=>)12*23456

    j'ai vérifié avec 2 types de lecteur diffèrent avec le même résultat

    les codes de type C fonctionnent sans problème .

    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
    procedure TForm1.Button1Click(Sender: TObject);
     var R1 : trect;
     K :integer;
    begin
    K :=3;  // facteur d'agrandissement du code à l'impression
        r1.Top :=(k*image1.canvas.ClipRect.Top)+2600;        // agradissement du code
       r1.left :=(k*image1.canvas.cliprect.Left) +1000;      // et positionnement sur la feuille
       r1.Right := (k*image1.canvas.ClipRect.Right)+1000;
       r1.bottom:= (k*image1.canvas.cliprect.bottom)+2600;
     
        DrawBarCode128(edit1.Text, image1.Canvas,4, clientrect, ctb); // dessin du CB dans image1
       if checkbox1.Checked= true then
       begin
        with printer do
      begin
                                     //impression
        BeginDoc;
        canvas.Pen.Width := 10;
        canvas.Rectangle(20,20,pagewidth-20,pageheight-20);
        canvas.RoundRect(30,2500,pagewidth-30,3500,10,10);
        printer.Canvas.CopyRect(R1,image1.canvas,image1.canvas.ClipRect);
        enddoc ;
      end;
    end;
    end;
    Ytech

  13. #13
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Citation Envoyé par Ytech123 Voir le message
    Par contre je pense qu'il y à une petite erreur dans l'unité BarCode128 pour les codes Type B
    En effet, je l'avais codé, mais jamais utilisé. Corrige cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Num := Pos(aText[i], Char128B) -1;
    DrawBarCode128 prend en paramètre un Canvas, tu peux passer celui de l'imprimante (Printer.Canvas).

    Pour la conversion mm -> point:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Rx(const aValue :Extended) :integer;
    begin
      Result := Trunc(aValue *
                      GetDeviceCaps(Printer.Handle, HORZRES) /
                      GetDeviceCaps(Printer.Handle, HORZSIZE));
    end;
     
    function Ry(const aValue :Extended) :integer;
    begin
      Result := Trunc(aValue *
                      GetDeviceCaps(Printer.Handle, VERTRES) /
                      GetDeviceCaps(Printer.Handle, VERTSIZE));
    end;
    Ce qui donnerait:

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      R :TRect;
      W :integer;
     
    const
      BarSize = 0.2;
     
    begin
      //Taille totale (Nb cara + StartB + CheckSum +Stop +2x QuietZone)
      W := ((Length(Edit1.Text) +3) *11 +20) *Rx(BarSize);
     
      //Rectangle à 10mm des bords de page, hauteur 10mm
      R := Rect(Rx(10), Ry(10), Rx(10) +W, Ry(20));
     
      Printer.BeginDoc;
     
      //Cadre avec un trait de 0.5mm
      Printer.Canvas.Pen.Width := Rx(0.5);
     
      //Angles avec rayon de 2mm
      Printer.Canvas.RoundRect(R, Rx(2), Ry(2));
     
      //Espacement entre cadre et code de 2mm
      InflateRect(R, 0, -Ry(2));
     
      //Code barres avec un trait de 0.2mm
      DrawBarCode128(edit1.Text, Printer.Canvas, Rx(BarSize), R, ctB);
     
      Printer.EndDoc;
    end;

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Super ça roule!

    Juste une petite erreur dans la dernière parti du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Angles avec rayon de 2mm
      Printer.Canvas.RoundRect(R, Rx(2), Ry(2));
    visiblement roundrect ne prend pas de Trect en parametre, mais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //Angles avec rayon de 2mm
      Printer.Canvas.Rectangle(R, Rx(2), Ry(2));
    fonctionne sans problème.

    j'ai encore une petite question concernant la clé de contrôle:
    dois-je la calculer et la passer avec la chaine à coder,je pense que oui , mais j'ai cru voir quelque chose qui ressemble à un calcul de clé dans l'unité BarCode128
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //..........
    inc(CheckSum, Num *i);
      end;
     
      CheckSum := CheckSum mod 103;
     
    //...................
    Cordialement,
    Ytech

  15. #15
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Le but de la fonction est bien de calculer le checksum, sinon on aurait pu utiliser ta police

    RoundRect vs Rectangle: J'ai jamais essayé Turbo D2006, mais c'est bizarre ton truc...

  16. #16
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    je vais donc revoir ma copie!

    je ferais des tests demain, mais de ce que j'ai put voir aujourd'hui la valeur de la clé ne s'affiche pas à la lecture du code barre.

    j'essayerai de revenir avec plus d'éléments.

    en attendant encore un merci pour ton aide

    Ytech

  17. #17
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    bon autant pour moi.

    effectivement le checksum est calculé et ajouté aux barres du code, car dans le cas contraire le code n'est pas lisible (j'ai fais le test).

    par contre je dois pas parlé de la même chose par "clé de contrôle" avec les logiciel édition étiquette que j'utilise j'ai la possibilité d'ajouter une clé de contrôle appelé MODULO10 qui ajoute automatiquement 1 chiffre à la chaine saisie. par ex : 1234567890 =>12345678905.

    c'est pourquoi je pense que je dois la calculer et la passer avec la chaine à coder a moins que je nage en pleine confusion ce qui n'est pas exclu

    pour info : concernant rounrect et Turbo D2006

    Ytech
    Images attachées Images attachées  

  18. #18
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 681
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 681
    Points : 13 089
    Points
    13 089
    Par défaut
    Citation Envoyé par Ytech123 Voir le message
    par contre je dois pas parlé de la même chose par "clé de contrôle" avec les logiciel édition étiquette que j'utilise j'ai la possibilité d'ajouter une clé de contrôle appelé MODULO10 qui ajoute automatiquement 1 chiffre à la chaine saisie. par ex : 1234567890 =>12345678905.
    Il faudrait surtout savoir ce qu'est censé recevoir l'application cible. Parce que rajouter ce "MODULO10", c'est plus du code 128...

    Citation Envoyé par Ytech123 Voir le message
    pour info : concernant rounrect et Turbo D2006
    Avec un peu d'imagination, tu feras facilement la conversion Rect en X1,Y1,X2,Y2,...

  19. #19
    Membre à l'essai
    Inscrit en
    Septembre 2008
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 34
    Points : 16
    Points
    16
    Par défaut
    Oui je suis d'accord! on s'oriente là vers du EAN128 .

    Je pense avoir maintenant tout les renseignements concernant les codes barres pour pouvoir continuer mon projet et clôturer ce fil de discution.

    Donc un grand merci à toi Andnotor pour ta patience ,ton temps , et ta pédagogie


    Cordialement
    Ytech

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/02/2011, 19h29
  2. Générer et imprimer code-barre
    Par bogsy15 dans le forum C++Builder
    Réponses: 41
    Dernier message: 20/08/2009, 18h44
  3. [AC-2007] generer code barre
    Par MiniLys06 dans le forum Modélisation
    Réponses: 8
    Dernier message: 11/05/2009, 08h39
  4. imprimer un code barre
    Par looping dans le forum Périphériques
    Réponses: 2
    Dernier message: 31/01/2008, 09h16
  5. Generer des codes barres
    Par HULK dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/11/2007, 10h29

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