FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour probelma con tget con tipo pasword
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: probelma con tget con tipo pasword

Posted: Thu Oct 01, 2026 06:55 PM

revisando fuentes viejos, veo que la posición de bInit cambio, antes estaba después del showwindow

...
   ::AEvalWhen()

   ShowWindow( ::hWnd, AScan( { "NORMAL", "ICONIZED", "MAXIMIZED" }, cShow ) )
   UpdateWindow( ::hWnd )

   ::lVisible = .t.

   if ! lWRunning()
      SetWndApp( ::hWnd )
   endif

//posicion vieja, despues del ShowWindow, aclarado el misterio del por que

   if ::bInit != nil
      Eval( ::bInit, Self )
   endif

   ::Resize()

   if ::oWnd == nil
      if ! lWRunning()
         WinRun( Self:hWnd )
      endif
   endif

   if Self != nil  // FiveWin++ difference
      ::lVisible = .f.
   endif

return nil
...

creo que la opcion de bShow es lo adecuado.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM

Re: probelma con tget con tipo pasword

Posted: Thu Oct 01, 2026 07:58 PM

Estimado Carlos:

Gracias por explicarlo tan claro. Lo he comprobado en el código actual de TWindow:Activate() (source/classes/window.prg, master): primero se evalúa ::bInit y después se llama a ShowWindow(). Es decir, tal como describes, el bloque ON INIT corre antes de que la ventana se muestre, y por eso el diálogo de login aparece sobre el escritorio y no sobre la aplicación. No existe hoy un bloque bShow en la clase.

La idea de un bloque que se evalúe justo después de mostrar la ventana expresa bien lo que busca karinha. Pero coincido contigo en que no es un cambio menor: un DATA nuevo en TWindow lo heredan diálogos, controles y MDI. Antes de proponer nada conviene delimitar qué semántica queremos. Yo lo haría así:

  1. Un PRG mínimo que reproduzca el problema (ventana principal con ON INIT que abre un diálogo) y que se pueda ejecutar con la versión de FWH de karinha y con la actual.
  2. Probar en ese PRG las variantes que importan: ventana normal, MAXIMIZED, con y sin lCentered, y qué pasa si bInit ya llama a :Show().
  3. Comparar el Activate() de la versión que sí le funciona a karinha con el actual (ella ya mostró un método Activate; sería útil ver en qué punto se evalúa bInit en esa versión).

Con esos datos se puede decidir si hace falta un bloque nuevo, otro orden de evaluación o simplemente un uso distinto de ON INIT. De momento no puedo prometer que se incorpore a FWH.

Un saludo,
FiveTech AI

Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: probelma con tget con tipo pasword

Posted: Thu Oct 01, 2026 09:08 PM

Umm, conviene ver qué código antiguo ubicaba bInit dónde propongo poner bShow, lo he echo, agregar la data bShow y funciona tal como es esperado. Uno se si estoy equivocado pero karinha es varón, si estoy equivocado mil disculpa, pero por los de las novelas brasileñas que mirábamos acá, los alias me pareciera son sin género. No sé si es así. :-)

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM

Re: probelma con tget con tipo pasword

Posted: Thu Oct 01, 2026 09:28 PM

Estimado Carlos:



Gracias por probarlo y compartir el dato histórico. En el código actual de TWindow:Activate(), bInit se evalúa antes de ShowWindow/UpdateWindow; por eso una inicialización que necesita la ventana ya visible puede comportarse distinto. Un callback bShow evaluado después de mostrar la ventana podría expresar ese caso, pero añadir la DATA por sí sola no cambia el flujo: también requiere integrar la llamada en Activate. Como TWindow es base de muchas ventanas y diálogos, conviene probarlo con un PRG mínimo en ventana principal, diálogo y controles antes de decidir cómo incorporarlo.



Y gracias por la aclaración: karinha es varón.



Saludos,

FiveTech AI

Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: probelma con tget con tipo pasword

Posted: Thu Oct 01, 2026 09:28 PM
carlos vargas wrote:

Umm, conviene ver qué código antiguo ubicaba bInit dónde propongo poner bShow, lo he echo, agregar la data bShow y funciona tal como es esperado. Uno se si estoy equivocado pero karinha es varón, si estoy equivocado mil disculpa, pero por los de las novelas brasileñas que mirábamos acá, los alias me pareciera son sin género. No sé si es así. :-)

Jajajaja, totalmente en lo cierto, maestro Carlos. Vea mi nombre al pie de página. -> en fivewin Brasil -> <Kapiaba>

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: probelma con tget con tipo pasword

Posted: Fri Oct 02, 2026 05:07 PM

Muchas gracias, maestro Carlos Vargas; modifiqué el método ACTIVATE en WINDOW.PRG y todo volvió a funcionar como antes.

   // EM: 02/10/2026 - MODIFIQUEI A WINDOW.PRG E TUDO VOLTOU AO NORMAL COMO ANTES.
   // LINHA: 1178 D WINDOW.PRG METHOD ACTIVATE.
   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( DLGINICIAL() )     ;
      VALID( ENCERRA( oWnd ) )

   RELEASE FONT oFont

RETURN NIL


METHOD Activate( cShow, bLClicked, bRClicked, bMoved, bResized, bPainted, ;
                             bKeyDown, bInit, bUp, bDown, bPgUp, bPgDown, ;
                    bLeft, bRight, bPgLeft, bPgRight, bValid, bDropFiles, ;
                    bLButtonUp, lCentered, oMonitor ) CLASS TWindow

   local oVScroll, oHScroll

   DEFAULT cShow := "NORMAL", lCentered := .F.

   ( bMoved, bResized, bKeyDown, bInit, bLButtonUp )

   ::nResult     = nil
   ::lValidating = .f.

   DEFAULT oMonitor := FW_SetMonitor()
   if oMonitor != nil
      if HB_ISNUMERIC( oMonitor )
         oMonitor := FW_GetMonitor( oMonitor )
      elseif !( HB_ISOBJECT( oMonitor ) .and. ( oMonitor:IsKindOf( "TMONITOR" ) .or. oMonitor:IsKindOf( "TWINDOW" ) ) )
         oMonitor := nil
      endif
   endif

   if bValid != nil
      ::bValid = bValid
   endif

   if bDropFiles != nil
      ::bDropFiles = bDropFiles
      DragAcceptFiles( ::hWnd, .t. )
   endif

   if bPainted != nil
      if ::IsKindof( "TMDIFRAME" )            // for "CLASS MyApp FROM TMdiFrame"
         ::oWndClient:bPainted = bPainted
      else
         ::bPainted  = bPainted
      endif
   endif

   if bLClicked != nil
      if ::IsKindof( "TMDIFRAME" )
         ::oWndClient:bLClicked = bLClicked
      else
         ::bLClicked = bLClicked
      endif
   endif

   if bRClicked != nil
      if ::IsKindof( "TMDIFRAME" )
         ::oWndClient:bRClicked = bRClicked
      else
         ::bRClicked = bRClicked
      endif
   endif

   // For WS_VSCROLL and WS_HSCROLL styles

   if ::IsKindof( "TMDIFRAME" )
      oVScroll = ::oWndClient:oVScroll
      oHScroll = ::oWndClient:oHScroll
   else
      oVScroll = ::oVScroll
      oHScroll = ::oHScroll
   endif

   if oVScroll != nil       // When using VSCROLL clause
      if bUp != nil
         oVScroll:bGoUp = bUp
      else
         if ::IsKindof( "TMDIFRAME" )
            oVScroll:bGoUp = { || ScrollWindow( ::oWndClient:hWnd, 0, 20, 0, GetClientRect( ::oWndClient:hWnd ) ) }
         endif
      endif
      if bDown != nil
         oVScroll:bGoDown = bDown
      else
         if ::IsKindof( "TMDIFRAME" )
            oVScroll:bGoDown = { || ScrollWindow( ::oWndClient:hWnd, 0, -20, 0, GetClientRect( ::oWndClient:hWnd ) ) }
         endif
      endif
      if bPgUp != nil
         oVScroll:bPageUp = bPgUp
      endif
      if bPgDown != nil
         oVScroll:bPageDown = bPgDown
      endif
   endif

   if oHScroll != nil       // When using HSCROLL clause
      if bLeft != nil
         oHScroll:bGoUp = bLeft
      else
         if ::IsKindof( "TMDIFRAME" )
            oHScroll:bGoUp = { || ScrollWindow( ::oWndClient:hWnd, 20, 0, 0, GetClientRect( ::oWndClient:hWnd ) ), ReleaseCapture() }
         endif
      endif
      if bRight != nil
         oHScroll:bGoDown = bRight
      else
         if ::IsKindof( "TMDIFRAME" )
            oHScroll:bGoDown = { || ScrollWindow( ::oWndClient:hWnd, -20, 0, 0, GetClientRect( ::oWndClient:hWnd ) ), ReleaseCapture() }
         endif
      endif
      if bPgLeft != nil
         oHScroll:bPageUp = bPgLeft
      endif
      if bPgRight != nil
         oHScroll:bPageDown = bPgRight
      endif
   endif

   ::AEvalWhen()

   // MODIFICADO EM: 02/10/2026 - PARA ON INIT DEL ACTIVATE WINDOW.
   ShowWindow( ::hWnd, AScan( { "HIDDEN", "NORMAL", "ICONIZED", "MAXIMIZED" }, cShow ) - 1 )
   UpdateWindow( ::hWnd )

   ::lVisible = .t.

   if ! lWRunning()
      SetWndApp( ::hWnd )
   endif

   if ::bInit != nil
      Eval( ::bInit, Self )
   endif

   ::Resize( 0, ::nWidth, ::nHeight )

   if lCentered
      if oMonitor == nil
         ::Center()
      else
         WndCenterEx( ::hWnd, oMonitor )
      endif
   elseif oMonitor != nil .and. oMonitor:IsKindOf( "TMONITOR" )
      oMonitor:Move( Self )
   endif

   /* // ERROR AQUI, FUE PARA LINEA: 1178 QUE ES EL CORRECTO. 02/10/2026
   ShowWindow( ::hWnd, AScan( { "HIDDEN", "NORMAL", "ICONIZED", "MAXIMIZED" }, cShow ) - 1 )
   UpdateWindow( ::hWnd )

   ::lVisible = .t.
   */

   if ::oWnd == nil
      if ! lWRunning()
         WinRun( Self:hWnd )
      endif
   endif

return nil

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM

Re: probelma con tget con tipo pasword

Posted: Fri Oct 02, 2026 09:47 PM

Estimado karinha:



Gracias por investigar y por proponer el cambio en el método Activate de WINDOW.PRG, se agradece el esfuerzo de ir al código fuente.



Lo hemos revisado y preferimos no aplicarlo, por dos razones. Primero, en Activate el orden actual es: se evalúa ON INIT, se ajusta tamaño y posición (Resize, Center) y por último se muestra la ventana con ShowWindow. Si mostramos antes de evaluar ON INIT, todo lo que las aplicaciones hacen en ese bloque (crear controles, centrar, maximizar, dar foco) ocurriría con la ventana ya visible. Eso produce parpadeo y saltos de posición en muchas aplicaciones, no solo en la tuya. Segundo, el foco que no vuelve al TGet tras la búsqueda sucede cuando se pulsa el botón, bastante después de Activate, y el botón del TGet ya llama a SetFocus() al terminar su ACTION. Por eso sospechamos de la interacción con el VALID del GET y la pérdida de foco, más que del arranque de la ventana.



Para poder corregirlo de verdad, ¿podrías enviarnos un PRG mínimo que lo reproduzca, con tu versión de FWH y el compilador? Mientras tanto, como solución temporal puedes forzar el foco al final de la acción de búsqueda: ... ACTION ( BuscaCliente(), oGet:SetFocus() ).



Un saludo,

FiveTech AI


Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: probelma con tget con tipo pasword

Posted: Sat Oct 03, 2026 11:45 AM

Buenos días, estimado FiveTech AI. No es posible reproducir el fallo de WINDOW.PRG en un ejemplo pequeño, ya que ocurre en un menú completo que utiliza todas las llamadas a los comandos de configuración de FIVEWIN FOR XHARBOUR. He probado el sistema que estoy desarrollando con FWH26.03, BC77 y xHarbour para BCC77, y todo funciona perfectamente: no hay parpadeos, los VALID funcionan bien, el LISTBOX también; lo único que no he probado es el FOLDEREX. En cuanto sea posible, intentaré enviar al maestro Antonio una demo de tamaño mediano que reproduzca el problema.

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: probelma con tget con tipo pasword

Posted: Sat Oct 03, 2026 12:53 PM

Por cierto: quien genera el parpadeo es TGET.PRG; si cambio el METHOD DISPTEXT(), el programa «se vuelve loco». Jajaja.

Pantalla del sistema sin parpadeos, FOLDEREX funcionando perfectamente.

https://imgur.com/3dYno5B

Imagen perfecta:

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 150
Joined: Fri Sep 25, 2026 01:40 AM

Re: probelma con tget con tipo pasword

Posted: Sat Oct 03, 2026 01:09 PM

Estimado karinha:



Gracias por seguir investigando. Tomamos buena nota de tus hallazgos con TGET.PRG y METHOD DispText(), y de que ya tienes la pantalla sin parpadeos y FOLDEREX funcionando.



Esperamos tu demo para poder analizarlo en profundidad.



Un saludo,

FiveTech AI


Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: probelma con tget con tipo pasword

Posted: Sat Oct 03, 2026 04:54 PM
FiveTech AI wrote:

Estimado karinha:

Gracias por seguir investigando. Tomamos buena nota de tus hallazgos con TGET.PRG y METHOD DispText(), y de que ya tienes la pantalla sin parpadeos y FOLDEREX funcionando.

Esperamos tu demo para poder analizarlo en profundidad.

Un saludo,
FiveTech AI

Listo. DEMO enviada al WhatsApp del maestro Antônio Liñares para análisis técnicos.

Por favor, envíe cualquier sugerencia o crítica sobre el proyecto por WhatsApp.

Gracias, tks.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion