[firebase-br] OFF IMPRESSORA TERMICA ZEBRA TLP 2844

MagnoS magnoscosta em bol.com.br
Qui Maio 8 09:53:56 -03 2008


1º criar um Objeto.
zplCod: ==> Descrição
type
  TZplCodBar = class( TObject )
  public
    zplCod: String;
    display: String;
    format: String;
  end;
------------------------------------------------------------------------------------------------
Carregar lista dentro dum combo com os modelos para imprimir a etiqueta:

procedure CarregaListaEtiquetas( cbBox: TCustomComboBox; searchPath: 
String );
var  sr: TSearchRec;
       basePath: String;

  procedure AddEtiqueta( nomeEtiqueta: String );
  var
    tmpXML: TXMLDocument;
    codbarNode: IXMLNode;
    infoNode: IXMLNode;

    tmpZplCodBar: TZplCodBar;
  begin
    tmpXML:= TXMLDocument.Create( Application );
    try
      tmpXML.DOMVendor:= GetDOMVendor( 'MSXML' );
      tmpXML.FileName:= basePath + nomeEtiqueta;
      tmpXML.Active:= True;
      //xml valido
      codbarNode:= tmpXML.ChildNodes.FindNode( 'CODBAR' );
      if Assigned( codbarNode ) then
      begin
        infoNode:= codbarNode.ChildNodes.FindNode( 'INFO' );
        //exite info..validar se preciso...
        if Assigned( infoNode ) then
        begin
          tmpZplCodBar:= TZPLCodBar.Create();//
          with tmpZplCodBar do
          begin
            zplCod:= codbarNode.ChildValues[ 'ZPLCOD' ];
            display:= infoNode.ChildValues[ 'DISPLAY' ];
            format:= infoNode.ChildValues[ 'FORMAT' ];
          end;
          cbBox.Items.AddObject( tmpZplCodBar.display, tmpZplCodBar );
        end;
      end;
    finally
      tmpXML.Free();
    end;
  end;
begin
  basePath:= IncludeTrailingPathDelimiter( searchPath );
  searchPath:= basePath + '*.zpl';

  if FindFirst(searchPath, $00000020, sr) = 0 then
  begin
    repeat
      AddEtiqueta( sr.Name );
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;

-----------------------------------------------------------------------------------------------------------
Chama ela quando cria o form..


procedure TForm1.FormCreate(Sender: TObject);
begin
  inherited;
  CarregaListaEtiquetas( ComboEtiqueta, 'C:\PastaComOsModelos');
end;


---------------------------------------------------------------------------------------------------------------
a rotina pra imprimir:

procedure ImprimeCodBarras(
  AModelo: String; AImpressora: String; AParamsValues: array of String; 
AZPL: boolean = false
);
// Ex: AParamsValues = ['Nome', 'Joao', 'Codigo', '1234567890123']
var
  lReturn: boolean;
  lhPrinter: THandle;
  lpcWritten: Cardinal;
  MyDocInfo: DOCINFO;
  sWrittenData: String;
  S: TStringList;
  I: Word;
begin
  lhPrinter:= 0;
  lReturn:= WinSpool.OpenPrinter( PChar(AImpressora), lhPrinter, nil );
  if not lReturn or ( lhPrinter = 0 ) then
    msgErro( 'Erro ao Abrir Impressora!' );

  with MyDocInfo do
  begin
    pDocName := 'COD.BARRAS';
    pOutputFile := '';
    pDatatype := '';
  end;

  {return job}WinSpool.StartDocPrinter( lhPrinter, 1, @MyDocInfo );
  StartPagePrinter( lhPrinter );

  if (AZPL) or (FileExists( AModelo )) then
  begin
    if (AZPL) then
      sWrittenData:= AModelo
    else
    begin
      S:= TStringList.Create();
      try
        S.LoadFromFile( AModelo );
        sWrittenData:= S.Text;
      finally
        S.Free();
      end;
    end;

    i:= Low( AParamsValues );
    while ( i < High( AParamsValues ) ) do
    begin
      sWrittenData:=
        AnsiReplaceStr( sWrittenData, AParamsValues[i], 
AParamsValues[i+1] );
      Inc( i, 2 );
    end;

  end
  else
  begin
     ShowMessage('Etiqueta nao existente.')
    {return status}EndPagePrinter(lhPrinter);
    {return status}EndDocPrinter(lhPrinter);
    {return status}ClosePrinter(lhPrinter);
    Exit;
  end;
  {return status}WritePrinter(lhPrinter, PChar(sWrittenData), 
Length(sWrittenData)+1, lpcWritten);
  {return status}EndPagePrinter(lhPrinter);
  {return status}EndDocPrinter(lhPrinter);
  {return status}ClosePrinter(lhPrinter);
end;
-----------------------------------------------------------------------------------------------------------------------
depois de escolhida a etiqueta no combo.
A Chamada para imprimir

procedure TForm1.ImprimirClick(Sender: TObject);
begin
  with TZplCodBar( ComboEtiqueta.Items.Objects[ ComboEtiqueta.ItemIndex ] ) 
do
  begin
    if format = 'ETIQ1' then
    begin
      ImprimeCodBarras(
          zplCod,
          CBImpressora.Text,  //Tem que informar qual impressora vai 
impressora
         [
            'MERCL1', FormMercadorias.QRYMercCNOME.AsString, 
//Nome na 1ª linha
            'MERCL2', FormMercadorias.QRYMercCNOME2.AsString, 
//Nome na 2ª linha
            'CODBAR', FormMercadorias.QRYCdBrCCODIBAR.AsString, 
//Código de Barras.
            'DATA', FormatDateTime('DD/MM/YYYY', Now), 
//Data
            'PRECO', FormMercadorias.QRYMercPRECO.AsString), 
//Preço
            'COPIAS', spQtde.Text 
//Qtd Cópias.
         ],
         True
      );
    end;
end;
end;

------------------------------------------------------------------------------------------------
Dentro da pasta do executável ou em outra qualquer tem que ter o modelo de 
etiqueta..
Crie um arquivo de texto com a extensão ZPL e dentro dele os seguinte 
conteudo:

<CODBAR Version="1.0">
<INFO>
<DISPLAY>Etiqueta Produtos: 1 Cols -NOME- 70x35mm</DISPLAY>
<FORMAT>ETIQ1</FORMAT>
</INFO>
<ZPLCOD>OD
N
D5
S2
Q280,24
q540
A39,10,0,3,1,2,N,"CODMER"
A453,10,0,3,1,2,N,"NOUNME"
A39,85,0,1,1,3,N,"MERCL1"
A39,167,0,2,1,2,N,"FABRIC"
A39,205,0,2,1,2,N,"CODFAB"
B292,159,0,1,2,5,80,N,"CODBAR"
A364,244,0,1,1,1,N,"CODBAR"
PCOPIAS

</ZPLCOD>
</CODBAR>

Obs.: Para saber o que sao cada itens desse, é melhor pegar o manual de 
programação da ZPL nele explica o que é cada um desses...
-------------------------------------------------------------------------------------------------------------------------------------

Pode ter geito mais fácil pra fazer... porém desta forma vc nao fica preso a 
aplicação caso precise mudar alguma posição ou criar outra etiqueta....
é simplesmente alterar o arquivo de texto, ou adicionar mais arquivos.

Veja que no detalhe do arquivo, as palavras entre "" (aspas dulpas), são os 
parâmetros que são enviados na rotina de imprimir, portando se vc fizer uma 
lista com vários intens pode depois utilizá-los como quiser.


Qualquer coisa to ai.


----- Original Message ----- 
From: "Evandro Siqueira" <vansiqq em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, May 06, 2008 12:02 PM
Subject: Re: [firebase-br] OFF IMPRESSORA TERMICA ZEBRA TLP 2844


Eu tenho. Deixa eu procurar que mando pro seu e-mail, ok?

2008/5/5 Anderson <infosag em terra.com.br>:

> Desculpem o off,
>
> Alguem possue a programacao dessa impressora em delphi ?
>
> Abracos
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Evandro Siqueira
Programador
Aracaju/SE
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


-- 
Internal Virus Database is out-of-date.
Checked by AVG.
Version: 7.5.524 / Virus Database: 269.23.3/1393 - Release Date: 23/04/2008 
8:12





Mais detalhes sobre a lista de discussão lista