Clipper On Line • Ver Tópico - Programando para Clipper e Fivewin num mesmo .PRG

Programando para Clipper e Fivewin num mesmo .PRG

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

 

Programando para Clipper e Fivewin num mesmo .PRG

Mensagempor rochinha » 30 Set 2004 02:30

Amiguinhos

A tempos uso uma técnica para compilação de um mesmo .PRG contendo definições variadas para clientes diferentes.

Exemplo:

Tenho um .PRG em meus sistemas que imprime notas fiscais e suas rotinas são básicas, como:

- pegar dados do cliente
- pegar dados da transportadora
- pegar dados de produtos como ICMS, IPI, REDUCAO, etc
- pegar dados de fiscalização com natureza de operação, situação tributária, etc
- calcular os impostos.

Mas o problema é o posicionamento dos itens sendo impressos no corpo da nota, pois os mesmos tem posições variadas de coluna.

Então saquei a técnica usada nos .CH e do pré-processamento e posso compilar o mesmo .PRG para vários clientes tendo resultados diferentes, exemplo de um trecho:

// Este arquivo esta no diretorio de fontes do cliente e contem uma linha
// que define o seu nome, ex: #DEFINE CLIENTEa
#include "NOTA.CH"

//Nas linhas abaixo, conforme a definição contida dentro do NOTA.CH eu
//compilo o .PRG obtendo o resultado esperado.
#ifdef CLIENTEa
          ...
          @ 10,10 say NOME
          ...
#endif
#ifdef CLIENTEb
          ...
          @ 12,25 say NOME
          ...
#endif


Isto quer dizer, existe a possibilidade de compilar para duas plataformas diferentes num mesmo .PRG usado este método, ex:

#DEFINE MsDOS
#ifdef MsDOS
          ...
          @ 10,10 say NOME
          ...
#else
          ...
          REDEFINE say NOME
          ...
#endif


O que se deve levar em consideração é o uso de funções particulares, as UDFs( User Defined Functions ), funções feitas pelo usuário.

Estas muitas vezes possuem apresentação de mensagens na tela do DOS usando @...SAY, então todas funções e procedures que emitem texto no DOS devem ser modificadas para entenderem estar sendo usadas no Fivewin, assim:

...
FUNCTION mensagem( texto, tempo )
    #ifdef MsDOS
              @ 24,0 say texto
              inkey( tempo )
    #else
              if tempo <> NIL
                 MsgStop( OemToAnsi( texto ) )
              else
                 oWnd:SetMsg( OemToAnsi( texto ) )
              endif
    #endif


A variavel oWnd deve ser STATIC ou PUBLIC para ser carregada por todo o .PRG, exemplo:

[code]
#ifdef MsDOS
#else
#DEFINE "fivewin.ch
Static oWnd
#endif

@braços :?)
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4538
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 800 vezes
Mens.Curtidas: 242 vezes



Retornar para FiveWin

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro