#IFDEF GT_WIN_DEFAULT x GT_WVG_DEFAULT

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

#IFDEF GT_WIN_DEFAULT x GT_WVG_DEFAULT

Mensagem por microvolution »

Pessoal bom(a) dia/tarde/noite/madrugada!
O Professor asimoes postou o seguinte código:

Código: Selecionar todos

#ifdef gt1
 REQUEST GT_WIN_DEFAULT
#endif

#ifdef gt2
 REQUEST GT_WVG_DEFAULT
#endif
Bom, durante a execução do meu aplicativo de único .EXE, preciso escolher - de acordo com os módulos, entre qual GT será usada.
O programa em geral, será compilado com #include "HMG.CH" e usar a função HB_GTSYS(), com o seguinte conteúdo:

Código: Selecionar todos

PROCEDURE HB_GTSYS()

   REQUEST HB_GT_WVG_DEFAULT
   // REQUEST HB_GT_WIN_DEFAULT
   REQUEST HB_GT_WVG
   REQUEST HB_GT_WIN

RETURN
Em todos os cadastros, consultas, relatórios, estou usando os objetos, funções, procedures GRÁFICOS da lib GTWVG.
Mas, no módulo VENDAS, por não caber todos os @say,get, quero usar a GT_WIN_DEFAULT.

Bom, infelizmente, na hora da compilação - não é erro de runtime, me dá o seguinte erro:
Harbour 3.2.0dev (r1509031202)
Copyright (c) 1999-2015, http://harbour-project.org/
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(691) Error E0030 Syntax error "syntax error at 'WINDOW'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(692) Error E0030 Syntax error "syntax error at 'MAIN'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(693) Error E0030 Syntax error "syntax error at 'Test'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(694) Error E0030 Syntax error "syntax error at 'Disable button'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(695) Error E0030 Syntax error "syntax error at 'Enable button'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(696) Error E0030 Syntax error "syntax error at 'END'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(697) Error E0030 Syntax error "syntax error at 'END'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(699) Error E0030 Syntax error "syntax error at '@'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(700) Error E0030 Syntax error "syntax error at 'END'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(701) Error E0030 Syntax error "syntax error at 'WINDOW'"
C:\MVinfo\MIGRAR\SiCCA\SiCCA3603hmg\sci10000\pci10011.prg(702) Error E0030 Syntax error "syntax error at 'WINDOW'"
11 errors
Ou seja, os erros acima, são das seguintes linhas:

Código: Selecionar todos

   DEFINE WINDOW Form_Main          AT 0,0       WIDTH 640          HEIGHT 480          VIRTUAL WIDTH 1300          VIRTUAL HEIGHT 800          TITLE 'Virtual Dimensioned Window Demo'          MAIN 
         @ 100,10 BUTTON Button_1                CAPTION 'Vert. ScrollBar Value'                ACTION MsgInfo( Str ( Form_Main.VScrollBar.Value ) )                WIDTH 150 HEIGHT 25 
         @ 200,10 BUTTON Button_2                CAPTION 'Horiz. ScrollBar Value'                ACTION MsgInfo( Str ( Form_Main.HScrollBar.Value ) )                WIDTH 150 HEIGHT 25 
   END WINDOW
   ACTIVATE WINDOW Form_Main
Finalmente, o professor asimoes sugeriu as linhas do #IFDEF que define tal coisa. Bom, mas, não sei a sintaxe desse comando e mesmo usando-o gera mensagem de erro.
Nota:
1 - harbour 3.2
2 - compilando com HMG/IDE 3.4.2.
Bom domingo!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

#IFDEF GT_WIN_DEFAULT x GT_WVG_DEFAULT

Mensagem por Jairo Maia »

Olá Pessoal,

A diretiva #ifdef informa ao compilar o que linkar no executável. Não pode ser alterada em tempo de execução. Penso que o autor do tópico deseja alternar entre as GTs GT_WIN e GT_WVG.

Porém, em caso de uso dessa diretiva, ela é dependente da constante definida pelo comando #define.

Exemplo 1:

Código: Selecionar todos

#define msg1  // se trocar msg1 para msg2 mostra msg 2

#ifdef msg1

 Hb_Alert( "Definido para compilar a mensagem 1" )

#endif
 
#ifdef msg2

 Hb_Alert( "Definido para compilar a mensagem 2" )

#endif
Exemplo 2:

Código: Selecionar todos

#define msg1  // se comentar essa linha será compilado para mostrar a msg 2

#ifdef msg1

 Hb_Alert( "Definido para compilar a mensagem 1" )
 
#else

 Hb_Alert( "Nao foi definido para compilar a mensagem 1, entao compilou a mensagem 2" )

#endif
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder