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

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
46 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]  Mala Direta
Publicado por Admin : Segunda, Janeiro 24, 2005 - 11:22 GMT-3 (8229 leituras)
Comentários 3 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Tenho acompanhado em fóruns de Delphi que uma das dúvidas mais freqüentes sobre relatórios é a confecção de uma “MALA DIRETA”.
Vamos esclarecer que esta não é a única maneira de se fazer uma mala direta, e sim, um dedo apontando o caminho, meramente uma dica.

       Pois então, mãos à obra!

       Primeiramente, você deverá montar um editor de texto com as suas funções básicas, tais como: Arquivo (Abrir, Salvar, Fechar, Imprimir), Editar, Formatar, etc... Estas funções serão definidas por você, de acordo com as necessidades próprias ou de seus clientes, um exemplo seria a figura abaixo:

       Após ter decidido o seu Layout, você deverá inserir um formulário de impressão para os dados da Mala Direta, o chamaremos de “Imprime_Mala_Direta”, nele usaremos um componente QuickReport chamado de Qr_Mala_Direta, um QRBand chamado de QRBand_Dados e dentro deste um QRRichText chamado de QrRt_Texto.

       Insira uma função de procura e substituição como esta:

procedure TF_Imprime_Mala_Direta.Procura_e_Troca(const Encontrar, Substituir: String);
Var I, Posicao: Integer;
    Linha: String;
begin
   FOR
I := 0 TO (QrRt_Texto.Lines.Count-1) DO
       BEGIN
          Linha := QrRt_Texto.Lines[I];
          REPEAT
             Posicao := Pos(Encontrar, Linha);
             IF Posicao > 0 THEN
                BEGIN
                   DELETE(Linha, Posicao, LENGTH(Encontrar));
                   INSERT(Substituir, Linha, Posicao);
                   QrRt_Texto.Lines[I] := Linha;
                END;
          UNTIL Posicao = 0;
       END;
end;

       Explico o porque desta função mais tarde. Até aí, nenhuma dificuldade! Faça os ajustes ligação com o Banco de Dados, página, papel, etc..., também conforme as suas necessidades.

       No evento BeforePrint do componente QrBand_Dados, coloque o seguinte código:

procedure TF_Imprime_Mala_Direta.QRBand_DadosBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
   QrRt_Texto.Lines.LoadFromFile(Caminho_e_Nome_do_Arquivo_de_Texto);
   Procura_e_Troca('«NOME_DO_CLIENTE»',Query1NOME_CLIENTE.Value);
   Procura_e_Troca('«ENDERECO_DO_CLIENTE»',Query1ENDERECO_CLIENTE.Value);
   Procura_e_Troca('«DATA_DO_CADASTRO»', Query1DATA_CADASTRO.AsString);
end;

       E no Evento AfterPrint do mesmo componente:

procedure TF_Imprime_Mala_Direta.QRBand_DadosAfterPrint(Sender: TQRCustomBand; BandPrinted: Boolean);
begin
   QrRt_Texto.Lines.Clear;
end;

       Agora a parte que todos esperam.

       Caso o seu sistema gerencie somente uma entidade suponhamos “Clientes”, pule esta etapa, senão, o meu conselho é criar uma combo com as entidades que sua Mala Direta gerencie, mais ou menos deste tipo:

       No mais, quase que obrigatoriamente sua Mala Direta deverá uma combo (Como no Word), com os campos da Entidade de seu Banco de Dados, algo do tipo:

       A sugestão de código a ser inserido no evento OnChange desta Combo, é a seguinte:

CASE Combo_Inserir_Campo.ItemIndex OF
   0:INSERT('«NOME_DO_CLIENTE»', Conteudo_Texto, Coluna_Texto);
   1:INSERT('«ENDEREÇO_DO_CLIENTE»',Conteudo_Texto,Coluna_Texto);
   2:INSERT('«DATA_DE_CADASTRO»', Conteudo_Texto, Coluna_Texto);

       Explicando o Código:

       Quando o usuário clicar no campo desejado será inserido no texto que está sendo digitado pelo usuário por exemplo: «NOME_DO_CLIENTE», e é extremamente importante que o texto inserido seja único, não ambíguo para que possa ser substituído posteriormente pelo conteúdo do Banco de Dados.

       Esta é a preparação que necessitamos, agora vamos à impressão!

       No Botão ou Menu Imprimir de sua Mala Direta, chame o formulário “Imprime_Mala_Direta”.

       No Evento OnCreate deste formulário, você deverá abrir seu Banco de Dados e Selecionar os clientes que deverão ser processados pela Mala Direta, e chamar a procedure Print do componente Qr_Mala_Direta.

       Lembram das funções e eventos que programamos anteriormente, então:

       Ao receber a chamada da procedure Print, o QuickReport começará a varredura do Banco de Dados de Clientes de acordo com a seleção desejada, ao encontrar preenchido o evento BeforePrint ocorrerá o seguinte:

      1 – O carregamento do Arquivo digitado, no componente QrRt_Texto;

      2 – A procedure Procura_e_Troca, irá procurar e substituir no texto do componente (sem fazer alterações no arquivo digitado), os dados solicitados, como o Nome, Endereço e Data de Cadastramento do Cliente;

      3 – Não havendo outras chamadas a outras funções ou eventos será impressa esta página com os dados do primeiro cliente;

      4 – Ao término da impressão o Evento AfterPrint, se encarrega de limpar o que foi feito anteriormente, e deixar tudo pronto para uma nova execução de impressão com os dados do próximo cliente.

      Esta é somente uma das maneiras de se fazer uma Mala Direta!

      Boa Sorte a todos!

Washington Nunes
Analista de Sistemas com Especialização em UML
Programador Delphi, Asp, Php entre outras.

Observação: Por: Washington Nunes



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


por: murilo_cunha : Mar 31, 2005 - 10:39
(Informações sobre o membro | Enviar uma mensagem) http://
Serah q vc poderia disponibilizar o codigo fonte deste projeto???

Seria mais facil de desenvolver ou melhorar o q jah foi feito.

Obrigado.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

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