Page 1 of 1
Duvida sobre os #defines
Posted: Fri May 18, 2007 2:13 pm
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.
Posted: Fri May 18, 2007 2:37 pm
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
Posted: Fri May 18, 2007 4:27 pm
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.
Posted: Fri May 18, 2007 5:50 pm
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 ?
Posted: Mon May 21, 2007 3:19 pm
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+.
Posted: Wed May 23, 2007 12:16 pm
by Soares289
Pocha, alguém poderia me dar uma dica ai de como fazer isso
Agradecido
Posted: Wed May 23, 2007 4:23 pm
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
Posted: Thu May 24, 2007 12:26 pm
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
Posted: Mon May 28, 2007 5:36 pm
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.