Pra quem tem problemas com DBEDIT no Xharbour

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

Moderador: Moderadores

marcelomgoncalves
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 13 Fev 2008 23:01
Localização: MIRACEMA - RJ

Pra quem tem problemas com DBEDIT no Xharbour

Mensagem por marcelomgoncalves »

Acabei de colocar uma idéia q me ocorreu em prática, como o dbedit do xharbour não funciona direito, peguei o dbedit do clipper 5.2 e compilei junto com meu sistema no xharbour e pra minha surpresa funcionou que foi uma beleza. pra quem quiser, a minha solução é só me passar email ou se tiver um lugar pra eu poder hospedar me falem vlw..
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Já vi DBEDIT , alterado apra usar TBROWSE quando se chama o mesmo ! se achar posto aqui !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
jairfab
Usuário Nível 3
Usuário Nível 3
Mensagens: 252
Registrado em: 21 Mai 2007 09:43
Localização: São Paulo, Região Leste - Suzano

Mensagem por jairfab »

Leonardo, esta ideia é interessante, coloque na seção de codigo fonte para gente dar uma olhada
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Leonardo... como q é essa colocação tua... Dbedit alterado para funcionar como Tbrowse... tem como vc explicar melhor isto ?

Grato

Fladimir
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Fladimir, é simples seria uma função com nome de DBEDIT que vc compila junto com sua app e a mesma usa a classe do TBROWSE para montar as chamadas que vc usa o DBEDIT()

Jair, assim que eu achar disponibilizo ela
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Leonardo achei interessante esse negócio aí, pois não sei se vc recorda mas tenho muitas e muitas funções utilizam o DBEDIT em meu sistema, q inclusive foi objeto de discussão nossa em outro tópico onde eu estava tendo problemas para migrar devido ela, mas agora deu certo, mas se esse negócio ai der certo vou poupar tempo... seria isto ? Bom pelo menos daria para fazer uns testes q as vezes fica legal...

Caso vc ache tb tenho interesse....

Meu e-mail é:


fladimir_arroyo@yahoo.com.br


Grato
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Leonardo,

Essa função (dbedit alterado para tbrowse) está no news do xharbour.

Inclusive ela aceita também as FUNÇÕES DE USUÁRIO.

Muito boa para quem não pode migrar logo para tbrowse.

Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Janio... olá aonde... eu entrei em www.xharbour.org fui no link News.. e aparentemente não vi, ou entendi errado é em outro lugar ?

Vc tem o link direto para eu baixar e testar ?


Grato,


Fladimir

:)Pos
Avatar do usuário
Luciano Bonfim
Usuário Nível 3
Usuário Nível 3
Mensagens: 414
Registrado em: 23 Ago 2007 09:34
Localização: Rio de Janeiro / São Paulo
Contato:

Mensagem por Luciano Bonfim »

essa funçäo muito me interessa rsrsrs
Muito Obrigado,

Luciano Bonfim de Azevedo
www.bonfim.com.br
luciano@bonfim.com.br
www.linkedin.com/in/lucianobonfim
Skype : lucianobonfim
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

Para acessar o news do xharbour, vc deve colar no seu navegador:

Código: Selecionar todos

'news://news.xharbour.org/xHarbour.Spanish.Portuguese
Jânio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Olá colega Janio... cara devo consultar um oculista... pois segui o link e blz abriu o Outlook com os News do xHarbour... andei pesquisando e não encontrei sobre o Dbedit Tbrowse....

o q será q estou fazendo de errado ?

Grato
marcelomgoncalves
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 13 Fev 2008 23:01
Localização: MIRACEMA - RJ

Mensagem por marcelomgoncalves »

caros colegas na secao codigo fonte postei as funções do dbedit que estou usando no xharbour, é o dbedit do clipper5.2e. funcionando normal...
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Mensagem por fladimir »

Obrigado colega Marcelo M Gonçalvez sua dica foi util pois aki os meus estão funcionando mas as linhas separadoras não esta aparecendo...

Mas o q estava solicitando dos outros colegas seria uma função q ao se chamar o DBedit() ele trabalharia internamente com um Tbrowse() para melhorar o desempenho ainda mais... bom o q eu entendi da postagem dos colegas foi isso...

Grato

Fladimir
marcelomgoncalves
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 13 Fev 2008 23:01
Localização: MIRACEMA - RJ

Mensagem por marcelomgoncalves »

bom acho q apartir da versão 5.1 do clipper isso foi feito, e inclusive a função dbedit, é uma chamada para o tbrowse, se você olhar a função q postei no codigo fonte, você vai ver q a função dbedit, é feita usando-se a classe tbrowse.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Mensagem por janio »

ENCONTREI!

A única coisa que vc terá que fazer é SUBSTITUIR 'dbedit' por 'pcidbedit', coisa que muitos editores fazem em todos os prg's de uma vez só.

Código: Selecionar todos

Autor: Renato Benedetti

// abaixo a rotina para substituir o DBEDIT, inclusive ela aproveita a mesma 
'função de usuario' escrita no dbedit

Procedure PCIDbEdit( nLI, nCI,nLF, nCF, aCpos, cFunc, aPic, aTit, cHeader, 
cColuna, cRodape, cColunaRodape )
LOCAL aob := {}
LOCAL i,X
LOCAL nReturn, nPic
LOCAL oB
LOCAL nMode := 0

If ( cColuna = NIL )
   cColuna := ' '
EndIf

If ( cHeader = NIL )
   cHeader := ''
EndIf

If ( cRodape = NIL )
   cRodape := ''
EndIf

For i := 1 to Len( aCpos )
   If aPic = NIL
      AAdd( aoB, { aCpos[ I ], aTit[ I ] } )
   Else
      If SubStr( aPic[ I ], 1, 1 ) = '@'
         nPic := 0
         For X := 1 to Len( aPic[ I ] )
            If SubStr( aPic[I], x, 1 ) = ' '
               nPic := Len( aPic[I] ) - X
            ElseIf nPic > 0
               Exit
            EndIf
         Next X
      Else
         nPic := Len( aPic[ I ] )
      EndIf

      If ( Len( aTit[ I ] ) > nPic )
         AAdd( aoB, { aCpos[ I ], aTit[ I ], Len( aTit[ I ] ), aPic[ I ] } )
      Else
         AAdd( aoB, { aCpos[ I ], aTit[ I ], nPic, aPic[ I ] } )
      EndIf
   EndIf
Next I

oB := PciTBrowseDB( nLI, nCI, nLF, nCF, aoB )
oB:freeze    := 0
oB:ColorSpec := SetColor()
oB:ColSep    := cColuna
oB:FootSep   := cRodape
oB:HeadSep   := cHeader

SetCursor( SC_NONE )

nMode := 0
cFunc := '{ |x,y| ' + AllTrim( cFunc ) + '( x, y ) }'
nReturn :=  Eval( &cFunc., nMode, oB:ColPos )
nKey := 0

Do While .T.
   If ( oB:ColPos <= oB:Freeze )
      oB:ColPos := oB:Freeze + 1
   EndIf

   //- - - - > Pinta Todas as Celulas da tela
   oB:ColorRect( { oB:RowPos, 1, oB:RowPos, oB:ColCount }, { 1, 1 } )
   ForceStable( oB )

   //- - - -> Pinta a Celula que esta o cursor
   oB:colorRect( { oB:RowPos, 1, oB:RowPos, oB:ColCount }, { 5, 2 } )
   oB:Hilite()

   If ( RecCount() = 0)
      If nMode = 0
         nMode := 3
         nKey := 1
      EndIf
   EndIf

   If ( oB:HitTop )
      If nMode = 0
         nMode := 1
      EndIf
   EndIf

   If ( oB:HitBottom )
      If nMode = 0
         nMode := 2
      EndIf
   EndIf

   If !( nKey = 0 )
      If (SetKey( nKey ) == NIL)
         nReturn :=  Eval( &cFunc., nMode, oB:ColPos )
         If ( nReturn = 0 )
            Exit
         EndIf

         If ( nReturn = 2 )
            If Deleted()
               DbSkip()
            EndIf
            oB:RefreshAll()
            nKey := nMode := 0
            Loop
         EndIf
      Else
         Eval( SetKey( nKey ) )
         If Deleted()
            DbSkip()
         EndIf
         oB:RefreshAll()
         nKey := nMode := 0
         Loop
      EndIf
   EndIf

   nMode := 0
   nKey := MyInkey(0)

   If !TBMoveCursor( oB, nKey )
      nMode := 4
   EndIf
EndDo


//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - 
 - - - - - - - -
Procedure PciTBrowseDB( nTop, nLeft, nBottom, nRight, tb )
Local i, o, Column

If Len( tb ) = 0
   Mens_Erro("Erro de Parametro","Objetos do TBrowse Vazio",,.f.)
   Return( Nil )
EndIf

o := TBrowseDB( nTop, nLeft, nBottom, nRight )

For i = 1 To Len( tb )
    If Len( AllTrim( tb[ i,1] ) ) = 0
       Mens_Erro("Tabela do Browse Invalida","Existe um Campo Vazio na 
Tabela do Browse",,.f.)
       Return( Nil )
    EndIf

    If Len( AllTrim( tb[ i, 2] ) ) = 0
       tb[ i, 2 ] := tb[ i, 1 ]
    EndIf

    If Len( tb[ i ] ) >= 3 .and. ValType( tb[ i, 3 ] ) != 'N'
       Mens_Erro( "Tamanho Inv lido","Existe um Item com o Campo Tamanho 
Invalido",,.f.)
       Return( Nil )
    EndIf

    Column := TBColumnNew()
    Column:Heading := tb[ i, 2 ]
    If Len( tb[ i ] ) >= 4
       Column:Block   := &( " { || Transform( " + tb[ i, 1 ] + ",'" + 
StrTran( tb[ i, 4 ], '"', " " ) + "' ) } " )
       Column:Cargo   := { FieldBlock( '"' + tb[ i, 1 ] + '"' ), '"' + tb[ 
i, 4 ] + '"'}
    Else
       Column:Cargo   := { FieldBlock( '"' + tb[ i, 1 ] + '"' ), "" }
       Column:Block   := &( " { || " + tb[ i, 1 ] + " } " )
    EndIf

    If Len( tb[ i ] ) >= 3
       Column:Width := tb[ i, 3 ]
    EndIf

    o:AddColumn( Column )
Next i

Return( o )

*- - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - -  - - - -
*- - - -> funcao do PciTBrowse
Function ForceStable( obj )

DispBegin()
obj:ForceStable()
DispEnd()

Return

//*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/
*-----------------------------------------------------------------------------
//- - - ->A funcao MyInkey() e a fun?"o inkey alterada 
////
*-----------------------------------------------------------------------------
//*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/

Function MyInkey( nSecs )
LOCAL nRet        := 0
LOCAL nDescTela   := 0
LOCAL mRow, mColw
LOCAL nTime, nTELADES, tel_savescreen

If nSecs == Nil
   nRet := InKey()
Else
   nTempProt := wTimTel * 60
   If nTempProt <= 0
      nTempProt := 1
   EndIf
   nDescTela := nTime := Seconds()
   While ( nRet == 0 ) .and. IIf ( nSecs > 0, ( Seconds() - nTime ) < nSecs, 
.T. )
      nRet := Inkey(IIf(nSecs>0 .and. nSecs < nTempProt, nSecs, nTempProt))
      Do Case
         Case nRet == K_ALT_C  // Abortar o Sistema
            r_AltC()

         Case nRet = 0
            BasMsgUs->( DBSetOrder( 2 ) )
            BasMsgUs->( DBSeek( wCodusu + 'N', .T. ) )
            If BasMsgUs->( Eof() )
               BasMsgUs->( DBSkip( -1 ) )
            EndIf
            If BasMsgUs->( !Bof() ) .And. BasMsgUs->( !Eof() ) .And. ;
               BasMsgUs->Usuario = wCodUsu .And. BasMsgUs->Lido = 'N'
               aRead_A_Message := .T.
               GetSalCor := SetColor()
               Set   Color To &wCor2*/&wCor1
               Set Color To w+/b
               @ MaxRow(), 59 + Len( AllTrim( wCodUsu ) ) + 3 Say 
'CTRL+F8=MSG'
               Set Color to &GetSalCor.
               Tone( 50, 3 )
            EndIf

            If ( Seconds() - nDescTela ) > nTempProt
               If wprotel = "S"
                  Save Screen to Tel_SaveScreen
                  mRow  := Row()
                  mColw := Col()
                  If (Day(Date()) % 2) = 0
                     ProtTela()
                  Else
                     Prot_Clock()
                  EndIf
                  Restore Screen from Tel_SaveScreen
                  @ mRow, mColw Say ""
               EndIf
               nDescTela := SECONDS()
            EndIf
      EndCase
   EndDo
EndIf

Return( nRet )


*- - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - -  - - - -
*- - - -> funcao do PCITBrowse
Function TBMoveCursor( o, nKey )
LOCAL nFound
/*
Static aKeys := { K_DOWN      , { | obj | obj:down() },;
                  K_UP        , { | obj | obj:up() },;
                  K_PGDN      , { | obj | obj:pageDown() },;
                  K_PGUP      , { | obj | obj:pageUp() },;
                  K_CTRL_PGUP , { | obj | obj:goTop() },;
                  K_CTRL_PGDN , { | obj | obj:goBottom() },;
                  K_RIGHT     , { | obj | obj:right() },;
                  K_LEFT      , { | obj | obj:left() },;
                  K_HOME      , { | obj | obj:home() },;
                  K_END       , { | obj | obj:end() },;
                  K_CTRL_LEFT , { | obj | obj:panLeft() },;
                  K_CTRL_RIGHT, { | obj | obj:panRight() },;
                  K_CTRL_HOME , { | obj | obj:panHome() },;
                  K_CTRL_END  , { | obj | obj:panEnd() } }

nFound := AsCan( aKeys, nKey )
If (nFound != 0)
   Eval( aKeys[++nFound], o )
EndIf
*/

nFound := o:ApplyKey( nKey )

/*If nFound = TBR_EXIT  // Desconsiderar o ESC tambem
   nFound := 0
EndIf
*/

Return( nFound = 0 )

fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder