28 de setembro de 2016

Aprenda a programar impressoras térmicas de etiquetas PPLB

Para quem precisa imprimir em impressoras térmicas de etiquetas que utilizam a linguagem PPLB (Zebra, Argox, Elgin, etc), segue algumas dicas.

Vamos ver o lay-out da impressão de uma linha com 3 colunas:

N
D20
S3
A810,160,2,1,1,1,N,"Torta de Frango"
A810,140,2,3,1,1,N,"000132"
A810,115,2,3,1,1,N,"R$       3,90"
B570,020,0,2,3,5,65,N,"000132"

A540,160,2,1,1,1,N,"Sabonete Liquido"
A540,140,2,3,1,1,N,"001021"
A540,115,2,3,1,1,N,"R$       2,20"
B310,020,0,2,3,5,65,N,"01021"

A260,160,2,1,1,1,N,"Adaptador de Tomada"
A260,140,2,3,1,1,N,"006352"
A260,115,2,3,1,1,N,"R$       1,80"
B030,020,0,2,3,5,65,N,"006352"
P1

Vamos comentar para facilitar a interpretação:

N = Limpeza do Buffer
D20 = Densidade 20
S3 = Velocidade de impressão pol/segundos

Ap1,p2,p2,p3,p4,p5,p6,p7,"Dados" (veja tabela abaixo - Texto)
A810,160,2,1,1,1,N,"Torta de Frango"
A810,140,2,3,1,1,N,"000132"
A810,115,2,3,1,1,N,"R$       3,90" 

Bp1,p2,p2,p3,p4,p5,p6,p7,"Dados" (veja tabela abaixo - Barras)
B570,020,0,2,3,5,65,N,"000132"

P1 = determina a quantidade de cópias, 1 até 65.535

A – Campo de texto
Ap1,p2,p3,p4,p5,p6,p7,”Dados”
p1 – posição eixo X em pontos
p2 – posição eixo Y em pontos
p3 – rotação (0=normal,1=90graus,2=180graus,3=270graus)
p4 – tipo de fonte (1 a 5) consultar manual das fontes disponíveis
p5 – multiplicador horizontal das fontes
p6 – multiplicador vertical das fontes
p7 – N=imagem normal, ou R= imagem em reverso
“Dados” – dados a serem impressos

B – Código de barras
Bp1,p2,p3,p4,p5,p6,p7,p8,"Dados"
p1 – posição eixo X em pontos
p2 – posição eixo Y em pontos
p3 – rotação (0=normal,1=90graus,2=180graus,3=270graus)
p4 – tipo de código de barra consultar manual das fontes disponíveis
p5 – largura da barra estreita
p6 – largura da barra larga
p7 – altura do código de barras em pontos
p8 – impressão da linha de interpretação (B= sim, N= não)
"Dados" – dados a serem impressos
Agora que você já entendeu, vamos ver como vai ficar em Lazarus ou Delphi:

procedure TFormEtqL42.BtnImprimeETQ;
var
F : TextFile;
i : integer;
begin
   IF cPortaBARRAS = '' then
      begin
        ShowMessage('Verifique a configuração da porta da impressora de etiqueta');
        Exit;
      end;
   AssignFile(F,cPortaBARRAS);
   Rewrite(F);
   i := 0;
   TabGlobal.DETQ001.Last;
   TabGlobal.DETQ001.First;
   while not TabGlobal.DETQ001.eof do
      begin
         Writeln(F,'N');
         Writeln(F,'D20');
         Writeln(F,'S3');
         // Etiqueta 1
         Writeln(F,'A810,160,2,1,1,1,N,"'+TabGlobal.DETQ001.DESCRICAO.Conteudo+'"');
         Writeln(F,'A810,140,2,3,1,1,N,"'+TabGlobal.DETQ001.CODPRO.Conteudo+'"');
         Writeln(F,'A810,115,2,3,1,1,N,"'+TabGlobal.DETQ001.VALOR.Conteudo+'"');
         Writeln(F,'B570,020,0,2,3,5,65,N,"'+TabGlobal.DETQ001.BARRAS.Conteudo+'"');
         // Etiqueta 2
         TabGlobal.DETQ001.Next;
         Writeln(F,'A540,160,2,1,1,1,N,"'+TabGlobal.DETQ001.DESCRICAO.Conteudo+'"');
         Writeln(F,'A540,140,2,3,1,1,N,"'+TabGlobal.DETQ001.CODPRO.Conteudo+'"');
         Writeln(F,'A540,115,2,3,1,1,N,"'+TabGlobal.DETQ001.VALOR.Conteudo+'"');
         Writeln(F,'B310,020,0,2,3,5,65,N,"'+TabGlobal.DETQ001.BARRAS.Conteudo+'"');
         // Etiqueta 3
         TabGlobal.DETQ001.Next;
         Writeln(F,'A260,160,2,1,1,1,N,"'+TabGlobal.DETQ001.DESCRICAO.Conteudo+'"');
         Writeln(F,'A260,140,2,3,1,1,N,"'+TabGlobal.DETQ001.CODPRO.Conteudo+'"');
         Writeln(F,'A260,115,2,3,1,1,N,"'+TabGlobal.DETQ001.VALOR.Conteudo+'"');
         Writeln(F,'B030,020,0,2,3,5,65,N,"'+TabGlobal.DETQ001.BARRAS.Conteudo+'"');
         TabGlobal.DETQ001.Next;
         Writeln(F,'P1');
      end;
   CloseFile(F);
end;

Se gostou, compartilhe e ajude a divulgar meu trabalho. Obrigado!

* Créditos para parte do texto dos comandos para ArgoxBrasil

14 de setembro de 2016

Antivirus Gratuitos 2016 - Instaladores Off Line

 

 Para aqueles que precisam fazer download de instaladores Off-line
deixo aqui alguns links de antivírus gratuitos 2016:





Avira Free Antivírus: clique aqui para download

Avast Free Antivírus: clique aqui para download

AVG Antivírus Free: clique aqui para download 32Bits

AVG Antivírus Free: clique aqui para download 64Bits 

Panda Cloud Antivírus Free: clique aqui para download

10 de setembro de 2016

Curso de Programação: Criando uma tela de pesquisa


Neste vídeo vamos fazer:
1. criar 02 (duas) tabelas no MySQL  (Pessoas e Cidades)
2. Criar uma aplicação CRUD para os cadastros de Pessoas e Cidades
3. Criar uma tela de pesquisa SQL para o campo cidades
4. Criar um campo virtual para retornar o nome da Cidade.

Assista o vídeo:

7 de setembro de 2016

Aprenda Programar: função para retornar o valor de um campo auto-incremento

Recebi muitos e-mails de amigos inscritos no meu blog e no canal do youtube com perguntas:

Como saber o próximo número do auto-increment?
como recuperar último código de um auto-incremento ?
Como saber o próximo valor do auto incremento?

###### Clique no GOSTEI ! isso me ajuda muito ! #############

Neste vídeo vou mostrar como criar uma função para retornar o valor do campo auto incremento e como definir o valor do próximo incremento.

###### Função  #####
Uses db; // Declare USES DB

//Private ou Public
function RetornaAutoINC(cTabela, cCampoAI: String; vAtribui:variant):Variant;

        //Função:
function RetornaAutoINC(cTabela, cCampoAI: String; vAtribui:variant): Variant;
var
  vResultaAutoIncrimento : Variant; // resultado do incremento
  nQTD : Variant;   // Variável para próximo incremento
begin
  nQTD:=vAtribui; // atribuição a variavel nQTD o valor do próximo incremento obtido pelo parametro da funcao
  TabGlobal.SqlAutoInc.Close; // fecha Query
  TabGlobal.SqlAutoInc.sql.Clear; // limpa Query
  TabGlobal.SqlAutoInc.SQL.Add('Select Max('+cCampoAI+') as nCocInc from '+cTabela); // escreve nova query com parametros recebido da funcao
  TabGlobal.SqlAutoInc.Open; // abre a nova query
  case TabGlobal.SqlAutoInc.Fields[0].DataType of
    ftSmallint, ftWord, ftInteger: // se o campo AI for SmallInt, Word ou Integer
      vResultaAutoIncrimento := TabGlobal.SqlAutoInc.Fields[0].AsInteger + nQtd;
    ftFloat, ftCurrency: // Se o campo for Float ou Currency
      vResultaAutoIncrimento := TabGlobal.SqlAutoInc.Fields[0].AsFloat + nQtd;
  end;
  TabGlobal.SqlAutoInc.Close; // fecha query
  Result := vResultaAutoIncrimento; // retornar o campo Resultado Auto INc
end;
###### Assista o vídeo #######

4 de setembro de 2016

Instalando ZeosLIB no Delphi Berlin X10 Start Edition (Free)

Sabemos que o Delphi Berlin Start Edition  (a opção básica da Embarcadero) não vem com componente nativo para conexão a base de dados.

Neste vídeo vamos aprender a instalar o componente ZEOSLIB que permite conectar a vários banco de dados (Firebird, MySQL, MariaDB, PostGreSQL, SQLite, Oracle, etc).

Aprenda conectar com PostGreSQL: Clique Aqui


Link para ZeosLib, clique aqui

Passo a passo para instalação do componente:

Delphi/Lazarus mexer janelas/forms sem controlbox

Vídeo criado pelo amigo Daniel Steckler mostrando como mover janelas sem bordas desenvolvidas em Lazarus, Delphi ou Codetyphon. Ótimo c...