FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour dtpicker y dialogo transparente no refresca correctamente
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
dtpicker y dialogo transparente no refresca correctamente
Posted: Tue Dec 13, 2011 08:19 AM
Parece que hay un problema con dtpicker cuando se usa la clausula transparent en un dialogo

Sucede que al usar dicha clausula y seleccionar una fecha del calendario, la fecha seleccionada se empalma sobre la fecha anterior, y cuando se cambia el dato del dia mes o año manualmente el color se cambia a un ilegible color azul oscuro con letras negras, y parece ser que hasta el tabstop se desactiva. Probe compilando con harbour y xharbour y sucede lo mismo.

Este efecto se puede ver en el ejemplo que viene con fwh (datetime.prg) al poner la clausula transparent en el dialogo.

Code (fw): Select all Collapse
 Date picker and Time picker samples

#include "FiveWin.ch"
#include "dtpicker.ch"

//----------------------------------------------------------------------------//

function Main()

   local oDlg, aGet[5], aVAR[5], aSAY[5]

   Set Date British
   
   DEFINE DIALOG oDlg RESOURCE "Main" transparent

   aVAR[1] := Date()
   REDEFINE DTPicker aGet[1] VAR aVAR[1] ID 120 UPDATE OF oDlg
   REDEFINE SAY aSAY[1] ID 130 UPDATE OF oDlg

   aVAR[2] := Date()
   REDEFINE DTPicker aGet[2] VAR aVAR[2] ID 121 UPDATE OF oDlg
   REDEFINE SAY aSAY[2] ID 131 UPDATE OF oDlg

   aVAR[3] := ctod('')
   REDEFINE DTPicker aGet[3] VAR aVAR[3] ID 122 UPDATE OF oDlg
   REDEFINE SAY aSAY[3] ID 132 UPDATE OF oDlg

   aVAR[4] := Hora()
   REDEFINE TMPicker aGet[4] VAR aVAR[4] ID 123 UPDATE OF oDlg 
   REDEFINE SAY aSAY[4] ID 133 UPDATE OF oDlg

   aVAR[5] := ''
   REDEFINE TMPicker aGet[5] VAR aVAR[5] ID 124 UPDATE OF oDlg 
   REDEFINE SAY aSAY[5] ID 134 UPDATE OF oDlg

   REDEFINE BUTTON ID IDOK OF oDlg ACTION ps_Show(aGet, aSAY)
   REDEFINE BUTTON ID 4 OF oDlg ACTION ps_Clean(aSAY)
   REDEFINE BUTTON ID IDCANCEL OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

return nil

static proc ps_Show(aGet, aSAY)
   local i, xValor

   for i:= 1 to len(aGet)
     xValor := Eval(aGet[i]:bSetGet)
     xValor := if( Empty(xValor), 'EMPTY', xValor )
     xValor := if( Valtype(xValor)='D', dtoc(xValor), xValor )
     aSAY[i]:SetText( xValor )
   next
return

static proc ps_Clean(aSAY)
   local i, xValor

   for i:= 1 to len(aSAY)
     aSAY[i]:SetText( '' )
   next
return

FUNCTION Hora()

  local nAux, nMin, nHor, nSec, cMin, cHor, cSec
  nSec := Seconds()
  nAux := Int(nSec) / 3600
  nHor := Int(nAux)
  nAux := (nAux - nHor) * 60
  nMin := Int(nAux)
  nSec := Int( (nAux - nMin) * 60 )
  cHor := Padl( alltrim(str(nHor)), 2, '0')
  cMin := Padl( alltrim(str(nMin)), 2, '0')
  cSec := Padl( alltrim(str(nSec)), 2, '0')

return cHor + cMin + cSec

[/code]

Si refrescamos el dtpicker usando aGet[1]:refresh() el problema persiste. Si se usa oDlg:refresh() el problema solo se corrige parcialmente.

¿Alguien tiene la solucion a dicho problema?.

Saludos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
Re: dtpicker y dialogo transparente no refresca correctamente
Posted: Tue Dec 13, 2011 03:56 PM
Aqui un ejemplo del error





Saludos
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
Re: dtpicker y dialogo transparente no refresca correctamente
Posted: Tue Dec 13, 2011 10:50 PM

Una solucion no muy ortodoxa es:

 REDEFINE DTPicker aGet[1] VAR aVAR[1] ID 120 UPDATE OF oDlg ON CHANGE oDlg:refresh()


 soluciona el problema pero se produce un feo efecto al refrescar el dialogo.

  saludos.
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: dtpicker y dialogo transparente no refresca correctamente
Posted: Fri Dec 23, 2011 03:44 PM

Saludos.

Jose usted simpre soluciono este problema con la fecha que no refresca. Ya que tengo el miismo problema.

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 119
Joined: Fri Nov 04, 2005 12:23 AM
Re: dtpicker y dialogo transparente no refresca correctamente
Posted: Fri Dec 23, 2011 05:10 PM
Hola Ruben

La unica forma que encontre de solucionar el problema es refrescar el dialogo (o el folder) cada vez que cambias un dato de la fecha y al salir de la misma. Refrescar solo el dtpicker no soluciona el problema.
Code (fw): Select all Collapse
REDEFINE DTPICKER oFCompraTerr var WM_dFCompraTerr;
                       on change (oFld:aDialogs[1]:refresh());
                       ID 100 OF oFld:aDialogs[1]

         oFCompraTerr:bLostFocus:={|| oFld:aDialogs[1]:refresh()}



No es la solucion optima porque se ve a cada rato el refresh de la pantalla pero funciona.


Saludos

Jose Rios

Continue the discussion