Générer et afficher un code‑barres
Par Delphi Source - March 24, 2026 · Vues: 21 · Catégories: Snippets · Tags: #API #Web

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.

API Documentation


Un petit clic (J'aime) qui fait plaisir !