cor no tbrowse
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
Não sei o que quis dizer com parou de funcionar.
Aqui mais genérica.
Aqui mais genérica.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
Complicando pra facilitar...
Que tal modificar a classe da Microsoft?
Agora temos oRs:ToDate(), oRs:ToString(), oRs:ToNumber() e oRs:ToStr()
Aqui compilo com WVG, não sei se faz diferença.
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 ) } } }
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
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.
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/
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/
cor no tbrowse
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:
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?
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
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
Só faça diferente do Clipper. No Clipper é string, passe por codeblock.
Na rotina que chama é criar o codeblock que vai atender, com os parâmetros padrão do tbrowse que pode precisar, exemplo:
Na BrowseADO(), coloca nos testes de tecla, depois das teclas padrão.
Passe os parâmetros que achar necessários
Exemplo
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.
Código: Selecionar todos
BrowseADO( oRs, oTBrowse, bFuncaoUsuario )
Código: Selecionar todos
BrowseADO( oRs, oTBrowse, { | oBrowse, nKey | SuaFuncao( oRs, oBrowse, nKey ) } )
STATIC FUNCTION SuaFuncao( oRs, oBrowse, nKey )
...
Passe os parâmetros que achar necessários
Exemplo
Código: Selecionar todos
IF bFuncaoUsuario != Nil
Eval( bFuncaoUsuario, oBrowse, nKey )
ENDIF
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
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/
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/
cor no tbrowse
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):
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 1Inacio de Carvalho Neto
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
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
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
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/
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/
cor no tbrowse
Desculpe, mas não te entendi.
Esta não é a chamada para a função de usuário?
O que mais eu preciso fazer exatamente?
E também nesta:
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 ) } )Se puder me ajudar também nestas questões, agradeçoMais 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.
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
Sim, está passando a função de usuário para tbrowseado2()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?
E aonde o tbrowseado2() está fazendo uso disso?
Que imagem?cjp escreveu:1) ao sair do tbrowse, a tela fica estranha (vide imagem anexa);
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.
Será que é a velha mania de pegar fontes do post e colocar no fonte do aplicativo? às vezes misturando várias?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.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
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?
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/
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/
cor no tbrowse
Eu havia esquecido de anexar a tela. Desculpe. Segue agora.Que imagem?
Testei agora com save / rest scre, mas continua do mesmo jeito.Ao sair do tbrowse tela estranha? talvez um SAVE SCREEN antes do tbrowse, e um RESTORE SCREEN após o tbrowse.
Não, a função antiga não tem esse problema.O tbrowse anterior não tinha esse problema?
Que parte de fonte está diferente de antes?
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.
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.Sim, está passando a função de usuário para tbrowseado2()
E aonde o tbrowseado2() está fazendo uso disso?
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.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.
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?
Inacio de Carvalho Neto
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
É estranho acontecer isso agora, e não ter acontecido antes.
Tem no início do seu aplicativo isto aqui?
Sem isso, o SAVE SCREEN/RESTORE SCREEN se atrapalha com codepage.
Tem no início do seu aplicativo isto aqui?
Código: Selecionar todos
hb_gtInfo( HB_GTI_COMPATBUFFER, .F. )
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
cor no tbrowse
Ainda resta confirmar uma coisa:
Nunca usei oTbr:ApplyKey(), não sei como fica o comportamento ao retornar dela, se a tecla ainda vale.
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)
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
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/
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/
