FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour bug con la clausula design
Posts: 782
Joined: Wed Dec 19, 2007 07:50 AM
Re: bug con la clausula design
Posted: Sat Jul 19, 2008 04:43 PM
quique wrote:Antonio, como puedo corregir este bug, en el ejemplo que pongo da doble click en el combo box, despues da click en el say y veras que el combo desaparece
Hola Quique:

El problema no está muy fácil de resolver, pero como una solución rápida te propongo agregar el siguiente método a la clase TComboBox:
Method lDblClick( nRow, nCol, nKeyFlags ) CLASS TComboBox

   If ::lDrag
      ::lButtonDown( nRow, nCol, nKeyFlags )
   EndIf

Return Super:lDblClick( nRow, nCol, nKeyFlags )
Saludos.

Manuel Mercado
manuelmercado at prodigy dot net dot mx
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Sun Jul 20, 2008 06:13 AM

Gracias Manuel, tienes razón, el problema no es tan facil, por lo menos para los pobres mortales como yo, pero como comenté en mensajes un poco mas arriba, el problema no es solo con el combobox, son varios controles, de hecho, creo que son todos, aunque algunos no lo reflejan tanto como otros, por ejemplo el say, que de repente falla, de repente no, pero por fin ya encontré la manera de como "parcharlo" para que, por lo menos, no desaparezcan los controles, por lo menos en lo que Antonio resuelve el problema correctamente, aunque no es la solución porque no corrije el problema al 100% ni estética ni operativamente, pero al menos ya es aceptable, lo que no me gusta es que hay que modificar control.prg, y no me gusta modificar los fuentes de fivewin, porque con el paso del tiempo pasa lo que nos pasó cuando trabajaba en grupo SP, que quisimos actualizarnos a xharbour y la ultima versión de fivewin y practicamente tuve que reconstruir varias clases que por las modificaciones que tenían no podían ser actualizadas, prefiero crear mis propias clases heredadas de las de fivewin.

Saludos

Quique
Posts: 782
Joined: Wed Dec 19, 2007 07:50 AM
bug con la clausula design
Posted: Sun Jul 20, 2008 11:50 AM
quique wrote:lo que no me gusta es que hay que modificar control.prg, y no me gusta modificar los fuentes de fivewin, porque con el paso del tiempo pasa lo que nos pasó cuando trabajaba en grupo SP, que quisimos actualizarnos a xharbour y la ultima versión de fivewin y practicamente tuve que reconstruir varias clases que por las modificaciones que tenían no podían ser actualizadas, prefiero crear mis propias clases heredadas de las de fivewin.
Con xHarbour tenemos ahora la ventaja de los mandatos EXTEND y OVERRIDE que te permiten modificar una clase sin afectar su código original, aquí te pongo tu propio ejemplo mostrando lo que te digo:
#include "fivewin.ch"
proc main
local tComboBox1
DEFINE WINDOW oWnd FROM 116,168 TO 379,779 PIXEL TITLE  " Prueba 1"  STYLE 47120384

ModifyControl()

@ 20, 422 COMBOBOX tComboBox1 ITEMS { "tComboBox", "ComboBox" } of oWnd SIZE 90,21 PIXEL STYLE 1419841539  design
@ 77, 18 SAY  "Edad" PIXEL SIZE 44,15                 design   of oWnd
ACTIVATE WINDOW oWnd

Static Function ModifyControl()

   EXTEND CLASS TControl WITH METHOD lDblClick

Return Nil

Static Function lDblClick( nRow, nCol, nKeyFlags )

   Local Self := QSelf()

   If ::lDrag
      ::lButtonDown( nRow, nCol, nKeyFlags )
   EndIf

Return ::oWnd:lDblClick( nRow, nCol, nKeyFlags )
Saludos.

Manuel Mercado
manuelmercado at prodigy dot net dot mx
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
bug con la clausula design
Posted: Sun Jul 20, 2008 11:57 AM

Quique,

Esta solución parece funcionar. El problema se originaba porque en el primer click del doble click, se capturaba el ratón y no se llegaba a enviar un LButtonUp() para completar el proceso.

En la clase TControl añade este método:

METHOD LDblClick( nRow, nCol, nFlags ) INLINE If( ::lDrag, ::LButtonUp( nRow, nCol, nFlags ), Super:LDblClick( nRow, nCol, nFlags ) )

Espero tus comentarios, gracias

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Sun Jul 20, 2008 03:26 PM

Manuel gracias por tu sugerencia, voy a revisar los comandos, aunque de hecho si aprovecho esa cualidad de xharbour, pero utilizo las funciones, me gusta mas utilizar comandos que funciones porque siento que es un poquito mas claro a la hora de revisar el código, si de por si no acostumbro poner comentarios, con funciones menos me ayudo :p

El problema que tengo para poder implementar eso, es que en control.prg se utilizan variables estaticas, y eso no ayuda al momento de querer modificar los métodos.

Saludos

Quique
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Sun Jul 20, 2008 03:36 PM
Antonio, eso no soluciona el problema

1. Ayuda a quitar que desaparezca el control, pero de todas maneras no pierde el foco hasta el segundo click en el say

2. Ya no funciona el doble click en el control

Te comento que fue lo que hice para reducir el problema, a ver si te ayuda con la solución real, tampoco quita el que no pierda el foco al primer click, pero no borra el control, y deja un recuadro pintado en el control.

   if ::lDrag           // 458
                        // 459
      ::setFocus()      // 460  metí esta línea
      ::HideDots()      // 461
      CursorCatch()     // 462

         if Empty( ::nMResize )         // 518
            IF nRow > 0 .AND. nCol > 0  // 519 metí esta línea
               ::Move( ::nTop + nRow - nMRow, ::nLeft + nCol - nMCol,,, .t. )   // 520
            ENDIF                       // 521 metí esta línea
         else                           // 522
Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
bug con la clausula design
Posted: Mon Jul 21, 2008 12:55 AM
Quique,

Este ejemplo aqui funciona correctamente, con el nuevo método. Por favor, pruébalo:
#include "FiveWin.ch"

function Main()

   local oWnd, lVal := .T.

   DEFINE WINDOW oWnd

   @ 2, 2 SAY "Test" OF oWnd SIZE 80, 20 DESIGN

   @ 8, 12 CHECKBOX lVal PROMPT "Another" OF oWnd SIZE 120, 40 DESIGN

   ACTIVATE WINDOW oWnd

return nil

Aqui tienes nuestro EXE construido, para que no haya diferencias:
http://rapidshare.com/files/131240825/test.exe.html
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Mon Jul 21, 2008 01:42 AM
Antonio, el ejemplo así como lo tienes si funciona, pero le hice una pequeña modificación y no funciona como debería

#include "FiveWin.ch"

function Main()

   local oWnd, lVal := .T., oChk

   DEFINE WINDOW oWnd

   @ 2, 2 SAY "Test" OF oWnd SIZE 80, 20 DESIGN

   @ 8, 12 CHECKBOX oChk VAR lVal PROMPT "Another" OF oWnd SIZE 120, 40 DESIGN
   oChk:bLDblClick := { || msgInfo( "doble click" ) }

   ACTIVATE WINDOW oWnd

return nil
Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
bug con la clausula design
Posted: Mon Jul 21, 2008 08:03 AM

Quique,

Eso se debe sencillamente a que en el nuevo método no se está evaluando el codeblock bLDblClick. Eso es todo.

Pero tienes que reconocer que el bug ya está solucionado.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Mon Jul 21, 2008 01:39 PM

No lo vería así, porque estas perdiendo una funcionalidad ¿comprarías un carro nuevo que para que pueda arrancar le quitan la puerta del pasajero? no es una solución porque quitas algo que si se usa, por eso me dí cuenta que no funciona.

Saludos

Quique
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Wed Jul 23, 2008 03:34 PM

Antonio, ¿alguna noticia sobre este tema?

Saludos

Quique
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Fri Jul 25, 2008 03:58 PM

Antonio ¿ya habrás encontrado alguna solución?

Saludos

Quique
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
bug con la clausula design
Posted: Fri Jul 25, 2008 05:43 PM
Quique,

Solo tienes que hacer este pequeño cambio:
METHOD LDblClick( nRow, nCol, nFlags ) CLASS TControl

   if ::lDrag
      if ValType( ::bLDblClick ) == "B"
         Eval( ::bLDblClick, nRow, nCol, nFlags )
      endif
      return ::LButtonUp( nRow, nCol, nFlags )
   endif

return Super:LDblClick( nRow, nCol, nFlags )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
bug con la clausula design
Posted: Fri Jul 25, 2008 06:11 PM

Gracias Antonio, creo que ya quedó, queda un efecto de que si al combobox le das doble click no pierde el foco al dar click en el say hasta que das un segundo clic, pero creo que ese es problema del combo, porque con los demas controles que probé no tuve problemas.

Saludos

Quique

Continue the discussion