Página 2 de 10
cor no tbrowse
Enviado: 14 Ago 2021 18:14
por cjp
Compilei teu exemplo, mas deu erro, não pude testar.
Mas, pelo que entendi, a questão é só a colorspec, correto? Não bastaria acrescer esta parte na minha função? Por que isso não está funcionando?
Chegou o livro que vc me indicou, comecei a ler, mas ainda não cheguei nesta parte.
Quintas, realmente seria melhor do jeito que vc mencionou, mas ainda não sei como faria isso.
cor no tbrowse
Enviado: 15 Ago 2021 00:13
por alxsts
Olá!
cjp escreveu:Compilei teu exemplo, mas deu erro, não pude testar.
Como sempre, econômico ao fornecer informações vitais... que erro? Onde? Na compilação? Na execução?
Criei um exemplo completo e funcional, atendendo a tua necessidade e que funciona no meu ambiente, conforme print da tela. Se você simplesmente compilar e executar no teu ambiente, não vai funcionar. Pelo menos alterou a string de conexão? Criou as tabelas conforme script que anexei?
cjp escreveu:Mas, pelo que entendi, a questão é só a colorspec, correto? Não bastaria acrescer esta parte na minha função?
Sim, foi exatamente isto que indiquei:
alxsts escreveu:Estude, adapte à tua necessidade e informe se funcionou.
cjp escreveu:Por que isso não está funcionando?
Como vou saber?
cjp escreveu:Chegou o livro que vc me indicou, comecei a ler, mas ainda não cheguei nesta parte.
Espero que te ajude. Ensina muito sobre get system, codeblock e tbrowse.
cjp escreveu:Quintas, realmente seria melhor do jeito que vc mencionou, mas ainda não sei como faria isso.
Então faça como ele indicou. Boa sorte!
cor no tbrowse
Enviado: 15 Ago 2021 01:25
por cjp
Como sempre, econômico ao fornecer informações vitais... que erro? Onde? Na compilação? Na execução?
Criei um exemplo completo e funcional, atendendo a tua necessidade e que funciona no meu ambiente, conforme print da tela. Se você simplesmente compilar e executar no teu ambiente, não vai funcionar. Pelo menos alterou a string de conexão? Criou as tabelas conforme script que anexei?
Desculpe a falt de informações.
Erro na execução (segue em anexo).
Alterei a string de conexão e criei as tabelas sim.
Então faça como ele indicou. Boa sorte!
Quero deixar claro que eu quis dizer que o modo do Quintas é melhor do que o meu modo de fazer o tbrowse. Não estava comparando com o teu exemplo.
cor no tbrowse
Enviado: 15 Ago 2021 12:18
por alxsts
Olá!
adUseClient é uma constante manifesta, definida no arquivo Ado.ch:
Como sabemos, constantes manifestas são diretivas utilizadas pelo pré-processador.
Wikipedia escreveu:
Qual a função do pré-processador?
O pré-processador é um programa que faz alguns processamentos simples antes do compilador. Ele é executado automaticamente todas as vezes que seu programa é compilado, e os comandos a serem executados são dados através de diretivas do pré-processador.
As diretivas de pré-processador são
case-sensitive, ou seja adUseClient é diferente de aduseclient. Provavelmente você alterou a linha 52 do fonte que postei e escreveu adUseClient de forma diferente. Tem que estar exatamente como está no arquivo Ado.ch, ou seja, a linha 52 deve estar assim:
Se você consegue compilar, é porque o arquivo Ado.ch existe no teu ambiente. Verifique se nele consta
Boa sorte!
cor no tbrowse
Enviado: 15 Ago 2021 13:02
por cjp
Então, na primeira vez que tentei compilar, deu falta do Ado.ch. Achei ele numa versão anterior que tinha aqui, copiei na pasta, e compilou. Não mexi em nada nele (nem saberia).
Agora fui verificar, e tem sim #DEFINE adUseClient 3 nele.
Também não alterei oCn:CursorLocation := adUseClient do teu exemplo. Só mexi nele na string de conexão.
cor no tbrowse
Enviado: 15 Ago 2021 14:34
por alxsts
Olá!
Bom... aí foge ao meu alcance para ajudar. Alguma coisa errada tem. Talvez esteja pegando de outro lugar. Verifique. Coloque no teu fonte o próprio #define:
cor no tbrowse
Enviado: 15 Ago 2021 17:00
por cjp
Então, realmente o problema era na minha Ado.ch aqui. Resolvi este e outros erros que apareceram depois da mesma forma.
Enfim, tua função funcionou perfeitamente aqui.
Agora preciso fazer funcionar na minha função.
Primeiro, testei colocar esta parte na minha função (já tinha feito isso antes):
Código: Selecionar todos
// Paint TBrowse current line...
oTbr:ColorRect( { oTbr:RowPos, oTbr:LeftVisible, oTbr:RowPos, oTbr:RightVisible }, { 2, 1 } )
// ... and current cell in different colors
If oTbr:colPos == 3 .And. At( "TOTAL ", Upper( Eval( oTBr:getColumn( 3 ):block ) ) ) > 0
oTbr:ColorRect( { oTbr:rowPos, oTbr:colPos, oTbr:rowPos, oTbr:colPos }, { 6, 6 } )
Else
oTbr:ColorRect( { oTbr:rowPos, oTbr:colPos, oTbr:rowPos, oTbr:colPos }, { 3, 2 } )
Endif
oTbr:refreshCurrent()
Mas continua não funcionando.
Afora isto, a única parte que eu identifiquei na tua função que pode ter alguma coisa a ver com a cor é esta:
Código: Selecionar todos
STATIC FUNCTION Rgb( r, g, b )
RETURN ( r + ( g * 256 ) + ( b * 256 * 256 ) )
Realmente tem a ver? Não achei nenhuma chamada a ela.
Teria alguma outra parte?
cor no tbrowse
Enviado: 15 Ago 2021 17:48
por JoséQuintas
Tem um erro grave aí, ou mais.....
Seus erros nunca se limitam a parte que mostra....
Código: Selecionar todos
// Paint TBrowse current line...
oTbr:ColorRect( { oTbr:RowPos, oTbr:LeftVisible, oTbr:RowPos, oTbr:RightVisible }, { 2, 1 } )
// ... and current cell in different colors
If oTbr:colPos == 3 .And. At( "TOTAL ", Upper( Eval( oTBr:getColumn( 3 ):block ) ) ) > 0
oTbr:ColorRect( { oTbr:rowPos, oTbr:colPos, oTbr:rowPos, oTbr:colPos }, { 6, 6 } )
Else
oTbr:ColorRect( { oTbr:rowPos, oTbr:colPos, oTbr:rowPos, oTbr:colPos }, { 3, 2 } )
Endif
oTbr:refreshCurrent()
Está explícito aí o erro.
Pinta as cores.... depois manda repintar com refreshCurrent().... aí não tem cor que se mantenha.
Além disso.... como diz o comentário no fonte, isso é referente a pintar a linha atual e coluna atual, não pra definir a cor das colunas.
cor no tbrowse
Enviado: 15 Ago 2021 17:51
por JoséQuintas
No final de tudo, tá querendo deixar genérico o que não é genérico, e tá complicando cada vez mais a rotina que deveria ser genérica.
o tbrowse é: o browse e as colunas
ou vai mexer no browse, ou nas colunas, e não no resto (geralmente).
cor no tbrowse
Enviado: 15 Ago 2021 18:08
por JoséQuintas
No meu browse genérico passo 1 array, e a rotina de funções, e coisas extras quando precisa.
o array tem as colunas, com título, conteúdo e COR.
O browse genérico apenas faz uso disso.
Já te falei isso da outra vez.
cor no tbrowse
Enviado: 15 Ago 2021 18:10
por cjp
Está explícito aí o erro.
Pinta as cores.... depois manda repintar com refreshCurrent().... aí não tem cor que se mantenha.
Além disso.... como diz o comentário no fonte, isso é referente a pintar a linha atual e coluna atual, não pra definir a cor das colunas.
Eu não sabia que o refreshcurrent() iria repintar. Como não entendo de tbrowse, apenas copiei o que estava no modelo do alxsts.
No final de tudo, tá querendo deixar genérico o que não é genérico, e tá complicando cada vez mais a rotina que deveria ser genérica.
o tbrowse é: o browse e as colunas
ou vai mexer no browse, ou nas colunas, e não no resto (geralmente).
O que vc me sugere? Eu não sei fazer diferente. Um exemplo que vc me deu no passado de tbrowse genérico não funcionou aqui. Então, estou fazendo o que consigo dentro dos meus limitados conhecimentos.
cor no tbrowse
Enviado: 15 Ago 2021 18:11
por cjp
Ah, esqueci na resposta anterior: tirei o oTBrowse:refreshCurrent() pra testar, mas continua não funcionando.
cor no tbrowse
Enviado: 15 Ago 2021 18:55
por JoséQuintas
Primeiro crie um pra uma situação.
Veja as partes comuns que mudam de um pra outro, e coloque como parâmetro.
Um array com título das colunas, conteúdo e cor, e mais uma variável pra função de usuário.
Isso resolve a maioria dos casos.
cor no tbrowse
Enviado: 15 Ago 2021 20:55
por alxsts
Olá!
cjp escreveu:Afora isto, a única parte que eu identifiquei na tua função que pode ter alguma coisa a ver com a cor é esta:
Não, não tem nada a ver. Pode deletar estas linhas. Eram de outro fonte e ficaram neste, indevidamente.
JoséQuintas escreveu:Está explícito aí o erro. Pinta as cores.... depois manda repintar com refreshCurrent().... aí não tem cor que se mantenha.
Não... não tem erro aí. A linha do refreshCurrent() tem que ser mantida, pela seguinte razão: após a estabilização ( forceStable() ), o colorBlock da linha corrente é alterado. Para que ela seja repintada, com o novo colorBlock, é preciso invocar o método refreshCurrent().
cjp escreveu:mas continua não funcionando
Quando escreve isto, o que não está funcionando? Somente as cores ou algo específico da tua rotina?
É difícil consertar código com problema sem ver o código... acho que deveria mostrar o que está fazendo, se possível, postando a função completa.
cor no tbrowse
Enviado: 15 Ago 2021 22:03
por JoséQuintas
alxsts escreveu: A linha do refreshCurrent() tem que ser mantida
ColorRect() altera as cores, então refreshCurrent() tem que vir antes de alterar as cores.