Duvida sobre os #defines

Post Reply
Soares289
Posts: 30
Joined: Tue Apr 17, 2007 7:07 pm
Location: Brasil-São Paulo-SP

Duvida sobre os #defines

Post by Soares289 »

Eu adicionei uma linha no "FiveWin.ch" com um #define de uma variavel que uso em varios documentos, como fasso para redefinir esse valor em outras partes do código de forma que a modificação seja vista por todos os documento que usam o include fo FiveWin?

Um abraço a todos, obrigado.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Si la modificación la haces en FiveWin.ch entonces tendrás que recompilar todos los PRGs que usen FiveWin.ch

Si es un valor variable, entonces no podrás usar un define sino una variable pública ó llamar a una función que devuelva un valor que puede cambiar
regards, saludos

Antonio Linares
www.fivetechsoft.com
Soares289
Posts: 30
Joined: Tue Apr 17, 2007 7:07 pm
Location: Brasil-São Paulo-SP

Post by Soares289 »

Desculpe, mais eu não entendi muito bem.

Eu não posso usar um define no fivewin e sim uma variavel public?
Ou uma função queretorna o valor?

Poderia me mostrar um exemplo?

Por que eu defini os valores padrões no fivewin, e sempre que o programa inicia ele carrega um arquivo de configuração com os valores que os defines devem ficar, mais isso só funciona em 1 documento, queria que todos os outros que usassem o include do fivewin tivessem acesso a essas variaveis cm o valor já atualizado.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

>
Eu adicionei uma linha no "FiveWin.ch" com um #define de uma variavel que uso em varios documentos
>

Puedes mostrarnos como es esa línea ? Y cómo la usas ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
Soares289
Posts: 30
Joined: Tue Apr 17, 2007 7:07 pm
Location: Brasil-São Paulo-SP

Post by Soares289 »

Claro, aqui vai.

Code: Select all

#DEFINE nXP GetSysMetrics(0)/100   //Pega a porcentagem da tela
#DEFINE nYP GetSysMetrics(1)/100
#Define nBorda ((nXP + nYP) / 4)     //O tamanho da borda de alguns objs

#define wBackClr        RGB(235,233,237)    //as cores usadas pelas classes
#define wTxtClr         RGB(  0,  0,  0)
#define wTxtClrSel      RGB(230,230,255)
#define wClrSelFocus    RGB( 70,110,200)
#define wClrSel         RGB(170,180,200)
#define wClrNormal      RGB(220,230,240)
#define wClrHeader      RGB( 55, 70,125)

#define oFontP          TFont():New("Courier New",,15)

//Uma classe que monta diversos botões em uma janela
::nBtnWidth    := ((::nWidth - (nBorda * 2)) - ((nBorda / 2) * (nCols - 1))) / nCols   
   ::nBtnHeight   := (::nHeight - (nBorda * 2) - ((nRows - 1) * (nBorda / 2))) / nRows

//Aqui um exemplo das cores sendo usada em outra classe

   if ::aClrSelFocus[1] == nil ; ::aClrSelFocus[1] := wTxtClrSel        ; endif
   if ::aClrSelFocus[2] == nil ; ::aClrSelFocus[2] := wClrSelFocus      ; endif

// e aqui como uso o nXP e nYP ( as porcentagens)

if nWidth   == nil ; ::nWidth    := 60 * nXP ; else ; ::nWidth  := nWidth   * nXP ; endif
      if nHeight  == nil ; ::nHeight   := 60 * nYP ; else ; ::nHeight := nHeight  * nYP ; endif
A coisa é que estou passando um sistema em tela texto em harbour para fivewin, e na versão texto, o usuario escolhe as fontes e cores que preferem.
E o sistema tem que se ajustar de acordo com o tamanho da janela sem perder nenhuma informação, por isso que preciso redefinir as cores e a fonte no inicio da aplicação, que é quando ela carrega as configurações do usuario, e que os valores redefinidos tenhão efeito em toda a aplicação

Se poder me ajudar, ficarei muito agradecido.
Um abraço, t+.
Soares289
Posts: 30
Joined: Tue Apr 17, 2007 7:07 pm
Location: Brasil-São Paulo-SP

Post by Soares289 »

:roll: Pocha, alguém poderia me dar uma dica ai de como fazer isso :?:

Agradecido :!:
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Si quieres que esos defines funcionen en cualquier PRG entonces debes incluirlo en un fichero CH que se incluya siempre, como FiveWin.ch

En caso contrario, debes usar funciones, en vez de defines, para que esten accesibles desde toda la aplicación
regards, saludos

Antonio Linares
www.fivetechsoft.com
yury
Posts: 56
Joined: Wed May 23, 2007 2:01 pm

Post by yury »

olá,

pelo q entendi vc criou um define no FiveWin.ch e depois está querendo alterar o valor deste define via código em tempo de execução, de acordo com as preferências do usuário. É isso, não é ?

bem se for isso, pelo que eu entendo os defines devem ser utilizados para valores CONSTANTES e não VARIÁVEIS...

neste seu caso, vc deve criar variáveis públicas, que poderão ser alteradas em tempo de execução. Elas pode até estarem atreladas a um define, mas somente como identificadores constantes. Na minha aplicação utilizo alguma coisa assim:

Code: Select all

#define COR_TELA   1
#define COR_GET    2
#define COR_SAY    3

// neste caso os defines somente para facilitar a identificação da posição
// dos elementos na tabela

PUBLIC aCores:={ RGB(255,255,255), RGB(255,255,255), RGB(0,0,0) }

// quando vc quiser alterar, vc recarrega os valores na variável pública

aCores[ COR_TELA ] := RGB(   0, 255,   0 )
aCores[ COR_GET  ] := RGB(   0, 255, 255 )
aCores[ COR_SAY  ] := RGB( 255,   0, 255 )
espero ter ajudado

um abraço
Yury Marcelino Al
yury030575@yahoo.com.br
vimansca@vimansca.com.br
Leme / SP - Brasil
Soares289
Posts: 30
Joined: Tue Apr 17, 2007 7:07 pm
Location: Brasil-São Paulo-SP

Post by Soares289 »

Ajudou sim, muito aobrigado.

É exatamente oque estava tentando fazer, só não sabia como declarar uma variavel que fosse acessivel de outros documentos, achava que os defines servião para isso...

Mutio obrigado de novo, um abraço.
Post Reply