Página 1 de 1
Variaveis no include - Como fazer?
Enviado: 17 Mar 2007 22:14
por emanuelrdantas
Olá Pessoal,
Desculpem as perguntas simples, mas estou comecando agora. É o seguinte, compilei meu programa normalmente e sem problemas, mas eu tive que retirar uma linha : "include sic.ch", onde continha as variáveis do sistema. Mas no xharbour, ele nao aceita esse include. Tive que tirar, deixando meu sistema sem variaveis e, por isso, dando erro ao entrar no programa, que ao executar pede as variaveis. O que fazer nesse caso??
Obrigado a todos antecipadamente
Emanuel
Enviado: 19 Mar 2007 08:38
por vailton
O xHarbour aceita normalmente este comando. Talvez o prolema esteja em algum outro detalhe. Qual a msg de erro que lhe aparece?
Enviado: 20 Mar 2007 15:27
por vagucs
sempre use assim
#include "arquivo.ch"
Ou
#include <arquivo.ch>
A dirença entre "" e <> é que com "" o compilador procura o arquivo relacionado na pasta local primeiro e depois no diretorio INCLUDE, e com <> so procura no diretorio include.
Arquivo.ch
Enviado: 20 Mar 2007 18:56
por emanuelrdantas
Olá, não sei o que deu, mas inseri novamente a linha do #include e funcionou. No entanto, ocorre o mesmo problema, compila normal, mas ao ser executado ele pede uma variável que está dentro do sic.ch. No hbmake, ele me da uma lista somente dos .prg, sera que eu tenho que adicionar em algum lugar o sic.ch??
Vou colocar aqui o codigo.
Embaixo está o programa principal, onde mando ele executar a função "do janela with..." que esta na procedure sicrot. Função esta que pede uma define que está no sic.ch.
Agradeço a imensa colaboração de todos aqui neste fórum.
Obrigado mesmo pessoal.
Código: Selecionar todos
#include "sic.ch"
clear all
set console off
set intensity on
set dele on
set bell off
set score off
set date british
set message to 24 center
set wrap on
set confirm off
set exclu off
set century on
set procedure to sicrot
************************* VARIÁVEIS (PÚBLICAS/PRIVADAS) ******************
dTSYSTEM = DATE()
wSAIR = SPACE(01)
*********************** AREAS DE TRABALHO *****************
SELE 01
USE GRCA00 INDEX GRCA0001 ALIAS GRCA00
*************************** MENU ************************************
set color to w+/b
@ 00,00 clear to 24,79
@ 00,00 SAY 'FISCAL - SISTEMA DE GERENCIAMENTO'
@ 00,63 SAY 'Data.:'
@ 00,70 SAY DATE()
@ 01,63 SAY 'Prog.:'
@ 02,00 TO 02,79
@ 23,00 TO 23,79
Sistema:="SISTEMA INTEGRADO - Versao 6.00"
VarTipPa:=VarCorPa:=1
FUNDO(VarTipPa,03,00,22,80,VarCorPa)
do cabecalho with 'Opcoes Gerais do Sistema','LOJA2'
SAVE SCREE TO Tela_Princ
SELE GRCA00
SEEK "01"
if dgr00dtsys<>dTSYSTEM
@ 12,25 say 'Informe data Atual..:'
@ 12,47 get dTSYSTEM valid dTSYSTEM<>ctod(' / / ')
read
if lastkey()=27
close data
return
endif
wconf='N'
@ 24,00
@ 24,00 say 'Confirma Atualizacao da DATA DO SISTEMA [S/N]'
@ 24,47 get wconf pict '@!' valid wconf$'SN'
read
if wconf= 'N'
close data
return
ELSE
DO RRLOC
REPL DGR00DTSYS WITH dTSYSTEM
UNLOCK
endif
ENDIF
RESTORE SCREEN FROM TELA_PRINC
do janela with 08,27,15,46
WOPCAO = 1
DO WHILE WOPCAO <> 0
@ 24,00
@ 09,28 promp 'CONTROLE ESTOQUE ' MESS 'Controla Atualizacao/Movimento do Estoque '
@ 10,28 promp 'CONTAS A PAGAR ' MESS 'Controle de Contas Para Pagamento'
@ 11,28 promp 'CONTAS A RECEBER ' MESS 'Controle de Contas a Receber/Cobranca'
@ 12,28 promp 'UTILITARIOS ' MESS 'Modulo Para Auxilio na Operacao do Sistema'
@ 13,28 promp 'ANALISE DE VENDAS ' MESS 'Estudo das Vendas na LJ1 e LJ2'
@ 14,28 promp 'ANALISE DE ESTOQUE' MESS 'Estudo do Estoque e sua Rotatividade na LJ1 e LJ2'
MENU TO WOPCAO
SAVE SCREEN TO TELAM
DO CASE
CASE WOPCAO = 0
CRESP = 'N'
?CHR(7)
@ 24,00
@ 24,22 SAY 'Confirme Saida do Sistema (S/N) ? [ ]'
@ 24,57 GET CRESP PICT '!' VALID CRESP $ 'SN*'
READ
@ 24,00
IF CRESP='N'
RESTORE SCREEN FROM TELAM
WOPCAO = 1
else
set exclu on
EXIT
ENDIF
CASE WOPCAO = 1
DO MENU1
* CASE WOPCAO = 2
* DO MENU2
* CASE WOPCAO = 3
* DO MENU3
CASE WOPCAO = 4
DO MENU4
* CASE WOPCAO = 5
* DO MENU5
CASE WOPCAO = 6
DO MENU6
ENDCASE
RESTORE SCREEN FROM TELAM
CLOSE DATA
ENDDO
CLOSE DATABASE
Aqui está o sic.ch fonte.
Código: Selecionar todos
// Cores (Avisos e Mensagens)
#define COR_Aviso IF(ISCOLOR(),"N/W","N/W") // Cor Relativa ao Aviso Simples Emitido Pela Funcao 'AVISO()'
#define COR_Mensag IF(ISCOLOR(),"N/W","N/W") // Cor Relativa a Mensagem de Alerta Emitido Pela Funcao 'MENSAGEM()'
// Cores Relativa as Bordas
#define COR_BordS1 IF(ISCOLOR(),"N/W","W+/W") // Cor Relativa a Borda Superior 1
#define COR_BordS2 IF(ISCOLOR(),"W+/B","W+/R") // Cor Relativa a Borda Superior 2
#define COR_BordS3 IF(ISCOLOR(),"N/W","W+/W") // Cor Relativa a Borda Superior 3
#define COR_BordIn "W+/W" // Cor Relativa a Borda Inferior
// Cores Relativa aos Menus e Janelas
#define COR_Menu IF(ISCOLOR(),"W","W+") // Cor Relativa ao Menu Principal
#define COR_PrptSS IF(ISCOLOR(),"N/W","N/W") // Cor Relativa a Barra de Status do PROMPT Superior
#define COR_PrptSD IF(ISCOLOR(),"W+/W","W+/W") // Cor Relativa a Barra de Status do PROMPT Superior (DESTAQUE)
#define COR_PrptIS IF(ISCOLOR(),"W","W") // Cor Relativa a Barra de Status do PROMPT Inferior
#define COR_PrptID IF(ISCOLOR(),"B/W","W+/W") // Cor Relativa a Barra de Status do PROMPT Inferior (DESTAQUE)
#define COR_JANEDI IF(ISCOLOR(),"B+/B","W+/W") // Cor Relativa a Janela de Edicao
#define COR_FJaneE IF(ISCOLOR(),"W+/B","W+/R") // Cor do Fundo da Janela de Edicao
#define COR_JanHel IF(ISCOLOR(),"W+/W","W+/R") // Cor Relativa a Janela de Helps
#define COR_FJaneH IF(ISCOLOR(),"W+/W","W+/R") // Cor Relativa a Janela de Helps
#define COR_Get1 IF(ISCOLOR(),"W/N","W/N") // Cor dos GET'S (Sempre Nada)
#define COR_Get2 IF(ISCOLOR(),"W+/R","W+/R") // Cor dos GET'S (Cor Digitacao)
#define COR_Get3 IF(ISCOLOR(),"W/N","W/N") // Cor dos GET'S (Cor Apos Digitacao)
// Cores Relativa a Sombra das Janelas
#define COR_Sombra CHR(8) // Cor Relativa a Sobra das Janelas
// Tempo de Execucao
#define TEM_Mensagem 3.0 // Tempo Relativo a FUNCAO Mensagem
// Configuracao de Efeitos da Impressora
#define A_Italic CHR(27)+"4" // Ativa Qualidade Italico
#define D_Italic CHR(27)+"5" // Desativa Qualidade Italico
#define A_Qcarta CHR(27)+"G" // Ativa Qualidade Carta
#define D_Qcarta CHR(27)+"H" // Desativa Qualidade Carta
#define A_Expand CHR(14) // Ativa Qualidade Expandido
#define D_Expand CHR(20) // Desativa Qualidade Expandido
#define A_Compri CHR(15) // Ativa Qualidade Comprimido
#define D_Compri CHR(18) // Desativa Qualidade Comprimido
#define A_Sublin CHR(27)+"-"+CHR(1) // Ativa Qualidade Sublinhado
#define D_Sublin CHR(27)+"-"+CHR(0) // Desativa Qualidade Sublinhado
#define A_Enfati CHR(27)+"E" // Ativa Qualidade Enfatiado
#define D_Enfati CHR(27)+"F" // Desativa Qualidade Enfatiado
#define A_Expoen CHR(27)+"S" // Ativa Qualidade Expoente
#define D_Expoen CHR(27)+"T" // Desativa Qualidade Expoente
Enviado: 20 Mar 2007 23:48
por vagucs
Fiote,
Chame a rotina de modo costumeiro como JANELA(PAR1,PAR2,PARN), da forma normal, o comando DO foi abolido e tive muitos problemas em empresas que usavam muito este comando, tivemos que modificar ele, sugiro que faça o mesmo.
Não resolveu
Enviado: 21 Mar 2007 17:30
por emanuelrdantas
Pessoal, desculpem a insistência ou até mesmo burrice. Fiz o que foi dito, tirei tudo que era "do" e ficou como abaixo. No entanto, o programa insiste em pedir essa variável COR_JANEDI. No Hbmake precisa fazer alguma alteração para incluir esse sic.ch??? Acredito que o hbmake não esteja "enchergando" o sic.ch, por isso, fica sem variavel, dando erro ao ser executado.
Obrigado pela paciência
Emanuel
Código: Selecionar todos
function main()
* SISTEMA : FISCAL - Sistema de Gerenciamento
* PROGRAMA : FISCAL - Emanuel Dantas
* OBJETIVO : Menu Principal
* DATA : 03/03/07
******************************************************************************
#include "sic.ch"
clear all
set console off
set intensity on
set dele on
set bell off
set score off
set date british
set message to 24 center
set wrap on
set confirm off
set exclu off
set century on
set procedure to sicrot
************************* VARIÁVEIS (PÚBLICAS/PRIVADAS) ******************
dTSYSTEM = DATE()
wSAIR = SPACE(01)
*********************** AREAS DE TRABALHO *****************
SELE 01
USE GRCA00 INDEX GRCA0001 ALIAS GRCA00
*************************** MENU ************************************
set color to w+/b
@ 00,00 clear to 24,79
@ 00,00 SAY 'FISCAL - SISTEMA DE GERENCIAMENTO'
@ 00,63 SAY 'Data.:'
@ 00,70 SAY DATE()
@ 01,63 SAY 'Prog.:'
@ 02,00 TO 02,79
@ 23,00 TO 23,79
Sistema:="SISTEMA INTEGRADO - Versao 6.00"
VarTipPa:=VarCorPa:=1
FUNDO(VarTipPa,03,00,22,80,VarCorPa)
cabecalho ('Opcoes Gerais do Sistema','LOJA2')
SAVE SCREE TO Tela_Princ
SELE GRCA00
SEEK "01"
if dgr00dtsys<>dTSYSTEM
@ 12,25 say 'Informe data Atual..:'
@ 12,47 get dTSYSTEM valid dTSYSTEM<>ctod(' / / ')
read
if lastkey()=27
close data
return
endif
wconf='N'
@ 24,00
@ 24,00 say 'Confirma Atualizacao da DATA DO SISTEMA [S/N]'
@ 24,47 get wconf pict '@!' valid wconf$'SN'
read
if wconf= 'N'
close data
return
ELSE
RRLOC()
REPL DGR00DTSYS WITH dTSYSTEM
UNLOCK
endif
ENDIF
RESTORE SCREEN FROM TELA_PRINC
janela (08,27,15,46)
WOPCAO = 1
DO WHILE WOPCAO <> 0
@ 24,00
@ 09,28 promp 'CONTROLE ESTOQUE ' MESS 'Controla Atualizacao/Movimento do Estoque '
@ 10,28 promp 'CONTAS A PAGAR ' MESS 'Controle de Contas Para Pagamento'
@ 11,28 promp 'CONTAS A RECEBER ' MESS 'Controle de Contas a Receber/Cobranca'
@ 12,28 promp 'UTILITARIOS ' MESS 'Modulo Para Auxilio na Operacao do Sistema'
@ 13,28 promp 'ANALISE DE VENDAS ' MESS 'Estudo das Vendas na LJ1 e LJ2'
@ 14,28 promp 'ANALISE DE ESTOQUE' MESS 'Estudo do Estoque e sua Rotatividade na LJ1 e LJ2'
MENU TO WOPCAO
SAVE SCREEN TO TELAM
DO CASE
CASE WOPCAO = 0
CRESP = 'N'
?CHR(7)
@ 24,00
@ 24,22 SAY 'Confirme Saida do Sistema (S/N) ? [ ]'
@ 24,57 GET CRESP PICT '!' VALID CRESP $ 'SN*'
READ
@ 24,00
IF CRESP='N'
RESTORE SCREEN FROM TELAM
WOPCAO = 1
else
set exclu on
EXIT
ENDIF
CASE WOPCAO = 1
MENU1()
* CASE WOPCAO = 2
* MENU2()
* CASE WOPCAO = 3
* DO MENU3
CASE WOPCAO = 4
MENU4()
* CASE WOPCAO = 5
* DO MENU5
CASE WOPCAO = 6
MENU6()
ENDCASE
RESTORE SCREEN FROM TELAM
CLOSE DATA
ENDDO
CLOSE DATABASE
Enviado: 21 Mar 2007 17:48
por vagucs
Mas seu programa não tem citação desta DEFINE COR_JANEDI, onde daria este erro? so s for em outro fonte.
Enviado: 21 Mar 2007 17:48
por MARCELOG
Qual é a mensagem de erro que está aparecendo?
O sic.ch tá mesmo no diretório atual?
Experimente colocá-lo do diretório include do xharbour.
MarceloG
Enviado: 21 Mar 2007 17:51
por vagucs
Repare tambem que defines nao são variaveis e sim definições que so existem no momento da compilação, assim este codigo em um PRG puro daria um erro
? COR_JANEDI
Ja assim funcionaria
#define COR_JANEDI "GR+/B"
? COR_JANEDI
Porem pode ver que no segundo exemplo nao existe mais a variavel COR_JANEDI incluida no EXE final, vc pode ver isto usando um descompilador ou abrindo o EXE diretamente, ou seja, a "variavel" só existe no momento da compilação, assim se sua rotina JANELA estiver em outro fonte, a include tem que estar declarada nele, os includes atuam independentemente em cada PRG.
Fonte das funcoes
Enviado: 21 Mar 2007 23:38
por emanuelrdantas
Olá colegas, agradeço primeiramente a imensa atenção que estão me dando aqui.
Bom, a função janela está dentro de um arquivo chamado sicrot.prg que vc pode ver no prg principal declarado como procedure. Eu vou colocar o cabeçaho dele mais a função da janela, pois ele é muito grande.
Código: Selecionar todos
#include "SIC.CH"
.
.
.
*************************************************************
FUNCTION Janela(PJAN1,PJAN2,PJAN3,PJAN4,PJANMENS,PCORJ,PCORF)
*************************************************************
#define COR_JANEDI IF(ISCOLOR(),"B+/B","W+/W") // Cor Relativa a Janela de Edicao
SaveCorJ=SETCOLOR()
PJANMENS=IF(PJANMENS=NIL,"",PJANMENS)
PCORJ=IF(PCORJ = NIL,IF(PROCNAME(1)="__XHELP" .OR. PROCNAME(2)="__XHELP" .OR. PROCNAME(3)="__XHELP" .OR. PROCNAME(4)="__XHELP" .OR.;
PROCNAME(1)="HELP" .OR. PROCNAME(2)="HELP" .OR. PROCNAME(3)="HELP" .OR. PROCNAME(3)="HELP",COR_JanHel,COR_JanEdi),PCORJ)
PCORF=IF(PCORF = NIL,IF(PROCNAME(1)="__XHELP" .OR. PROCNAME(2)="__XHELP" .OR. PROCNAME(3)="__XHELP" .OR. PROCNAME(4)="__XHELP" .OR.;
PROCNAME(1)="HELP" .OR. PROCNAME(2)="HELP" .OR. PROCNAME(3)="HELP" .OR. PROCNAME(3)="HELP",COR_FJaneH,COR_FJaneE),PCORF)
PLIN1=INT(((PJAN3 - PJAN1) / 2) + PJAN1)
PLIN2=INT(((PJAN4 - PJAN2) / 2) + PJAN2)
PLIN3=PLIN1
PLIN4=PLIN2
DO WHILE .T.
SETCOLOR(PCORF)
@ PLIN1,PLIN2 CLEAR TO PLIN3,PLIN4
SETCOLOR(PCORJ)
@ PLIN1,PLIN2,PLIN3,PLIN4 BOX "Û"
SETCOLOR("")
PLIN1-=IIF(PLIN1 > PJAN1,1,0)
PLIN2-=IIF(PLIN2 > PJAN2,1,0)
PLIN3+=IIF(PLIN3 < PJAN3,1,0)
PLIN4+=IIF(PLIN4 < PJAN4,1,0)
IF PLIN1 = PJAN1 .AND. PLIN2 = PJAN2 .AND. PLIN3 = PJAN3 .AND. PLIN4 = PJAN4
EXIT
ENDIF
ENDDO
SETCOLOR(PCORF)
@ PJAN1,PJAN2 CLEAR TO PJAN3,PJAN4
SETCOLOR(PCORJ)
@ PJAN1,PJAN2,PJAN3,PJAN4 BOX "Û"
SOMBRA(PJAN1,PJAN2,PJAN3,PJAN4)
IF LEN(TRIM(PJANMENS)) > 0
@ PJAN1,PJAN2+(((PJAN4+1-PJAN2)-LEN(PJANMENS))/2) SAY PJANMENS COLOR PCORF
ENDIF
SETCOLOR(SaveCorJ)
RETURN(.T.)
Resumindo tudo, eu mando no prg principal executar uma função "janela" que está declarada na procedure sicrot (a qual está com o código em cima, em parte) no prg principal, sendo que esta também possui a "include sic.ch". Esta última possui os defines, entre eles a COR_JANEDI, variável esta solicitada ao ser executado o programa, dizendo que não existe. Portanto, o erro está ao ser executado o programa, ele dá a mensagem dizendo que a variável COR_JANEDI não existe.
Eu também já coloquei a sic.ch dentro da pasta include.
Obrigado a todos pela atenção
Emanuel
Resolvendo o problema
Enviado: 21 Mar 2007 23:48
por emanuelrdantas
Bom, apesar de não saber a causa do erro.
Perdi a paciência e criei todas as defines presentes no sic.ch necessarias para cada função dentro do prg que as chama.
Por exemplo, no prg principal, quando executa a funcao janela, preciso da variavél COR_JANDEI
Então, adicionei essa variável ao prg:
COR_JANEDI = "B+/B"
Acho que foi que descobrir o erro.
Obrigado pessoal
Emanuel
Enviado: 22 Mar 2007 02:15
por vagucs
Repare que se vc definir algo como
#define WAGNER_NUNES 1
e fazer isto
? WAGNER_NUNES
O valor de WAGNER_NUNES será substituido por 1
Mas se fizer isto
? WAGNER_nunes
Ai terei o erro de variavel nao existente, acontece que as defines tem que ser tratadas no fonte extamente como são criadas e na sua rotina vc fez o seguinte:
OR. PROCNAME(3)="HELP",COR_JanHel,COR_JanEdi),
Vc usou COR_JanEdi enquanto devia estar usando COR_JANEDI exatamente como no arquivo include, este é o problema, defines fazem distinção entre maiuscula e minuscula.