PhilLu
Messages postés251Date d'inscriptionlundi 9 novembre 2009StatutMembreDernière intervention11 mai 2021 12 oct. 2013 à 14:56
Personnellement, j'utilise la fonte Code39r.ttf téléchargeable gratuitement.
Je crée un TRichEdit dans lequel il est possible de choisir sa fonte, ligne par ligne.
par exemple:
SIDcong:= Edit1.Text;
RichEdit1.Clear;
RichEdit1.SelAttributes.Size:=30;
RichEdit1.SelAttributes.Name:='code39';
RichEdit1.SetSelText(SIDcong + #13#10); //impression du barcode
RichEdit1.SelAttributes.Size:=10;
RichEdit1.SetSelText(' '+SIDcong); //impression en format lisible
Richedit1.Visible:=True; //visu rapide avant impression; Richedit est visible:=False par défault
Richedit1.Print('My Document Name');
sleep(1500);
Richedit1.Visible:=False;
De plus il est possible de charger la fonte dynamiquement uniquement pour l'appli (sur form create):
//--------------chargement de la fonte barcode 39----------------------------------
AddFontResource('c:\code39r.TTF') ;
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
puis déchargement quand on quitte (sur FormDestroy):
//--------------déchargement de la fonte barcode 39----------------------------------
RemoveFontResource('c:\code39r.TTF') ;
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 7 oct. 2007 à 19:25
tu as raison pour l'icône, j'aurais du joindre le fichier barcode.dcr, qui contient l'icône pour la palette de composant. je mets à jour ceci, si tu veux que l'icône apparaisse, il te faut desinstaller le composant puis le réinstaller.
non, je ne suis pas un pro, seulement un peu touche à tout.
Hrod
Messages postés6Date d'inscriptionmercredi 22 novembre 2006StatutMembreDernière intervention 7 octobre 2007 7 oct. 2007 à 10:57
Encore moi... pour dire : super ! J'ai enfin téléchargé cette bibliothèque "graphicex" et réinstallé le composant, tout fonctionne désormais à la perfection.
Bravo Damien, j'aimerais être capable de faire des choses pareilles.
Seul petit regret, c'est que l'icone du composant dans la palette ne soit plus la même. Comme je ne sais pas du tout comment la changer, elle restera ainsi.
En attendant, une fois encore, un grand MERCI.
Hrod
Messages postés6Date d'inscriptionmercredi 22 novembre 2006StatutMembreDernière intervention 7 octobre 2007 7 oct. 2007 à 10:04
Merci Dvarrel, je suis un peu rassuré ! Et bravo pour ta rapidité d'intervention, c'est du "top moumoute". Professionnel ?
Je suis décidément très nul (ho oui!!!) mais maintenant je n'arrive pas à dégotter ce "graphicex.dcu" requis. Faut dire que quand il y a un gravier dans les lentilles, il est pour moi ! lol!
Merci encore pour ton aide en tous cas.
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 7 oct. 2007 à 09:16
tu as raison Hrod, il y avait un bug dans mon prog. C'est désormais résolu.
les propriétés du composant :
composant codebarre 39 EAN8 EAN13, redimensionnable
propriété BarCodeType : type du code barre
propriété BarWidth : largeur des barres de base
propriété BarWidthXL : largeur des barres larges
propriété Code : le code barre à afficher
propriété WithText : avec ou sans le code en texte clair
propriété bitmap : contient le bitmap du code barre
propriété printratio : facteur d'échelle pour la propriété bitmapforprint
propriété bitmapforprint : contient le bitmap du code barre mis à l'échelle avec printratio
propriété IsfixedWidth : force la largeur du codebarre (peut dégrader la qualité)
damien varrel
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 6 oct. 2007 à 21:00
je regarde et te tiens au courant
Hrod
Messages postés6Date d'inscriptionmercredi 22 novembre 2006StatutMembreDernière intervention 7 octobre 2007 6 oct. 2007 à 20:16
Mais si Dvarrel, de beaucoup ! Ces composants sont rares, celui-là est une aubaine précieuse.
Mais j'ai besoin d'un peu d'aide, car j'ai toujours un pb que je n'arrive pas à cerner. quand je rentre le code brut 08105839935, par exemple, le composant affiche 3081058993510 - donc complété du trailing et de la checksum i presume -- mais le "3" entre le "8" et le "9" disparait. Est-ce normal (un effet du codage prévu par la norme ?) ou est-ce encore moi qui marche à coté de mes lignes de code ? J'ai tendance à penser que c'est normal car le code produit est lisible par la douchette, qui sort 3081058993510, donc toujours pas de "3" -- ce qui là encore me semble normal puisqu'il n'est plus dans le code graphique produit par le composant -- mais je suis étonné que le décodeur ne restitue pas le chiffre manquant (s'il sagissait d'un calcul, il serait peut être restituable sous certaines conditions ?), ce qui me fait douter du code graphique produit...
Bref, je patauge lamentablement. Coin coin coin !
Je précise pour ceux que mon ignorance flagrante pourrait énerver que je n'ai pas programmé depuis bientôt 10 ans... et que c'est très dur de s'y remettre, surtout à mon âge avancé !
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 6 oct. 2007 à 19:06
de rien...
Hrod
Messages postés6Date d'inscriptionmercredi 22 novembre 2006StatutMembreDernière intervention 7 octobre 2007 6 oct. 2007 à 17:56
Hum...
Au temps pour moi, c'était une erreur de ma part : ce composant marche à la perfection. Merci à son auteur et à tous ceux qui ont contribué à son amélioration.
Hrod
Messages postés6Date d'inscriptionmercredi 22 novembre 2006StatutMembreDernière intervention 7 octobre 2007 6 oct. 2007 à 13:09
Bonjur
Fameux composant, et très utile ! En tous cas pour moi, je remercie son auteur.
Cependant il me semble qu'il y a des erreurs de calcul par moments, ou alors c'est moi qui fait une mauvaise manip.
Par exemple en mode ean13, si j'entre le nombre 308100798932, le composant code 3081007989236 --> au lieu de xxx89326 pensais-je.
Est-ce vraiment un petit bug ou est-ce moi qui suis trop fatigué pour voir mes erreurs ? :)
D'une je ne suis pas l'auteur de ce composant.
De deux, le composant BarCode est dans le zip, et c'est justement tout l'intérêt de cette source.
Faudrait quand même réfléchir par moments... à se demander si tout le monde sait ce que ça veut dire.
copass35
Messages postés1Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention11 septembre 2007 11 sept. 2007 à 10:35
salut florenth
j'ai essayé d'exécuter le composant codebarre
mais il me manque un composant TbarCode qu je n'ai pas pus trouver.
Merci de ton aide
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 2 août 2007 à 16:49
@philu :
je ne me sers pas du code 128, par contre je vais intégrer le code EAN13 très utilisé dans le commerce (tous les produits ont un code EAN13)
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 2 août 2007 à 16:46
merci F0xi pour tes conseils mais je souhaite que mon code reste le plus lisible possible, et on n'est pas à 100 octets près de nos jours, surtout pour une constante :)
pour les méthodes de propriétés, peux-tu confirmer car j'avais regarder dans plusieurs tuto avant de les mettre dans protected
bit 0 : (C39[index] and $0001) = $0001 (bit 0 = 1)
bit 1 : (C39[index] and $0002) = $0002 (bit 1 = 1)
bit 2 : (C39[index] and $0004) = $0004 (bit 2 = 1)
bit 3 : (C39[index] and $0008) = $0008 (etc)
bit 4 : (C39[index] and $0010) = $0010
bit 5 : (C39[index] and $0020) = $0020
bit 6 : (C39[index] and $0040) = $0040
bit 7 : (C39[index] and $0080) = $0080
bit 8 : (C39[index] and $0100) = $0100
ce qui fait passer le tableaux de code de 44*9 octets a 44*2 octets.
et les methodes de propriétés sont censée toujours etre dans private et non protected.
Pour l'exemple: c'est juste histoire d'avoir un projet tout fait dans lequel il y a un édit permettant de changer le code barre sans avoir de besoin d'installer le composant, de créer un nouveau projet, de le poser et de faire quelques tests.
Les gens sont faignants de nos temps ^^
Et merci pour le "-1", j'avais totalement zappé (j'ai écris le code en live, pas testé dans delphi).
A quand une petite mise à jour ?
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 31 juil. 2007 à 14:47
il faut mettre :
# TraceCode(Pos(FCode[i], AuthorizedChars)-1);
au lieu de :
# TraceCode(Pos(FCode[i], AuthorizedChars));
:)
dvarrel
Messages postés13Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention 7 octobre 2007 31 juil. 2007 à 14:19
merci Florenth,
pour le code d'exemple, il n'y a pas grand chose à dire, à part poser le composant sur une fiche, et changer sa propriété "Code" !
Après dépendant de l'appli on imprime le code barre (moi j'exporte mes listes de codebarre en pdf avec un compo freeware).
Pour un premier composant visuel, je trouve celui ci très soigné. Continue comme ça ^^
Sinon, petite amélioration: comme l'ordre de tes 44 cases du tableau est le même que ta chaîne AuthorizedChars, tu peux tout simplement le déclarer comme
C39: array[0..43, 0..8] Byte =
((0,0,0,1,1,0,1,0,0), // Pour le caractère '0'
(1,0,0,1,0,0,0,0,1), // Pour le caractère '1'
...,...); // etc...
Ce qui te permet d'économiser une boucle dans la procédure Paint().
En effet, ceci:
# //Car. Composition B S B S B S B S B
# X1:=0;
# for i:=1 to length(Fcode) do
# begin
# //cherche le caractère et trace le code
# for j:=0 to length(C39)-1 do
# if C39[j].C=Fcode[i] then
# begin
# TraceCode(j);
# break;
# end;
# end;
devient cela :
# for i := 1 to length(FCode) do
# TraceCode(Pos(FCode[i], AuthorizedChars));
De même, tous les C39[index].B[i] seront transformés en C39[index, i] et les C39[index].C en AuthorizedChars[index]
Ceci permet d'éviter une duplication des données !
Sinon, un petit code d'exemple serait le bienvenu !
12 oct. 2013 à 14:56
Je crée un TRichEdit dans lequel il est possible de choisir sa fonte, ligne par ligne.
par exemple:
SIDcong:= Edit1.Text;
RichEdit1.Clear;
RichEdit1.SelAttributes.Size:=30;
RichEdit1.SelAttributes.Name:='code39';
RichEdit1.SetSelText(SIDcong + #13#10); //impression du barcode
RichEdit1.SelAttributes.Size:=10;
RichEdit1.SetSelText(' '+SIDcong); //impression en format lisible
Richedit1.Visible:=True; //visu rapide avant impression; Richedit est visible:=False par défault
Richedit1.Print('My Document Name');
sleep(1500);
Richedit1.Visible:=False;
De plus il est possible de charger la fonte dynamiquement uniquement pour l'appli (sur form create):
//--------------chargement de la fonte barcode 39----------------------------------
AddFontResource('c:\code39r.TTF') ;
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
puis déchargement quand on quitte (sur FormDestroy):
//--------------déchargement de la fonte barcode 39----------------------------------
RemoveFontResource('c:\code39r.TTF') ;
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
7 oct. 2007 à 19:25
non, je ne suis pas un pro, seulement un peu touche à tout.
7 oct. 2007 à 10:57
Bravo Damien, j'aimerais être capable de faire des choses pareilles.
Seul petit regret, c'est que l'icone du composant dans la palette ne soit plus la même. Comme je ne sais pas du tout comment la changer, elle restera ainsi.
En attendant, une fois encore, un grand MERCI.
7 oct. 2007 à 10:04
Je suis décidément très nul (ho oui!!!) mais maintenant je n'arrive pas à dégotter ce "graphicex.dcu" requis. Faut dire que quand il y a un gravier dans les lentilles, il est pour moi ! lol!
Merci encore pour ton aide en tous cas.
7 oct. 2007 à 09:16
les propriétés du composant :
composant codebarre 39 EAN8 EAN13, redimensionnable
propriété BarCodeType : type du code barre
propriété BarWidth : largeur des barres de base
propriété BarWidthXL : largeur des barres larges
propriété Code : le code barre à afficher
propriété WithText : avec ou sans le code en texte clair
propriété bitmap : contient le bitmap du code barre
propriété printratio : facteur d'échelle pour la propriété bitmapforprint
propriété bitmapforprint : contient le bitmap du code barre mis à l'échelle avec printratio
propriété IsfixedWidth : force la largeur du codebarre (peut dégrader la qualité)
damien varrel
6 oct. 2007 à 21:00
6 oct. 2007 à 20:16
Mais j'ai besoin d'un peu d'aide, car j'ai toujours un pb que je n'arrive pas à cerner. quand je rentre le code brut 08105839935, par exemple, le composant affiche 3081058993510 - donc complété du trailing et de la checksum i presume -- mais le "3" entre le "8" et le "9" disparait. Est-ce normal (un effet du codage prévu par la norme ?) ou est-ce encore moi qui marche à coté de mes lignes de code ? J'ai tendance à penser que c'est normal car le code produit est lisible par la douchette, qui sort 3081058993510, donc toujours pas de "3" -- ce qui là encore me semble normal puisqu'il n'est plus dans le code graphique produit par le composant -- mais je suis étonné que le décodeur ne restitue pas le chiffre manquant (s'il sagissait d'un calcul, il serait peut être restituable sous certaines conditions ?), ce qui me fait douter du code graphique produit...
Bref, je patauge lamentablement. Coin coin coin !
Je précise pour ceux que mon ignorance flagrante pourrait énerver que je n'ai pas programmé depuis bientôt 10 ans... et que c'est très dur de s'y remettre, surtout à mon âge avancé !
6 oct. 2007 à 19:06
6 oct. 2007 à 17:56
Au temps pour moi, c'était une erreur de ma part : ce composant marche à la perfection. Merci à son auteur et à tous ceux qui ont contribué à son amélioration.
6 oct. 2007 à 13:09
Fameux composant, et très utile ! En tous cas pour moi, je remercie son auteur.
Cependant il me semble qu'il y a des erreurs de calcul par moments, ou alors c'est moi qui fait une mauvaise manip.
Par exemple en mode ean13, si j'entre le nombre 308100798932, le composant code 3081007989236 --> au lieu de xxx89326 pensais-je.
Est-ce vraiment un petit bug ou est-ce moi qui suis trop fatigué pour voir mes erreurs ? :)
11 sept. 2007 à 16:31
De deux, le composant BarCode est dans le zip, et c'est justement tout l'intérêt de cette source.
Faudrait quand même réfléchir par moments... à se demander si tout le monde sait ce que ça veut dire.
11 sept. 2007 à 10:35
j'ai essayé d'exécuter le composant codebarre
mais il me manque un composant TbarCode qu je n'ai pas pus trouver.
Merci de ton aide
2 août 2007 à 16:49
je ne me sers pas du code 128, par contre je vais intégrer le code EAN13 très utilisé dans le commerce (tous les produits ont un code EAN13)
2 août 2007 à 16:46
pour les méthodes de propriétés, peux-tu confirmer car j'avais regarder dans plusieurs tuto avant de les mettre dans protected
2 août 2007 à 09:18
A quand le code 128?
Encore bravo!
PhilLu
2 août 2007 à 02:56
C39 : array[0..43] of word =
($0064, // 0
$0091, // 1
$0061, // 2
$0160, // 3
$0031, // 4
$0130, // 5
$0050, // 6
$0025, // 7
$0124, // 8
$0064, // 9
ect ...
et on recupere facilement comme ceci :
bit 0 : (C39[index] and $0001) = $0001 (bit 0 = 1)
bit 1 : (C39[index] and $0002) = $0002 (bit 1 = 1)
bit 2 : (C39[index] and $0004) = $0004 (bit 2 = 1)
bit 3 : (C39[index] and $0008) = $0008 (etc)
bit 4 : (C39[index] and $0010) = $0010
bit 5 : (C39[index] and $0020) = $0020
bit 6 : (C39[index] and $0040) = $0040
bit 7 : (C39[index] and $0080) = $0080
bit 8 : (C39[index] and $0100) = $0100
ce qui fait passer le tableaux de code de 44*9 octets a 44*2 octets.
et les methodes de propriétés sont censée toujours etre dans private et non protected.
procedure SetCode(ACode:string);
procedure SetBarWide(ABarWide:integer);
procedure SetBarNarrow(ABarNarrow:integer);
31 juil. 2007 à 23:36
31 juil. 2007 à 15:13
Les gens sont faignants de nos temps ^^
Et merci pour le "-1", j'avais totalement zappé (j'ai écris le code en live, pas testé dans delphi).
A quand une petite mise à jour ?
31 juil. 2007 à 14:47
# TraceCode(Pos(FCode[i], AuthorizedChars)-1);
au lieu de :
# TraceCode(Pos(FCode[i], AuthorizedChars));
:)
31 juil. 2007 à 14:19
pour le code d'exemple, il n'y a pas grand chose à dire, à part poser le composant sur une fiche, et changer sa propriété "Code" !
Après dépendant de l'appli on imprime le code barre (moi j'exporte mes listes de codebarre en pdf avec un compo freeware).
31 juil. 2007 à 12:25
Sinon, petite amélioration: comme l'ordre de tes 44 cases du tableau est le même que ta chaîne AuthorizedChars, tu peux tout simplement le déclarer comme
C39: array[0..43, 0..8] Byte =
((0,0,0,1,1,0,1,0,0), // Pour le caractère '0'
(1,0,0,1,0,0,0,0,1), // Pour le caractère '1'
...,...); // etc...
Ce qui te permet d'économiser une boucle dans la procédure Paint().
En effet, ceci:
# //Car. Composition B S B S B S B S B
# X1:=0;
# for i:=1 to length(Fcode) do
# begin
# //cherche le caractère et trace le code
# for j:=0 to length(C39)-1 do
# if C39[j].C=Fcode[i] then
# begin
# TraceCode(j);
# break;
# end;
# end;
devient cela :
# for i := 1 to length(FCode) do
# TraceCode(Pos(FCode[i], AuthorizedChars));
De même, tous les C39[index].B[i] seront transformés en C39[index, i] et les C39[index].C en AuthorizedChars[index]
Ceci permet d'éviter une duplication des données !
Sinon, un petit code d'exemple serait le bienvenu !
A +
Flo