: PT-BR">Aprenda a criar aplicações para o sistema operacional PalmOS – Parte 4

  

Continuando o artigo da edição anterior, iremos criar a última tela de nossa aplicação que será a tela de digitação de itens do pedido. Após concluirmos a criação da mesma iremos desenvolver um conduit para sincronizarmos com o Desktop e trocarmos informações. O objetivo do nosso conduit será enviar para o Desktop as tabelas de itens de pedido e pedidos, e receber do Desktop as tabelas de produtos e clientes. Sempre que o usuário conectar o cabo USB no Palm e no Desktop selecionar o HotSync o sincronismo será realizado e os dados atualizados, a regra é sempre primeiro enviarmos os dados do Palm para o Desktop e depois recebermos os dados do Desktop para o Palm. Mãos à obra, vamos criar a tela de Itens de Pedido para depois entrarmos em detalhes do Conduit.

 

Criando a tela de digitação de itens do pedido

Vamos adicionar um novo formulário para criarmos a tela de digitação de itens do pedido, no menu principal do PocketStudio em File|New>Form, após adicionarmos o mesmo vamos salvá-lo clicando em File|Save ou pelas teclas de atalho CTRL + S, salvaremos ele com o nome “UfrmPedidoItem.pas” para indicarmos que é a Unit de itens do pedido.  Feito isso altere seu Name para “FrmItensPedido” e Caption para “Itens do Pedido”.

Desenharemos uma tela semelhante à Figura 1. Para isso inclua (todos da paleta Forms) um componente List(“LstItens”), quatro Label’s com os Caption’s “Total do Pedido”, “Qtde.” ePreço”. Altere a propriedade fonte do primeiro Label para ftBold. Em seguida adicione ao lado de cada Label um componente Field representando um campo da tabela. Incluiremos FldTotPed, FldCodProd, FldDescricao, FldQtde e FldPreco. Os botões chame-os de BtnVoltar, BtnProcurar, BtnNovo, BtnGravar e BtnExcluir. Se optar por utilizar Bitmap’s para representar as ações nos botões, não esqueça de incluir quatro Bitmap’s e nomeá-los como BmpProcurar, BmpNovo, BmpGravar e BmpExcluir. Caso tenha dúvidas da utilização de imagens nos botões, retorne aos artigos anteriores e veja como realizamos a tarefa de inclusão de Bitmap’s nas telas anteriores.

 

Figura 1. Tela dos itens do pedido

 

Antes de codificarmos os botões vamos escrever algumas funções que irão nos auxiliar nas validações dos dados informados e limpar a tela quando o usuário clicar no botão Novo para incluir um novo item no pedido.

Além disso trabalharemos com um novo conceito, o de manipulação de listas. Logicamente o componente List que incluimos na janela listará os Itens do Pedido conforme adicionarmos. Existem várias maneiras de “alimentarmos” a lista para apresentar os itens. Uma delas seria fazer um laço(“loop”) e percorrer a tabela de itens do pedido adicionando-os à lista, para isso usaríamos a função AddCopy da PSList, mas isso é uma operação demorada, e que consome muita memória, sendo assim utilizaremos duas funções que são as chamadas “receitas de bolo”, pois montamos a estrutura e podemos utilizar em todas as nossas listas alterando apenas as tabelas e os Field’s.

A grande vantagem dessas funções é que elas não usam a memória, pois trabalham com os métodos de desenho na tela como o WinDrawTruncChars. Dessa forma os itens são desenhados na janela e não inseridos na lista o que é extremamente rápido, com a vantagem de usar pouquíssima memória. Por isso, inclua as procedures FListaItens e CarregaArrayItem à área Implementation do formulário de Itens de Pedido. Logo em seguida inclua o procedimento Limpa, todas presentes na Listagem 1. Fiz questão de comentar cada linha no próprio código, portanto veja as explicações das listagens em formato de comentários no código-fonte.

 

Listagem 1. Procedimentos para listagem, carregamento e limpeza das listas

 

procedure FListaItens(ItemNum: Int16; Bounds:

  RectanglePtr; var ItemsText: PChar);

var

  Buffer: Array[0..100] of Char;

  ItemInicial: Int16;

begin

  { Se o item solicitado for menor que ZERO,

    não fazemos nada! }

  if ItemNum < 0 then

    exit;

  { Nós movemos para o índice informado, dentro do

    banco de Itens tomando como base nosso o índice

    absoluto do primeiro registro do Pedido + o

    Número do Item a ser apresentado }

  ItemInicial := 0;

  PSDatabase.MoveTo(DBItp, ItemInicial + ItemNum);

  { Procuramos pelo Produto no banco de Produtos }

  if not ProdutosDB.ProcuraCodigo(PSDatabase.

    FieldUInt16(DBItp, Itp_CodProd)) then

    StrCopy(Buffer, 'Produto não encontrado!')

  else

    StrCopy(Buffer, PSDatabase.FieldStringPtr(

      DBPro, Prod_DescProd));

  { Desenhamos a Descrição do Produto }

  WinDrawTruncChars(Buffer, StrLen(Buffer),

    Bounds.TopLeft.x, Bounds.TopLeft.y,

    Bounds.Extent.x);

end;

procedure CarregaArrayItem;

var

  Numero: UInt16;

  Buffer: Array[0..30] of Char;

  RecNo: Int32;

  VlTotal: Double;

  NumItens: Int16;

begin

  { Zera Valor Total do Pedido }

  VlTotal := 0;

  { Zera variável de contagem de Itens }

  NumItens := 0;

  { Recupera o Código do Pedido }

  PSField.Text(FldNumPed, Buffer,

    PSField.TextLength(FldNumPed)+ 1);

  { Utiliza a Busca Binária para encontrar o

    Primeiro Item }

  Numero := StrAToI(Buffer);

  RecNo := DBSeek(DBItp, Itp_NumeroPed, @Numero,

...

Quer ler esse conteúdo completo? Tenha acesso completo