Página 1 de 3

Pra quem tem problemas com DBEDIT no Xharbour

Enviado: 13 Fev 2008 23:04
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..

Enviado: 14 Fev 2008 16:37
por sygecom
Já vi DBEDIT , alterado apra usar TBROWSE quando se chama o mesmo ! se achar posto aqui !

Enviado: 14 Fev 2008 20:51
por jairfab
Leonardo, esta ideia é interessante, coloque na seção de codigo fonte para gente dar uma olhada

Enviado: 14 Fev 2008 22:51
por fladimir
Leonardo... como q é essa colocação tua... Dbedit alterado para funcionar como Tbrowse... tem como vc explicar melhor isto ?

Grato

Fladimir

Enviado: 14 Fev 2008 23:52
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

Enviado: 15 Fev 2008 08:09
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

Enviado: 15 Fev 2008 09:40
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

Enviado: 15 Fev 2008 13:21
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

Enviado: 15 Fev 2008 13:28
por Luciano Bonfim
essa funçäo muito me interessa rsrsrs

Enviado: 15 Fev 2008 14:21
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

Enviado: 16 Fev 2008 14:28
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

Enviado: 16 Fev 2008 20:14
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...

Enviado: 16 Fev 2008 20:47
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

Enviado: 16 Fev 2008 21:34
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.

Enviado: 17 Fev 2008 22:02
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 )