Générer et afficher un code‑barres
Intégrer la génération de codes‑barres via barcodeapi.org dans une application Delphi VCL en utilisant uniquement TEdit pour la saisie, TButton pour lancer la génération et TImage pour l’affichage.
Le téléchargement s’effectue de façon asynchrone avec TTask et THTTPClient pour ne pas bloquer l’interface utilisateur.
unit UnitBarcodeForm;
interface
uses
System.SysUtils, System.Classes, Vcl.Forms, Vcl.Controls, Vcl.ExtCtrls,
Vcl.StdCtrls, Vcl.Graphics, System.Net.HttpClient, System.Net.URLClient,
System.NetEncoding, System.Threading, PNGImage, Vcl.Dialogs;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
procedure ShowError(const Msg: string);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
DEFAULT_BARCODE_TYPE = 'code128'; // changer ici si besoin (ex: 'qr', 'ean13', 'code39', ...)
procedure TForm1.ShowError(const Msg: string);
begin
TThread.Queue(nil,
procedure
begin
ShowMessage(Msg);
Button1.Enabled := True;
end);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
BarcodeType, DataText, URL: string;
begin
BarcodeType := DEFAULT_BARCODE_TYPE;
DataText := Trim(Edit1.Text);
if DataText = '' then
begin
ShowMessage('Saisissez le texte à encoder dans le TEdit.');
Exit;
end;
URL := Format('https://barcodeapi.org/api/%s/%s', [BarcodeType, TNetEncoding.URL.Encode(DataText)]);
Button1.Enabled := False;
TTask.Run(
procedure
var
Http: THTTPClient;
MS: TMemoryStream;
Resp: IHTTPResponse;
Png: TPngImage;
begin
Http := THTTPClient.Create;
MS := TMemoryStream.Create;
try
Http.UserAgent := 'DelphiBarcodeClient/1.0';
try
Resp := Http.Get(URL, MS);
except
on E: Exception do
begin
ShowError('Erreur réseau: ' + E.Message);
Exit;
end;
end;
if Resp.StatusCode <> 200 then
begin
ShowError(Format('Erreur HTTP %d: %s', [Resp.StatusCode, Resp.StatusText]));
Exit;
end;
MS.Position := 0;
Png := TPngImage.Create;
try
Png.LoadFromStream(MS);
TThread.Queue(nil,
procedure
begin
try
Image1.Picture.Assign(Png);
finally
Png.Free;
Button1.Enabled := True;
end;
end);
except
Png.Free;
ShowError('Le flux reçu n''est pas une image PNG valide.');
Exit;
end;
finally
MS.Free;
Http.Free;
end;
end);
end;
end.Un petit clic (J'aime) qui fait plaisir !