Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 15 de Novembro de 2025
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
74 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  [Intermediário] - Código de Barras no Delphi para iOS
Publicado por rboaro : Quinta, Junho 27, 2013 - 01:59 GMT-3 (471 leituras)
Comentários 2 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Fernando Rizzato Olá pessoal!
Recebemos muitas solicitações de clientes pedindo por um exemplo de captura de código de barras a partir de uma aplicação iOS criada com Delphi XE4. Neste artigo vou mostrar como ler e decodificar código de barras através de uma aplicação Delphi para iOS, executando em iPhone, iPad ou iPod!

A dinâmica do processo consiste em capturar uma imagem utilizando a câmera do dispositivo, e decodificar o código de barras contido nesta imagem utilizando uma biblioteca especializada.

Bibliotecas de Leitura de Código de Barras para iOS
Existe um sem número de bibliotecas para decodificação de código de barras com suporte a diversas plataformas, pagas e não pagas, com mais ou menos features, basta um search no Google para receber uma lista considerável a ser explorada. Neste caso estamos interessados em bibliotecas específicas para iOS, e geralmente elas são criadas em (e para uso com) Objective-C.

Assim sendo, qualquer que seja sua escolha, será necessário transcrever o cabeçalho da biblioteca para Pascal, utilizando um dos diversos métodos disponíveis. Nestes endereços você pode aprender mais sobre este processo:

http://alturl.com/v2wtx

http://alturl.com/y87xb

Para esta implementação estou fazendo uso da ZBar (http://zbar.sourceforge.net/). Trata-se de uma biblioteca open, bastante competente, e que possui seu header traduzido para Pascal por um desenvolvedor coreano chamado Simon Choi, e publicado em seu blog neste link: http://blog.naver.com/simonsayz/120175561755. *** Todos os créditos aqui para o Simon pelo excelente trabalho! ***

Implementando a Leitura do Código de Barras
Uma vez de posse da biblioteca (neste caso representada por um único assembly "libzbar.a"), e também com o código que expõe a interface da biblioteca ZBar em mãos, o que temos que fazer é implementar uma classe Delphi que faz uso destes métodos, traduzindo-os em uma interface amigável, a qual será utilizada pela nossa aplicação iOS. Veja abaixo como ficou a declaração da classe:

TZBarCode = class(TObject)
private
ZBarView: ZBarReaderView;
ZBarEvent: TZBarReaderViewDelegate;
FActive: Boolean;
function GetActive: Boolean;
procedure SetActive(value: Boolean);
function GetOnBarCode: TOnBarCode;
procedure SetOnBarCode(value: TOnBarCode);
protected
destructor Destroy; override;
public
constructor Create; virtual;
procedure Free;
procedure SetFrame(View: UIView; Frame: CGRect);
property Active: Boolean Read GetActive Write SetActive;
property OnBarCode: TOnBarCode Read GetOnBarCode Write SetOnBarCode;
end;
Construindo a Interface da Aplicação
Do ponto de vista de interface visual temos o seguinte:

- Um TEdit (edtResult), o qual receberá o resultado da leitura do código de barras;

- Um TMemo (memImage), utilizado somente para definir a área onde a imagem do processo de captura será exibida (você poderia definir as coordenadas manualmente, mas o uso de um componente alinhado aos demais controles torna a interface mais dinâmica);

- Um TListBox (lstHistory), utilizado para armazenar o resultado das últimas leituras;

- Um TSwitch (swtONOFF), responsável por ativar o processo de captura;

- Um TButton (btnCopy), demonstrando como copiar o resultado para a memória;

- Um TButton (btnClear), responsável por eliminar os resultados das capturas efetuadas;

O resultado esperado você pode conferir nesta imagem:


Codificando o Formulário da App
Inicialmente, no escopo private da classe principal do form, declare uma variável que será utilizada para criar a instância da classe de captura, e um método que será atribuído ao evento de captura, quando ela ocorrer:

private
{ Private declarations }
ZBarCode: TZBarCode;
procedure OnFindBarCode(Sender: TObject; BarCode: String);
public
No método OnFindBarCode, basta atribuir o resultado que será recebido através do parâmetro BarCode ao nosso edtResult, além de armazená-lo no histórico:

procedure TMainForm.OnFindBarCode(Sender: TObject; BarCode: String);
begin
edtResult.Text := BarCode;
lstHistory.Items.Add(FormatDateTime('dd/mm/yyyy hh:nn:ss', Now) + ' - ' + BarCode);
end;
No evento OnSwitch do nosso TSwitch, vamos instanciar a classe, atribuir o método ao evento correspondente, definir a área de plotagem da imagem e ativar a captura:

procedure TMainForm.swtONOFFSwitch(Sender: TObject);
begin
if not Assigned(ZBarCode) then
begin
ZBarCode := TZBarCode.Create;
ZBarCode.OnBarCode := OnFindBarCode;
ZBarCode.setFrame(WindowHandleToPlatform(Self.Handle).View,
CGRectMake(memImage.Position.X, memImage.Position.Y, memImage.Width,
memImage.Height));
end;
ZBarCode.Active := swtONOFF.IsChecked;
end;
E para completar, aqui está o código a ser adicionado nos dois botões restantes:

procedure TMainForm.butClearClick(Sender: TObject);
begin
edtResult.Text := '';
lstHistory.Items.Clear;
end;
procedure TMainForm.btnCopyClick(Sender: TObject);
begin
edtResult.SelectAll;
edtResult.CopyToClipboard;
end;
Um detalhe importante: devido a natureza da biblioteca utilizada (trata-se de um assembly para iOS/ARM) esta aplicação não funcionará no simulador, apenas em um dispositivo físico.

Aqui você tem uma imagem da aplicação sendo executada em um iPad:



Neste link você pode fazer o download do exemplo que está sendo executado acima: http://cc.embarcadero.com/item/29485

Espero que gostem e que seja útil em seus projetos, até a próxima!

Link Original do Artigo:
http://blogs.embarcadero.com/fernandorizzato/index.php/2013/06/26/codigo-de-barras-no-delphi-para-ios/


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: VSF (hereim@ig.com.br) : Jul 15, 2013 - 09:58
(Informações sobre o membro | Enviar uma mensagem) http://www.tkssoftware.com/victory
Excelente post!!!!


por: PauloTenorio (tenorio.p@bol.com.br) : Ago 13, 2013 - 03:04
(Informações sobre o membro | Enviar uma mensagem) http://http://
Não consegui fazer funcionar. Compila, envia para o Ipad, executa mas... somente aciona a câmera e exibe a imagem do código, não captura nem converte a imagem em código.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados