Page 1 of 1

problemas con wbrowse de Hernán

PostPosted: Fri Jan 09, 2015 3:26 pm
by surGom
Hola compañeros les explico paso por paso

1) Del original de fwh fivehx.lib extraigo el wbrowse.obj

2) Si el fivexh.lib que queda lo incluyo en una carpeta junto al compilado de wbrowse
Al querer navegar por el wbrowse (con el scrollbar ) por las flechitas se pone todo negro y salvo el foco y la linea inmediatamente superior, si navego por encima o debajo de las flechitas, se va poniendo todo normal. Y si voy moviendome con el teclado sucede la misma falla.

3) Si en cambio el fivehx.lib lo pongo en otra carpeta y fuera del directorio que estoy compliando funciona bien.????

Otra cuestión en wbrowse cuando utilizamos dentro del wbrowse, ahora se muestra correcto, es decir en toda la celda, pero si queremos movernos dentro del mismo con el teclado (usando la fecha abajo)sale de la celda y va a la siguiente. Si se utiliza el mouse se despliega correctamente.

Lo solucioné poniendo una librería wbrowse.lib compilada con una versión del 2010 y funciona bien, solo con la falla de la muestra del combo un poco desencajada de la celda.

Gracias por vuestra atención

"

Re: problemas con wbrowse de Hernán

PostPosted: Fri Jan 09, 2015 11:45 pm
by surGom
En la frase Otra cuestión me estoy refiriendo a un combobox dentro de la celda del browse


Luis

Re: problemas con wbrowse de Hernán

PostPosted: Sat Jan 10, 2015 3:49 am
by Antonio Linares
Luis,

No tienes que extraer ese módulo de fivehx.lib

Lo que tienes que hacer es enlazar la librería wbrowse.lib de Hernán antes de fivehx.lib

Pruébalo asi :-)

Re: problemas con wbrowse de Hernán

PostPosted: Sat Jan 10, 2015 12:36 pm
by surGom
Antonio siempre lo hice así, pero no se porque de buenas a primeras me empezó a dar error. Extraje la librería wbrowse y empezó a funcionar bien. Compilo el programa en tres máquinas distintas según dónde esté para modificar algún prg. Una con windows server 2008, otra con win7 y la última con xp.

Por ejemplo ayer tuve que modificar algo y lo hice en la oficina de la empresa que tiene Win2008, y me empezó a dar error en la clase database (la cual hice una modificación, hace varios meses y siempre la compilo pisando la original), y tuve que extraerla del fivehx.lib para que retomase el buen funcionamiento.

Luego actualice las otras dos pc sin modificar la librería fivehx compiló sin problemas.

Estoy intrigado porque hace años que esta funcionando esta aplicación con distintas versiones de fwh.

Luis

Re: problemas con wbrowse de Hernán

PostPosted: Sat Jan 10, 2015 1:04 pm
by Verhoven
Como dice Antonio, la librería que generes para el wbrowse de Hernan la tienes que poner antes.
Pero creo que este problema te lo está dando por usar el VSC2013 y con ese cambio no va a ser bastante, de modo que para evitar ese efecto tienes que tocar el código de la clase de Hernan para que no use los mismos nombres de funciones que trae el propio FWH y otros detalles para evitar otro par de errores que te va a dar.

La solución que he encontrado es la siguiente:

1º.- En el fichero WBRWLINE.C
cambia el nombre de las últimas dos funciones, puedes usar el código que te copio a continuación:
Code: Select all  Expand view
//----------------------------------------------------------------------------//
// NOMBRE MODIFICADO PARA NO REPETIR CON EL DE FW: DE FWDISPBEGIN PASA A FWDISPBEGIN_HER
HB_FUNC( FWDISPBEGIN_HER )// ( hWnd, hDC )
{
  HWND hWnd        = ( HWND ) hb_parnl( 1 );
  HDC hDC          = ( HDC ) hb_parnl( 2 );  
  HDC hDC2 ;  
  HBITMAP hBmp, hBmpOld ;
  RECT rct;
 
  GetClientRect( hWnd, &rct );
   
  hDC2    = CreateCompatibleDC( hDC );
  hBmp    = CreateCompatibleBitmap( hDC, rct.right - rct.left, rct.bottom - rct.top );
  hBmpOld = SelectObject( hDC2, hBmp );
  BitBlt( hDC2, 0, 0, rct.right, rct.bottom, hDC, 0, 0, SRCCOPY );
 
  hb_reta( 5 );
  hb_storvnl( (LONG) hWnd   , -1, 1 );
  hb_storvnl( (LONG) hDC    , -1, 2 );
  hb_storvnl( (LONG) hDC2   , -1, 3 );
  hb_storvnl( (LONG) hBmp   , -1, 4 );
  hb_storvnl( (LONG) hBmpOld, -1, 5 );

   return;
}




//----------------------------------------------------------------------------//
// NOMBRE MODIFICADO PARA NO REPETIR CON EL DE FW: DE FWDISPEND PASA A FWDISPEND_HER
HB_FUNC( FWDISPEND_HER )// { hWnd, hDC, hDC2, hBmp, hBmpOld }
{
   RECT rct;
 
   GetClientRect( (HWND) hb_parvnl( 1, 1 ), &rct );

   BitBlt( (HDC) hb_parvnl( 1, 2 ), 0, 0, rct.right - rct.left, rct.bottom - rct.top, (HDC) hb_parvnl( 1, 3 ), 0, 0, SRCCOPY );    
   SelectObject( (HDC) hb_parvnl( 1, 3 ), (HBITMAP) hb_parvnl( 1, 5 ) );
   DeleteObject( (HBITMAP) hb_parvnl( 1, 4 ) );
   DeleteObject( (HBITMAP) hb_parvnl( 1, 5 ) );
   DeleteDC( (HDC) hb_parvnl( 1, 3 ) );
   
   hb_retnl( (LONG) hb_parvnl( 1, 2 ) ) ;

   return ;
}   
 


2.- Cambia en WBROWSE.PRG las llamadas a las funciones FWDISPBEGIN por FWDISPBEGIN_HER y las llamadas a FWDISPEND por FWDISPEND_HER:

3.- Cambia el código que tengas como ::oFont = oFont y se añade Self:SetFont(oFont) delante de return en los métodos New y Redefine de la clase.
No me deja copiarte el código entero del WBROWSE.PRG porque excede de los 6000 caracteres. Si alguien me explica como subir los archivos lo copio entero en el foro.

4.- Reconstruye la librería con el nuevo compilador que vayas a usar.

Si lo necesitas puedo poner el .bat que uso para recosntruir la librería para usarla con VSC2013 incluso para 64 bits.

Re: problemas con wbrowse de Hernán

PostPosted: Sat Jan 10, 2015 1:20 pm
by Antonio Linares
Luis,

Usas Borland o Microsoft ?

Re: problemas con wbrowse de Hernán

PostPosted: Sat Jan 10, 2015 8:47 pm
by surGom
Antonio uso Borland bcc582

Luis

Re: problemas con wbrowse de Hernán

PostPosted: Sun Jan 11, 2015 5:19 pm
by Verhoven
Con las correcciones que te he puesto se corrige ese fallo al mostrar los datos.

Si me dices como poner aquí los ficheros para poderlos descargar los coloco incluyendo los .bat para generar la librería para 32 bits con BCC582, BCC63 y VSC2013 para 64 bits.
Es que no se cómo hacer para poner los archivos aquía para que se puedan descargar y son muy grandes para copiar todo el código de una sola vez y por partes va a quedar un churro.

Re: problemas con wbrowse de Hernán

PostPosted: Sun Jan 11, 2015 5:51 pm
by Antonio Linares
Luis,

Usando Borland se enlazará la librería que se enlace primero.

Luego tienes que enlazar la de Hernán antes que FiveH.lib

Re: problemas con wbrowse de Hernán

PostPosted: Sun Jan 11, 2015 6:42 pm
by Verhoven
Y así ha sido con los de Borland (por lo menos hasta el 6.3 - más adelante ya no he probado), pero si estás compilando con el VSC2013 ni aún poniéndola delante se corrige ese error.

Yo venía usando el BCC5.82 con ese sistema sin problemas pero al adaptar las aplicaciones a Harbour y 64 Bits me he visto obligado a usar el VSC2013 y con éste compilador ya no colaba. Compila y parece que todo va a ir bien pero cuando se hacía un filtrado de cualquier base de datos salía ese comportamiento.

La solución que he tenido que adoptar la semana pasada, pasando a los 64 bits y con ello teniendo que cambiar del Borland al VSC2013, para arreglar ese comportamiento del borwse de Hernan ha sido la que he comentado. :D

Y, en todo caso, sirve para todos los compiladores.

Pongo a disposición del que lo necesite los .bat para BCC582, BCC63 y VSC2013 junto con los PRJ y los C modificados. Pero es que no se como subirlos al foro. :oops:

Re: problemas con wbrowse de Hernán

PostPosted: Sun Jan 11, 2015 6:45 pm
by Antonio Linares
Efectivamente como comenta Paz, con Microsoft no puede haber funciones duplicadas salvo que usemos el flag /FORCE:MULTIPLE del enlazador

y aún asi ese flag es peligroso porque no nos asegura en que orden se enlazaran las funciones duplicadas

Re: problemas con wbrowse de Hernán

PostPosted: Mon Jan 12, 2015 10:28 am
by surGom
Lo que mas me extraña es que hasta hace dos semanas no tenía ese inconveniente, y no he hecho cambios en las librerías solo en el programa y la forma de compilar no fue modificada, además el extraño comportamiento entre distintos sistemas operativos.

Luis

Re: problemas con wbrowse de Hernán

PostPosted: Mon Jan 12, 2015 10:44 am
by Verhoven
A mi ese error no me lo ha dado por cambio de sistema operativo. Me lo ha dado coincidiendo con una actualización de FW y también de Harbour.
Y el error me lo da tanto con BCC63 para 32 bits como con VSC2013 para 64 bits.
Pero haciendo lo que te he indicado se soluciona.

Re: problemas con wbrowse de Hernán

PostPosted: Mon Jan 12, 2015 1:00 pm
by Antonio Linares
Luis,

Ten en cuenta que conforme un EXE crece, más módulos se enlazan en él por nuevas funciones usadas y eso implica cambios.

Es decir, aunque no hayas cambiado nada, por el simple hecho de continuar desarrollando la aplicación, está cambiará y pueden aparecer problemas latentes que aún no se habían manifestado.

La regla de oro es no tener funciones duplicadas, para así evitar que cambie el orden de enlazado y por lo tanto, cambie el comportamiento de la aplicación.