Page 1 of 2

"PROBLEMILLA" CON TCBROWSE FWH

Posted: Mon May 11, 2020 10:18 am
by pacotre
Con la nueva versión de FWH empecé a ver de vez en cuando que al seleccionar una columna para cambiar el índice activo, la cabecera con los títulos de columnas eran tapadas por los datos del registro que supuestamente ocupan ese lugar.
No lo relacionaba más que con un error mío en la posición de los datos y /o refresh() del listbox, pero, no. He descubierto que con esta nueva versión, si pulsas y mantienes el botón izquierdo, puedes arrastrar (cursor hand) parte del listbox. y si lo haces sobre una cabecera, ésta es ocupada por un registro. Así si al seleccionar un índice tardas un pelín más de la cuenta en soltar se reproduce este "error". Es fácil recuperarlo seleccionando cualquier registro, pero es un efecto muy feo.

Quiero deshabilitar esta opción y que lo haga como en versiones antiguas de FiveWin, donde ese "arrastre" no se producía.
Alguien sabe como hacerlo?
Gracias

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 4:18 am
by nageswaragunupudi
We will investigate this and get back to you.
-------------------------------------------------

At the same time, we would like to inform you that we did not modify twbrowse or tcbrowse in the last many years.

May we also know which older version of FWH are you referring to?

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 7:54 am
by pacotre
2.3

No obstante, la cuestión no es que sea versión nueva o vieja. La cuestion es que no deseo que exista ese arrastre con botón izquierdo, ya que al ser el que se utiliza para cambiar de índice en el browse se produce el efecto indeseado de que los datos tapen los títulos.

Gracias

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 8:24 am
by pacotre
En este primer gráfico se ven perfectamente las cabeceras:
Image

En este otro, una vez arrastrado con botón izquierdo se aprecia como los datos suben y tapan esas cabeceras

Image

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 2:01 pm
by karinha
Como haces, asi? By: kapiabafwh@gmail.com

Code: Select all

#include "FiveWin.Ch"
#include "TCBrowse.ch"

MEMVAR cPesq
STATIC oWnd

FUNCTION TCBCADET( oDbf )

   LOCAL oBrw, nI, aTestData, uVar, oBtn, oFont, oFnt, oIco
   LOCAL oWnd, oDlg, oBar, oMsg, oBrush, oBmpBrush
   LOCAL cName := "Testando...", oSay
   LOCAL nLinhaDialog   := 5    // Linha Que Come‡a a Dialog
   LOCAL nColunaDialog  := 5    // Coluna Que Come‡a a Dialog
   LOCAL nAlturaDialog  := 390  // Altura da Dialog
   LOCAL nLarguraDialog := 745  // Largura da Dialog
   LOCAL nLinhaBrowse   := 38   // Linha que Come‡a a Browse
   LOCAL nColunaBrowse  := 10   // Coluna que Come‡a a Browse
   LOCAL cTitle         := "Browse Para Pesquisa " + ;
                           "Incremental dos Clientes!"

   LOCAL acIndices := {}
   LOCAL cIndice   := ""

   PUBLIC cPesq

   cPesq := ""

   IF NetUse( "CADETIQ", .T. )
      OrdListAdd( "CADETIQ", "RAZ_MATRIC", "DEST_NOME", "END" )
      DATABASE oDbf
      oDbf:Load()
      oDbf:SetBuffer( .T. ) // Assim, .T. a Op‡Æo (Cancelar) Funciona.
      acIndices := GetIndices()
      cIndice   := acIndices[ 2 ]
   ELSE
      MsgStop( "Banco de Dados Bloqueado", "Cuidado!" )
      RETURN NIL
   ENDIF

   SET ORDER TO 2

   DBGOTOP()

   DEFINE FONT oFnt  NAME "Arial" SIZE 0, 14 BOLD
   DEFINE FONT oFont NAME "Arial" SIZE 0, 15 BOLD

   DEFINE ICON OICO FILE ".\BRASIL__.BMP"

   DEFINE BITMAP oBmpBrush FILE "MARMORE.BMP"

   DEFINE DIALOG oDlg FROM nLinhaDialog, nColunaDialog ;
      TO nAlturaDialog, nLarguraDialog OF oWnd         ;
      TITLE cTitle                                     ;
      PIXEL                                            ;
      FONT oFnt                                        ;
      ICON oIco                                        ;
      STYLE nOR( DS_MODALFRAME )

   oDlg:lHelpIcon := .F.

   @ nLinhaBrowse, nColunaBrowse COLUMN BROWSE oBrw  OF oDlg ;
      SIZE 350, 135                                      ; // On Left
      ON LEFT DBLCLICK Cadetiq( oDbf )                   ;
      MESSAGE "Digite Nome Para Fazer a Pesquisa"        ;
      Alias ( oDbf:cAlias )                              ;
      COLOR CLR_BLACK, CLR_HGRAY                         ;
      PIXEL

   oBrw:bLDblClick := { || Cadetiq( oDbf ), oBrw, oSay }

   oBrw:bKeyChar = { | nKey, nFlags |             ;
      If( nKey # 13,             ;
          ( oBrw:Refresh(),      ;
            oBrw:SetFocus(),     ;
            oBrw:DrawSelect() ), ;
            Cadetiq( oDbf ) ), oBrw, oSay }

   obrw:bKeyDown := { | nKey, nFlags | Incremental( nKey, ;
      ( oDbf:cAlias ), oBrw, oSay ) }

   oBrw:nColOrder  := 20
   oBrw:cOrderType := "C"
   oBrw:cSeek      := ""

   oBrw:nClrBackHead := CLR_LGREEN
   oBrw:nClrForeHead := CLR_HRED
   oBrw:aJustify     := { .F. , .F. }

   oBrw:lLogicDrop := .T.
   oBrw:lNoHScroll := .F.
   oBrw:nAdjColumn :=  3
   oBrw:nFreeze    :=  1
   oBrw:lMChange   := .F.

   ADD COLUMN TO BROWSE oBrw      ;   // O Browse
      DATA Recno()               ;   // array element number
      SIZE 60                    ;   // Tamanho da Fonte/DimensÆo
      NOBAR                      ;   // Sem barra luminosa(Cursor)
      CENTER                     ;   // Centraliza
      COLOR CLR_BLACK, CLR_HGRAY ;   // As Cores
      HEADER OemToAnsi( "Registro" ) // O Cabe‡alho...

   ADD COLUMN TO BROWSE oBrw            ;
      DATA ( oDbf:cAlias )->Raz_Matric ;
      HEADER OemToAnsi( "Matr¡cula " ) ;
      SIZE 100 PICTURE "99999"         ;
      COLOR CLR_BLACK, CLR_HRED        ;
      CENTER                           ;

      ADD TO BROWSE oBrw                                     ;
      DATA PadR( Trim( ( oDbf:cAlias )->Dest_Nome ), 50 ) ;
      HEADER OemToAnsi( "Nome do Cliente" )              ;
      COLOR CLR_BLACK, CLR_HCYAN                         ;
      EDIT MESSAGE "Nome do Cliente no Banco de Dados"   ;
      SIZE 400 PICTURE "@S50"

   ADD COLUMN TO oBrw                            ;
      DATA ( oDbf:cAlias )->End                 ;
      HEADER OemToAnsi( "Endere‡o do Cliente" ) ;
      COLOR CLR_BLACK, CLR_LGREEN               ;
      SIZE 400

   ADD COLUMN TO oBrw                          ;
      DATA ( oDbf:cAlias )->Bai               ;
      HEADER OemToAnsi( "Bairro do Cliente" ) ;
      COLOR CLR_BLACK, CLR_HRED               ;
      SIZE 200

   ADD COLUMN TO oBrw                      ;
      DATA ( oDbf:cAlias )->Cid           ;
      HEADER OemToAnsi( "Cidade/Estado" ) ;
      COLOR CLR_BLACK, CLR_HGREEN         ;
      SIZE 200

   ADD COLUMN TO oBrw                      ;
      DATA ( oDbf:cAlias )->Cep           ;
      HEADER OemToAnsi( "C¢digo Postal" ) ;
      COLOR CLR_BLACK, CLR_HGREEN         ;
      SIZE 200

   @ 03.2, 1 BUTTON "&Saida" OF oDlg     ;
      SIZE 30, 12 ACTION oDlg:End() ;
      MESSAGE "Sair do Programa"   ;
      PIXEL

   @ 17.2, 1 BUTTON "&Editar" OF oDlg  ;
      SIZE 30, 12                 ;
      ACTION Cadetiq( oDbf )     ;
      MESSAGE "Editar os Clientes Para Modificar" ;
      PIXEL

   @ 0.2, 50 SAY "Digite Letras Iniciais Para Pesquisa " + ;
      "Incremental do Nome Com No "           + ;
      "Maximo de 20 Digitos." + CRLF           + ;
      "<Click> Duplo Para Editar, <ESC> Para Abortar, " + ;
      "Use BackSpace Para Apagar Letras." ;
      OF oDlg SIZE 260, 15 ;
      FONT oFont          ;
      PIXEL               ;
      CENTER              ;
      COLOR CLR_CHOCOLATE, CLR_YELLOW

   @ 20, 50 SAY "Digite Nome: " Size 100, 08 OF oDlg ;
      PIXEL                                   ;
      FONT oFont                              ;
      COLOR CLR_HBLUE, CLR_CHOCOLATE

   @ 20, 112 SAY oSay PROMPT cPesq Size 100, 08 OF oDlg ;
      PIXEL                                     ;
      COLOR CLR_HRED, CLR_VERDEAGUA             ;
      CENTERED

   @ 20, 212 SAY OemToAnsi( "  Suporta No M ximo 20 D¡gitos." ) ;
      OF oDlg SIZE 100, 08 ;
      FONT oFont          ;
      PIXEL               ;
      CENTER              ;
      COLOR CLR_RED, CLR_CHOCOLATE

   oBrw:bChange := {|| cPesq := "" , oSay:Refresh() }

   oBrw:ResetBarPos()
   oBrw:DrawSelect() // showit

   SET FONT OF oBrw TO oFont // ListBox
   SET FONT OF oDlg TO oFnt  // Dialog

   ACTIVATE DIALOG oDlg CENTERED ;
      ON PAINT MEUBRUSH( oDlg, oBmpBrush )

   DbCloseAll()

   oFont:End()
   oFnt :End()

   RELEASE BITMAP oBmpBrush

RETURN nil

FUNCTION Incremental( nKey, Alias, oBrw, oSay, oLbx )

   LOCAL nOldPos := ( Alias )->( Recno() )

   IF nKey = VK_ESCAPE

      oBrw:oWnd:End()

   ENDIF

   IF nKey == VK_BACK

      IF Len( cPesq ) > 0
         cPesq := Left( cPesq, Len( cPesq ) - 1 )
      ELSE
         Tone( 500, 1 )
         RETURN( .F. )
      ENDIF

   ENDIF
   IF ( nKey >= 32 .AND. nKey <= 255 ) .OR. ;
         nKey = VK_BACK

      IF nKey != VK_BACK

         cPesq += UPPER( Chr( nKey ) )

      ENDIF

      IF !( Alias )->( DbSeek( cPesq ) )

         cPesq := Left( cPesq, Len( cPesq ) - 1 )

         MsgStop( "Atenção: Esta Combinação de Letras" + CRLF + ;
                  "Não Existe, Tente Outra." )

         DbGoto( nOldPos )
         Tone( 500, 1 )
         oBrw:Refresh()
         RETURN( .F. )

      ENDIF

      oBrw:Refresh()

   ENDIF

   IF oSay != Nil

      oSay:cTitle( cPesq ) // Mostra o que foi digitado

   ENDIF

RETURN( .T. )

// FIM DO PROGRAMA
 
Saludos.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 4:42 pm
by pacotre
REDEFINE LISTBOX OBRW ;
FIELDS ;
COMPANIA,CODIGO,CIF ID 4003 ;
HEADERS "NOMBRE", "CGO","C.I.F" ;
ON CHANGE(COGE_COMPANIA(),REFRESCA_COMPANIA(),capturalogo(odl,ologo,"COMPANIA")) ;
ON RIGHT CLICK (MENUCIA(NROW,NCOL,obRW,"COMPANIA",OLOGO)) ;
OF odl FONT OFONT10 COLOR LETRAS,FONDO
OBRW:BKEYDOWN:={ | NKEY | IF(NKEY#13, ;
(BUSCA_TIPO("COMPANIA", NKEY, OBRW),COGE_COMPANIA(),REFRESCA_COMPANIA(),CAPTURALOGO(odl,oLOGO,"COMPANIA"),osayc:Refresh()),) }

Este es el código que tenía antes con la versión 2.3 y el mismo que tengo ahora con la última versión FWH. En la 2.3 la opción de arrastrar con botón izquierdo no se ejecutaba y ahora sí.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 4:57 pm
by nageswaragunupudi
Mr. Karinha

For providing a solution to Mr. Pacotre, we first need to reproduce the problem pointed out by him.
For this purpose, such a very long program is not necessary.

The following two-line program is enough.

Code: Select all

#include "fivewin.ch"
function Main()
   USE CUSTOMER
   BROWSE()
return nil
Image

This is the problem.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 5:09 pm
by nageswaragunupudi
Mr Pacotre

Thanks for pointing out this problem.

FWH introduced Kinetic scrolling to TWBrowse in August 2009. TCBrowse is derived from TWBrowse and so, this applies to TCBrowse also.

This problem is because of a bug in the implementation of kinetic scrolling. This existed from that time itself, but was never noticed by us and reported.

Our advice to you is to include this line of code in the top of the Main() function of your program:

Code: Select all

   TWBrowse():lKinetic := .f.
 
With this, the kinietic scrolling is disabled and your program functions like before.
You will not see this problem in your application.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 5:16 pm
by pacotre
Exactamente, ese es el problema. Como se puede resolver?

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 5:18 pm
by pacotre
TWBrowse():lKinetic := .f.

Ok. Lo probaré.

Gracias a todos.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Tue May 12, 2020 5:21 pm
by pacotre
Perfecto!!!! el fallo ha desaparecido.

Muchísimas gracias por vuestra atención.

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Wed May 20, 2020 5:51 pm
by pacotre
Buenas tardes:

Por aquí ando otra vez incordiando.

Necesito ayuda.
Estoy trabajando con XBROWSE, y necesito saber como puedo guardar la última configuración para que la próxima vez que arranque lo haga de la misma forma. Las columnas que he movido, las que he quitado, etc. que permanezcan tal como las dejo.

Como puedo hacerlo?

Gracias

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Wed May 20, 2020 11:54 pm
by nageswaragunupudi
pacotre wrote:Buenas tardes:

Por aquí ando otra vez incordiando.

Necesito ayuda.
Estoy trabajando con XBROWSE, y necesito saber como puedo guardar la última configuración para que la próxima vez que arranque lo haga de la misma forma. Las columnas que he movido, las que he quitado, etc. que permanezcan tal como las dejo.

Como puedo hacerlo?

Gracias

Code: Select all

cState := oBrw:SaveState()
 
Save cState in any text file

Next time after creating browse

Code: Select all

oBrw:RestoreState( cState )
 

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Thu May 21, 2020 7:43 am
by pacotre
Muchas gracias:
Ya me has alegrado el dia :D

Re: "PROBLEMILLA" CON TCBROWSE FWH

Posted: Fri May 22, 2020 10:45 am
by pacotre
Otra duda:
Hay forma de condicionar con xbrowse las columnas?.
Me explico. Hasta ahora lo que he visto es que me muestra todos _ completos con uData. He visto que puedo cambiar las cabeceras de columnas con Header.
Necesito indicarle, como lo hacía con Listbox, que un determinado campo me lo muestre en dos columnas distintas:
LEFT(Field1,10) y RIGHT(Field1,10) como si fueran _,y en otros que solo muestre los primeros 25 caracteres, LEFT(Field2,25), etc.

Esto no sé hacerlo con xBrowse. Como puedo condicionar los datos a mostrar en el Browse?.

Teneis que disculparme, pero me he pasado directamente de la prehistoria de FW con la V 2.3 a ésta nueva y me he perdido mucho en el camino.