TBROWSE

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

Moderador: Moderadores

GilmarDalantonia
Usuário Nível 1
Usuário Nível 1
Mensagens: 44
Registrado em: 11 Dez 2014 16:42
Localização: Adamantina/SP

TBROWSE

Mensagem por GilmarDalantonia »

Boa tarde pessoal, alguem sabe como mudar a cor do titulo dos campos e das linhas que separam as colunas no tbrowse?
consegui mudar a cor das colunas, mas linhas e cabeçalho não achei como
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

TBROWSE

Mensagem por JoséQuintas »

Só o meu Harbour faz isso.
Enviei a alteração pro oficial mas tá lá parado há anos.
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:

TBROWSE

Mensagem por cjp »

Não sei se dá pra tratar disso neste mesmo tópico, mas creio que sim, pois ele é genérico sobre Tbrowse.
Gostaria de saber como faço para centralizar os dados em algumas colunas do Tbrowse. Preciso que algumas apenas estejam com os dados centralizados, os demais como já estão (alinhados à esquerda).
É possível?
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

TBROWSE

Mensagem por JoséQuintas »

Sobre o que mencionei, link direto:

https://github.com/harbour/core/pull/18 ... 4c5062437f

Passo a passo:
pull1.png
pull2.png
pull3.png
Tá lá desde março/2019, se estiver no padrão aceitável, seria só alguém clicar e confirmar o merge.
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

TBROWSE

Mensagem por alxsts »

Olá!
cjp escreveu:como faço para centralizar os dados em algumas colunas do Tbrowse

Código: Selecionar todos

oTBColumn   := TBColumn():new( PadC( "Nome", 20 ), { || PadC( Alltrim( Tabela->nome ), 20 ) } )
oTBrowse:addColumn( oTBColumn )
Pode usar também PadR() e PadL().
[]´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:

TBROWSE

Mensagem por cjp »

Coloquei exatamente como vc disse, e está dando o seguinte erro:

Código: Selecionar todos

Ocorreu o erro: Error BASE/1005  Nenhuma variável exportada: WIDTH
É provável que eu precisasse fazer alguma adaptação ao meu sistema, mas eu não sei como fazer isso. Pode me ajudar?
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

TBROWSE

Mensagem por JoséQuintas »

Não sei a que mensagem se referiu, porque não achei width em mensagem nenhuma.

Não sei se ajuda:
A mensagem de erro é quando não existe width no objeto/classe.
tipo.... campo:width, mas se olhar o objeto campo, ele não tem a propriedade width
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:

TBROWSE

Mensagem por cjp »

Pois é, estranhamente, meu Tbrowse não tem nenhum width. Mas estava funcionando até agora.

Estava assim:

Código: Selecionar todos

                oColumn       := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
E eu coloquei assim:

Código: Selecionar todos

                oTBColumn   := TBColumn():new( PadC( "Nome", 20 ), { || PadC( Alltrim( Tabela->nome ), 20 ) } )
Como faço?
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

TBROWSE

Mensagem por alxsts »

Olá!

O código que postei foi apenas um exemplo genérico. Claro que se você simplesmente copiar para o teu programa vai dar erro...

Você mencionou TBROWSE e não ADO...

Tente isto:

Código: Selecionar todos

oColumn := TBColumnNew( PadC( Alltrim( oRs:fields(i):name() ), 20 ), { || PadC( Alltrim( Eval( ADORecordSetFieldBlock( oRs, i ) ) ), 20 ) } )
Não sei se vai dar certo. Talvez tenha que fazer um tratamento na função ADORecordSetFieldBlock() para alinhar da forma desejada...
[]´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:

TBROWSE

Mensagem por cjp »

De fato, eu não falei que era ADO porque achei que a questão era só de Tbrowse, achei que não tinha a ver com o ADO em si.

Copiei simplesmente do jeito que vc colocou, pois não soube fazer as alterações necessárias.

Fiz agora com tua última sugestão, mas também não funcionou. Deu o seguinte erro:

Código: Selecionar todos

Ocorreu o erro: Error WINOLE/1007  O item nÒo pode ser encontrado na coleþÒo correspondente ao nome ou ao ordinal solicitado. (0x800A0CC1): ADODB.Recordset
Estranho, porque não mudei mais nada. Esse erro normalmente dá no ADO quando tentamos usar um campo da tabela que não está no select.

Eu não saberia mudar a ADORecordSetFieldBlock, que está assim:

Código: Selecionar todos

FUNCTION ADORecordSetFieldBlock( oRs, i, xVal )

   LOCAL bRet

   IF xVal == NIL
      IF oRs:eof()
         bRet := { || Space( Max( oRs:Fields( i ):DefinedSize , Len( oRs:Fields( i ):name ) ) ) }
      ELSE
         bRet := { || oRs:Fields( i ):value }
      ENDIF
   ELSE
      bRet := { |xVal| oRs:Fields( i ):Value := xVal }
   ENDIF

   RETURN bRet

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

TBROWSE

Mensagem por JoséQuintas »

Não tem a ver com ADO.

No fórum são postados exemplos, porque tem que ajustar conforme a necessidade de cada um.
Quando você considera algo desconhecido, você simplesmente copia e cola fonte.
Isso não dá certo.
Mesmo assim, não teria explicação para o erro de Width.
O erro piorou... talvez ao invés de passar o número do campo, está passando o tamanho que está sendo usado como número do campo.

Isso não tem a ver com ADO, nem browse, e sim com programação.

Esse codeblock pra ADO está relativamente simples, serve pra ler ou gravar campo no ADO.

NÃO tem a ver diretamente com o problema, mas:

No DBF, ao pegar estrutura, temos NAME, SIZE, LEN, DEC
No ADO temos :Name, :DefinedSize, :Value (este último é o valor, o conteúdo)

No DBF temos Field( nCont ), e no ADO temos oRS:Fields( nCont )
Mas no ADO temos
oRs:Fields( nCont ):Value
oRs:Fields( nCont ):DefinedSize
oRs:Fields( nCont ):Name

Além disso, a função tem EOF(), Space(), Max(), Nil, que são coisas auto-explicativas.

A função retorna o codeblock a ser usado, ou pra ler ou pra salvar.

Se o codeblock vém pronto dessa função.... com certeza é nela que precisa mexer.

Só que aí entra passar o parâmetro de tamanho e/ou de centralizar.

E voltamos ao início do texto: o SEU uso é SEU. Tem que fazer por si próprio de acordo com o que precisa.
Postamos exemplos e você coloca diretamente em seu fonte, o que na prática é estragar seu fonte cada vez mais.

E se a função pode retornar campos numéricos, data, caractere, etc... vai precisar colocar análises sobre isso, porque pra cada tipo de campo vai ter uma solução diferente.

Bom... ou pensa nos exemplos postados, pra adequar à sua necessidade, ou vai complicar cada vez mais isso.
De repente resolve uma coisa e estraga outra, então, vai ter que saber como resolver cada situação, SEM FICAR COPIANDO/COLANDO FONTE.
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:

TBROWSE

Mensagem por cjp »

De fato eu apenas copiei, porque de fato não entendo o suficiente, nem de Tbrowse, nem de codeblock. E também não entendo muito de ADO, a não ser o que vc mesmo me ensinou.
O código todo foi copiado do teu modelo, com pequenas modificações, e está funcionando muito bem. Eu só queria uma pequena alteração, apenas centralizar uns campos.
Mas vc tem razão: eu não tenho conhecimento suficiente para fazer isso sem ajuda. Então, é melhor desistir.
Inacio de Carvalho Neto
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

TBROWSE

Mensagem por alxsts »

Olá!
cjp escreveu:Então, é melhor desistir.
Não meu querido. Desistir? Jamais! O melhor é estudar, pesquisar, se esforçar e sentir, no final, a alegria de ver funcionar! E não se esqueça que tem vários colegas aqui, dispostos a colaborar, como sempre.
[]´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

TBROWSE

Mensagem por JoséQuintas »

cjp escreveu:Mas vc tem razão: eu não tenho conhecimento suficiente para fazer isso sem ajuda. Então, é melhor desistir.
Ou pior que isso... já fez isso em outro fonte, que eu me lembro.
Só que ao invés de usar como base o que já fez, tá pegando o genérico.

oRs:Fields( 1 ):Value

Isso não retorna o valor? pode ser string, data, número, etc.
Quer a string centralizada?

Ao invés de oRs:Fields( "NOME" ):Value

Vai usar Padc( oRs:Fields( "NOME" ):Value, 20 )

Só que não a partir desse fonte genérico, no outro aonde informa cada campo.
Ou será que vai centralizar tudo que é string, tudo que é número, tudo que é data, etc?
Então não serve o genérico.
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

TBROWSE

Mensagem por JoséQuintas »

Mas pera aí.....

Esse fonte é o que mostra tudo que vém do SELECT, exatamente como veio.

Se servir, pode apenas alterar o SELECT pra trazer tudo pronto do jeito que quer.
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