cor no tbrowse

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

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem 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.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

cor no tbrowse

Mensagem 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!
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem 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.
Anexos
erro.png
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

cor no tbrowse

Mensagem por alxsts »

Olá!

adUseClient é uma constante manifesta, definida no arquivo Ado.ch:

Código: Selecionar todos

#DEFINE adUseClient 3
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:

Código: Selecionar todos

oCn:CursorLocation := adUseClient
Se você consegue compilar, é porque o arquivo Ado.ch existe no teu ambiente. Verifique se nele consta

Código: Selecionar todos

#DEFINE adUseClient 3
Boa sorte!
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem 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.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

cor no tbrowse

Mensagem 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:

Código: Selecionar todos

#define adUseClient 3
[]´s
Alexandre Santos (AlxSts)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem 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?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor no tbrowse

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor no tbrowse

Mensagem 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).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor no tbrowse

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem 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.
Inacio de Carvalho Neto
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

cor no tbrowse

Mensagem por cjp »

Ah, esqueci na resposta anterior: tirei o oTBrowse:refreshCurrent() pra testar, mas continua não funcionando.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor no tbrowse

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

cor no tbrowse

Mensagem 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.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

cor no tbrowse

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder