cor no tbrowse

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

Moderador: Moderadores

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 »

browse.png
Não sei o que quis dizer com parou de funcionar.
Aqui mais genérica.
test.prg
(5.47 KiB) Baixado 319 vezes
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 »

Complicando pra facilitar...
Que tal modificar a classe da Microsoft?
Agora temos oRs:ToDate(), oRs:ToString(), oRs:ToNumber() e oRs:ToStr()

Código: Selecionar todos

      oTBrowse := { ;
         { "DATA",       { || oRs:ToDate( "DATA" ) } }, ;
         { "HORA",       { || oRs:ToString( "HORA", 8 ) } }, ;
         { "COMIDA",     { || oRs:ToString( "COMIDA", 30 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
         { "QUANTIDADE", { || oRs:ToString( "QUANTIDADE", 20 )  } }, ;
         { "PONTOS",     { || oRs:ToStr( "PONTOS", 6 ) } }, ;
         { "ID",         { || oRs:ToStr( "ID", 6 ) } } }
test.prg
(6.07 KiB) Baixado 271 vezes
Aqui compilo com WVG, não sei se faz diferença.
browse.png
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 »

Pra curiosidade, apesar de anexado no anterior, o fonte "normal":

Código: Selecionar todos

FUNCTION Teste()

   LOCAL oRs, oTBrowse
   LOCAL oCN := ConexaoMySQL( "serverjpa", "tatu", "tatu", "tatu" )

   Set( _SET_CODEPAGE, "PTISO" )
   Set( _SET_EVENTMASK, INKEY_ALL + HB_INKEY_GTEVENT - INKEY_MOVE )
   SET DATE BRITISH

   hb_gtInfo( HB_GTI_WINTITLE , "Testes TBrowse colorBlock() com Acesso ao MySQL via ADO" )
   hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
   SetMode( 20, 80 )
   SetColor( "W/B","N/W",,,"W/B" )
   CLS

   oCn:open()

   DO WHILE .T.
      @ 4, MaxRow() SAY Padr( "Obtendo informações... ", 22 ) COLOR "W/W"
      oRs := oCn:Execute( "SELECT * FROM tbDieta;" )
      SuperADO( oRs )
      IF oRs == NIL .OR. oRs:Eof()
         Hb_Alert( "Não foi possível obter dados para exibição.",, "W+/B" )
         EXIT
      ENDIF
      oTBrowse := { ;
         { "DATA",       { || oRs:ToDate( "DATA" ) } }, ;
         { "HORA",       { || oRs:ToString( "HORA", 8 ) } }, ;
         { "COMIDA",     { || oRs:ToString( "COMIDA", 30 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
         { "QUANTIDADE", { || oRs:ToString( "QUANTIDADE", 20 )  } }, ;
         { "PONTOS",     { || oRs:ToStr( "PONTOS", 6 ) } }, ;
         { "ID",         { || oRs:ToStr( "ID", 6 ) } } }

      BrowseADO( oRs, oTBrowse )
      IF Alert( "Fechar?", { " Não ", " Sim " }, "W+/N" ) == 2
         oRs:Close()
         EXIT
      ENDIF
      EXIT
   ENDDO
   oCn:close()

   RETURN Nil
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 »

Agora seria acrescentar parâmetro com codeblock de função de usuário.
Talvez também um pra congelar colunas
Com isso, uma única função de tbrowse pode atender todo aplicativo.
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 »

Compilei teu exemplo aqui e funcionou bem.
Dei uma olhada e entendi bem a função. Parece realmente infinitamente melhor do que a minha, que está uma confusão (embora funcione bem).
A questão que fica é a que vc mesmo colocou: a função de usuário. Eu preciso justamente dessa função para isso.
Como e onde eu encaixo a função de usuário? E como essa função poderia ser genérica, para todas as funções do meu sistema?
Ou não seria genérica? Teria que fazer uma função de usuário para cada função?
Aproveitando, enquanto não resolvo este problema, tenho que continuar usando a minha função mesmo. Mexendo tanto nela para resolver esta questão, acabei estragando ela para outra situação, e não estou sabendo voltar à situação anterior.
Basicamente o problema é na cor. Fazendo assim:

Código: Selecionar todos

      elseif procname(1)="ENTERITEM" .or. procname(2)="ENTERITEM"
        set color to w/r
eu conseguia que ficasse do jeito que queria: tela totalmente vermelha, com as letras brancas.

Mas agora, depois que mexi em alguma coisa, que não sei o que foi, a tela está ficando parcialmente azul, na parte de exibição do tbrowse(). Isto está acontecendo, pelo que pude apurar, depois do oTBrowse:refreshCurrent().

Já procurei de tudo na função, a única referência a color é mesmo a que postei acima.
Também tentei comparar com uma versão anterior da mesma função que tenho aqui, mas não achei nada que possa justificar esse azul.

Tenho plena consciência de que a culpa disso é a confusão que está esta função. Preciso mudar isso. Mas, enquanto não sei fazer melhor do que está, preciso muito desta função funcionando, pois ela é usada em várias funções do meu sistema, e funciona muito bem. E essa parte que está com esse problema na cor é uma das funções mais importantes (se não a mais importante) do meu sistema.

Por favor, alguém poderia 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

cor no tbrowse

Mensagem por JoséQuintas »

Só faça diferente do Clipper. No Clipper é string, passe por codeblock.

Código: Selecionar todos

BrowseADO( oRs, oTBrowse, bFuncaoUsuario )
Na rotina que chama é criar o codeblock que vai atender, com os parâmetros padrão do tbrowse que pode precisar, exemplo:

Código: Selecionar todos

BrowseADO( oRs, oTBrowse, { | oBrowse, nKey | SuaFuncao( oRs, oBrowse, nKey ) } )

STATIC FUNCTION SuaFuncao( oRs, oBrowse, nKey )
...
Na BrowseADO(), coloca nos testes de tecla, depois das teclas padrão.
Passe os parâmetros que achar necessários
Exemplo

Código: Selecionar todos

IF bFuncaoUsuario != Nil
   Eval( bFuncaoUsuario, oBrowse, nKey )
ENDIF
Com isso, a browse genérica chama sua rotina que vai dar um comportamento diferente ao browse.
A parte padrão fica no browse genérico.
A parte diferente você adiciona com a função de usuário, conforme a necessidade de cada módulo.
O resultado é igual a ter um browse diferente em cada módulo, mas ao invés de completo, faz só a parte diferente, a lista de campos e a função de usuário.
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 »

Seus fontes ficariam neste estilo

Código: Selecionar todos

FUNCTION Teste()

   LOCAL oRs, oTBrowse
   LOCAL oCN := ConexaoMySQL( "serverjpa", "tatu", "tatu", "tatu" )

   Set( _SET_CODEPAGE, "PTISO" )
   Set( _SET_EVENTMASK, INKEY_ALL + HB_INKEY_GTEVENT - INKEY_MOVE )
   SET DATE BRITISH

   hb_gtInfo( HB_GTI_WINTITLE , "Testes TBrowse colorBlock() com Acesso ao MySQL via ADO" )
   hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
   SetMode( 20, 80 )
   SetColor( "W/B","N/W",,,"W/B" )
   CLS

   oCn:open()

   DO WHILE .T.
      @ 4, MaxRow() SAY Padr( "Obtendo informações... ", 22 ) COLOR "W/W"
      oRs := oCn:Execute( "SELECT * FROM tbDieta;" )
      SuperADO( oRs )
      IF oRs == NIL .OR. oRs:Eof()
         Hb_Alert( "Não foi possível obter dados para exibição.",, "W+/B" )
         EXIT
      ENDIF
      oTBrowse := { ;
         { "DATA",       { || oRs:ToDate( "DATA" ) } }, ;
         { "HORA",       { || oRs:ToString( "HORA", 8 ) } }, ;
         { "COMIDA",     { || oRs:ToString( "COMIDA", 30 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
         { "QUANTIDADE", { || oRs:ToString( "QUANTIDADE", 20 )  } }, ;
         { "PONTOS",     { || oRs:ToStr( "PONTOS", 6 ) } }, ;
         { "ID",         { || oRs:ToStr( "ID", 6 ) } } }

      BrowseADO( oRs, oTBrowse, { | oBrowse, nKey | TestUser( oRs, oBrowse, nkey ) } )
      IF Alert( "Fechar?", { " Não ", " Sim " }, "W+/N" ) == 2
         oRs:Close()
         EXIT
      ENDIF
      EXIT
   ENDDO
   oCn:close()

   RETURN Nil

STATIC FUNCTION TestUser( oRs, oBrowse, nKey )

   IF nKey == K_F5
      Alert( "Foi teclado F5" )
      Alert( oRs:ToString( "COMIDA" ) )
     oBrowse:RefreshAll()
   ENDIF

   RETURN 1
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 »

Estou testando da forma como vc fez, mas dentro da minha aplicação. O tbrowse em si tá funcionando bem.
Mas a função de usuário, não sei porquê, não está funcionando. Ao teclar F5, nada acontece. Devo estar fazendo algo errado, mas não achei nada.
Mas dois detalhes:
1) ao sair do tbrowse, a tela fica estranha (vide imagem anexa);
2) depois de sair do tbrowse, tá dando erro na minha aplicação em outras partes (combinação ilegal de collations); sei que isso tem a ver com a collation da base de dados, mas nunca tive esse erro no meu sistema; detalhe é que a tabela que estou usando neste tbrowse é a mesma que já uso em outras partes do sistema, e está no mesmo banco de dados da tabela em que está dando erro.

Minha aplicação está assim (não mudei quase nada):

Código: Selecionar todos

            tbrowseado("select data,hora,comida,quantidade,pontos,id from pontos where data='"+dtsql(dt)+"' order by hora")
FUNCTION Tbrowseado(cSql)
  LOCAL oRs, oTBrowse
   LOCAL oCN :=ConexaoMySQL( "mysql.inaciocarvalho.com.br", "xxx", "xxx", "xxx" )

   Set( _SET_CODEPAGE, "PTISO" )
   Set( _SET_EVENTMASK, INKEY_ALL + HB_INKEY_GTEVENT - INKEY_MOVE )
   SET DATE BRITISH

*   hb_gtInfo( HB_GTI_WINTITLE , "TBrowse colorBlock() com Acesso ao MySQL via ADO" )
*   hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
   SetColor( "W/B","N/W",,,"W/B" )
   CLS

   oCn:open()

   DO WHILE .T.
      @ 4, MaxRow() SAY Padr( "Obtendo informações...", 22 ) COLOR "W/W"
      oRs := oCn:Execute( cSql )
      SuperADO( oRs )
      IF oRs == NIL .OR. oRs:Eof()
         Hb_Alert( "Não foi possível obter dados para exibição",, "W+/B" )
         EXIT
      ENDIF
      oTBrowse := { ;
         { "DATA",       { || oRs:ToDate( "DATA" ) } }, ;
         { "HORA",       { || oRs:ToString( "HORA", 8 ) } }, ;
         { "COMIDA",     { || oRs:ToString( "COMIDA", 30 ) }, { | x | If( At( "TOTAL ", Upper( x ) ) > 0, { 5, 5 }, { 1, 2 } ) } }, ;
         { "QUANTIDADE", { || oRs:ToString( "QUANTIDADE", 20 )  } }, ;
         { "PONTOS",     { || oRs:ToStr( "PONTOS", 6 ) } }, ;
         { "ID",         { || oRs:ToStr( "ID", 6 ) } } }

      tBrowseADO2( oRs, oTBrowse, { | oBrowse, nKey | TestUser( oRs, oBrowse, nkey ) } )
*      tBrowseADO2( oRs, oTBrowse )
*      IF Alert( "Fechar?", { " Não ", " Sim " }, "W+/N" ) == 2
         oRs:Close()
         EXIT
*      ENDIF
*      EXIT
   ENDDO
   oCn:close()

   RETURN Nil

   
FUNCTION tBrowseADO2( oRs, oTBrowse )
   LOCAL oTbr, nKey, oColumn, aItem, nLen, I

   oTbr := TBrowse():new( 02, 3, MaxRow() - 3, MaxCol() - 3 )
   oTbr:headSep       := Chr(196) + Chr(194) + Chr(196)
   oTbr:colSep        := " " + Chr(179) + " "
   oTbr:footSep       := Chr(196) + Chr(193) + Chr(196)
   oTbr:goTopBlock    := { || oRs:moveFirst() }
   oTbr:goBottomBlock := { || oRs:moveLast() }
   oTbr:skipBlock     := { |n| ADORecordSetSkipper( oRs,n ) }
   oTbr:colorSpec     := "W/B,W+/N,N/W*,W+/R,R+/B,R/W*"

   IF oTBrowse == Nil
      // create TBColumn objects and add them to TBrowse object - zero based
      nLen := oRs:fields():count() - 1
      FOR i := 0 TO nLen
         // add code block for individual columns of the record set
         oColumn := TBColumnNew( oRs:fields(i):name(), ADORecordSetFieldBlock( oRs, i ) )
         // Column widths. For some data types, definedSize returns -1...
         oColumn:width := Max( Min( oRs:Fields(i):definedSize,50), Len( oRs:fields(i):name ) ) + 5
         // Add new column to TBrowse
         oTbr:addColumn( oColumn )
      NEXT
   ELSE
      FOR EACH aItem IN oTBrowse
         oColumn := TBColumnNew( aItem[1], aItem[2] )
         IF Len( aItem ) > 2
            oColumn:ColorBlock := aItem[3]
         ENDIF
         oTbr:AddColumn( oColumn )
      NEXT
   ENDIF

   // border
   DispBox( oTbr:nTop - 1, oTbr:nLeft - 1, oTbr:nBottom + 3, oTbr:nRight + 1, B_SINGLE )

   DO WHILE .T.

      oTbr:refreshCurrent()
      DO WHILE ! oTbr:Stable()
         oTbr:Stabilize()
      ENDDO
      // Paint TBrowse current line...
      //oTbr:ColorRect( { oTbr:RowPos, oTbr:LeftVisible, oTbr:RowPos, oTbr:RightVisible }, { 2, 1 } )

      @ MaxRow() - 1, 3 SAY Padr( " Registro " + Ltrim( Str( oRs:AbsolutePosition ) ) + " de " + Ltrim( Str( oRs:recordCount ) ) + " ", 20 ) COLOR "N/W"

      nKey := Inkey(0)

      IF oTbr:applyKey( nKey ) == TBR_EXIT
         EXIT
      ENDIF
   ENDDO

   RETURN Nil

STATIC 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

STATIC FUNCTION ADORecordSetSkipper(oRecordSet,nSkip)

   LOCAL nRec := oRecordSet:AbsolutePosition

   IF ! ( oRecordSet:eof )
      oRecordSet:Move( nSkip )

      IF oRecordSet:eof
         oRecordSet:moveLast()
      ENDIF

      IF oRecordSet:bof
         oRecordSet:moveFirst()
      ENDIF
   ENDIF

   RETURN (oRecordSet:AbsolutePosition - nRec)

   
STATIC FUNCTION ConexaoMySQL( cServer, cDatabase, cUser, cPassword )

   LOCAL oCn := win_OleCreateObject("ADODB.Connection")

   /*
   Ajuste aqui a connection string conforme o banco
   Ou pequise aqui...: https://www.connectionstrings.com/
   */
   oCn:ConnectionString := "DRIVER={MariaDB ODBC 3.1 Driver};TCPIP=1;SERVER=" + ;
      cServer + ";Database=" + cDatabase + ";UID=" + cUser + ";PWD=" + cPassword + ";PORT=3306"
   oCn:CursorLocation   := 3

   RETURN oCn


FUNCTION SuperADO( oRs )

   __ObjAddMethod( oRs, "TOSTRING", @ADOToString() )
   __ObjAddMethod( oRs, "TONUMBER", @ADOToNumber() )
   __ObjAddMethod( oRs, "TODATE",   @ADOToDate() )
   __ObjAddMethod( oRs, "TOSTR",    @ADOToStr() )

   RETURN Nil

STATIC FUNCTION ADOToDate( cField )

   LOCAL x, Self := QSelf()

   x := ::Fields( cField ):Value
   IF ValType( x ) != "D"
      x := Ctod("")
   ENDIF
   RETURN x

STATIC FUNCTION ADOToString( cField, nLen )

   LOCAL x, Self := QSelf()

   x := ::Fields( cField ):Value
   IF ValType( x ) != "C"
      x := ""
   ENDIF
   IF nLen != Nil
      x := Pad( x, nLen )
   ENDIF
   RETURN x

STATIC FUNCTION ADOToNumber( cField )

   LOCAL x, Self := QSelf()

   x := ::Fields( cField ):Value
   IF ValType( x ) != "N"
      x := 0
   ENDIF

   RETURN x

STATIC FUNCTION ADOToStr( cField, nLen, nDec )

   LOCAL x, Self := QSelf()

   x := ::Fields( cField ):Value
   IF ValType( x ) != "N"
      x := 0
   ENDIF
   IF nLen == Nil
      x := Str( x )
   ELSEIF nDec == Nil
      x := Str( x, nLen )
   ELSE
      x := Str( x, nLen, nDec )
   ENDIF

   RETURN x

   STATIC FUNCTION TestUser( oRs, oBrowse, nKey )

   IF nKey == K_F5
      Alert( "Foi teclado F5" )
      Alert( oRs:ToString( "COMIDA" ) )
     oBrowse:RefreshAll()
   ENDIF

   RETURN 1
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 »

cjp escreveu:Minha aplicação está assim (não mudei quase nada):

Código: Selecionar todos

      nKey := Inkey(0)

      IF oTbr:applyKey( nKey ) == TBR_EXIT
         EXIT
      ENDIF
   ENDDO
Mas é lógico, esse tratamento de tecla é totalmente genérico, e não tem chamada pra nenhuma função.
Se você já tem browse no seu aplicativo, então tem a parte de tratamento, é pegar de um deles.
Como eu comentei antes..

Código: Selecionar todos

IF bFuncaoUsuario != Nil
   Eval( bFuncaoUsuario, oBrowse, nKey )
ENDIF
Essa parte é a que vai tratar teclas, ela deve ficar dentro do browse genérico, além do parâmetro bFuncaoUsuario.
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 »

Desculpe, mas não te entendi.
Esta não é a chamada para a função de usuário?

Código: Selecionar todos

      tBrowseADO2( oRs, oTBrowse, { | oBrowse, nKey | TestUser( oRs, oBrowse, nkey ) } )
O que mais eu preciso fazer exatamente?

Mais dois detalhes:
1) ao sair do tbrowse, a tela fica estranha (vide imagem anexa);
2) depois de sair do tbrowse, tá dando erro na minha aplicação em outras partes (combinação ilegal de collations); sei que isso tem a ver com a collation da base de dados, mas nunca tive esse erro no meu sistema; detalhe é que a tabela que estou usando neste tbrowse é a mesma que já uso em outras partes do sistema, e está no mesmo banco de dados da tabela em que está dando erro.
Se puder me ajudar também nestas questões, agradeço

E também nesta:
eu conseguia que ficasse do jeito que queria: tela totalmente vermelha, com as letras brancas.

Mas agora, depois que mexi em alguma coisa, que não sei o que foi, a tela está ficando parcialmente azul, na parte de exibição do tbrowse(). Isto está acontecendo, pelo que pude apurar, depois do oTBrowse:refreshCurrent().

Já procurei de tudo na função, a única referência a color é mesmo a que postei acima.
Também tentei comparar com uma versão anterior da mesma função que tenho aqui, mas não achei nada que possa justificar esse azul.

Tenho plena consciência de que a culpa disso é a confusão que está esta função. Preciso mudar isso. Mas, enquanto não sei fazer melhor do que está, preciso muito desta função funcionando, pois ela é usada em várias funções do meu sistema, e funciona muito bem. E essa parte que está com esse problema na cor é uma das funções mais importantes (se não a mais importante) do meu sistema.

Por favor, alguém poderia 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

cor no tbrowse

Mensagem por JoséQuintas »

cjp escreveu:Desculpe, mas não te entendi.
Esta não é a chamada para a função de usuário?

tBrowseADO2( oRs, oTBrowse, { | oBrowse, nKey | TestUser( oRs, oBrowse, nkey ) } )

O que mais eu preciso fazer exatamente?
Sim, está passando a função de usuário para tbrowseado2()
E aonde o tbrowseado2() está fazendo uso disso?
cjp escreveu:1) ao sair do tbrowse, a tela fica estranha (vide imagem anexa);
Que imagem?

Ao sair do tbrowse tela estranha? talvez um SAVE SCREEN antes do tbrowse, e um RESTORE SCREEN após o tbrowse.
Ou salvar cores default quando entra na rotina, e voltar cores default ao encerrar.
cjp escreveu:2) depois de sair do tbrowse, tá dando erro na minha aplicação em outras partes (combinação ilegal de collations); sei que isso tem a ver com a collation da base de dados, mas nunca tive esse erro no meu sistema; detalhe é que a tabela que estou usando neste tbrowse é a mesma que já uso em outras partes do sistema, e está no mesmo banco de dados da tabela em que está dando erro.
Será que é a velha mania de pegar fontes do post e colocar no fonte do aplicativo? às vezes misturando várias?
Se tá dando erro de collation, a única coisa que se pode imaginar é que tem algum comando pra mudar collation no fonte.

Estou passando a idéia do que fazer, tem que entender primeiro, antes de colocar direto no seu aplicativo fazendo alterações.
Se tem tbrowse funcionando pra várias teclas, é só colocar a rotina que mostrei nessa parte de teclas, igual já tem no tbrowse que já funciona.
A diferença é que vai passar a ser tratado fora, na função de usuário, e não dentro do tbrowse 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

cor no tbrowse

Mensagem por JoséQuintas »

Ah é....
SAVE SCREEN/RESTORE SCREEN.... compatível com Clipper ? Não serve.
Mas se estava usando assim, também não funcionaria antes.
O tbrowse anterior não tinha esse problema?
Que parte de fonte está diferente de antes?
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 »

Que imagem?
Eu havia esquecido de anexar a tela. Desculpe. Segue agora.
Ao sair do tbrowse tela estranha? talvez um SAVE SCREEN antes do tbrowse, e um RESTORE SCREEN após o tbrowse.
Testei agora com save / rest scre, mas continua do mesmo jeito.
O tbrowse anterior não tinha esse problema?
Que parte de fonte está diferente de antes?
Não, a função antiga não tem esse problema.
Vc está falando do meu fonte? Não mudei nada. A função anterior continua como estava. A nova, do jeito que postei antes. São duas funções diferentes.
Sim, está passando a função de usuário para tbrowseado2()
E aonde o tbrowseado2() está fazendo uso disso?
Realmente não está. Mas eu não saberia fazer isso. Pode me ajudar? Achei que só precisaria fazer a função de usuário.
Será que é a velha mania de pegar fontes do post e colocar no fonte do aplicativo? às vezes misturando várias?
Se tá dando erro de collation, a única coisa que se pode imaginar é que tem algum comando pra mudar collation no fonte.

Estou passando a idéia do que fazer, tem que entender primeiro, antes de colocar direto no seu aplicativo fazendo alterações.
Se tem tbrowse funcionando pra várias teclas, é só colocar a rotina que mostrei nessa parte de teclas, igual já tem no tbrowse que já funciona.
A diferença é que vai passar a ser tratado fora, na função de usuário, e não dentro do tbrowse genérico.
De fato, limitei-me a colar teu exemplo no meu sistema, fazendo pouquíssimas alterações. O fato é que ainda não aprendi a lidar com o tbrowse. Estou lendo o livro recomendado pelo alxsts, mas ainda não cheguei a este ponto.

Fazer a função de usuário, creio que eu saberia fazer. O que ainda não entendi é como chamá-la (achei que aquela forma já a chamaria).

A questão da collation, não achei nada no meu sistema, nem na tua função, a respeito de collation. Não sei do que se trata, nunca mexi nisso, e nunca tive esse problema. Pode me ajudar?
Anexos
tela.png
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 »

É estranho acontecer isso agora, e não ter acontecido antes.

Tem no início do seu aplicativo isto aqui?

Código: Selecionar todos

   hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )
Sem isso, o SAVE SCREEN/RESTORE SCREEN se atrapalha com codepage.
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 »

Ainda resta confirmar uma coisa:
Nunca usei oTbr:ApplyKey(), não sei como fica o comportamento ao retornar dela, se a tecla ainda vale.

Código: Selecionar todos

IF oTbr:applyKey( nKey ) == TBR_EXIT
   EXIT
ENDIF
IF bUserFunction != NIL
   DO WHILE ! oBrowse:Stable
      oBrowse:Stabilize()
   ENDDO
   Eval( bUserFunction, oBrowse, oRs, nKey )
   oBrowse:RefreshAll()
ENDIF
nKey := 0 
Não é questão de conhecer o browse, ele é um fonte como outro qualquer.
Te passei antes o bloco a ser usado.
Se o bloco usa nKey, que é a tecla pressionada, com certeza ele vai ficar depois de nKey := Inkey(0)
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