Page 1 of 2

problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:11 pm
by carlos vargas

Estimada IA, esto es un problema con fwh, de generaciones:
se trata de la ausencia del foco o borde punteado de ciertos controles la primera vez que el foco recae sobre ellos, específicamente esto afecta a: radioitems, checkbox, buttons, combobox(editable y combo),

y es que dicho borde punteado que nos indica visualmente que control tiene foco
no aparece del todo en estos de controles, si no hasta la segunda vez que ellos adquieren foco
, siendo que la primera vez el usuario ni sabe dónde está el foco, lo cual afecta la experiencia de usuario, confundiéndolo. El usuario debe saber en qué lugar está en todo momento, cabe señalar que esta prueba es en los pages de un folder, estoy haciendo prueba en dialogos sin folder. ya mostrare los resultados.

antes, había una manera de que se mostraran, y es que en el panel de control había que indicar que se habilitaba el subrayado de los controles cuando se presiona ALT, pero esto de estar haciéndolos en todos los pc, no es para nada lo adecuado.

aca el ejemplo en prg:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oDlg, oFld, oRad, cVal := PadR("CARLOS", 20 ), lVal := .T., nVal:=3, nItem := 2
   local cVal2, cVal3

   cVal2 := cVal3 := Space(20)

   DEFINE DIALOG oDlg SIZE 400, 400

   // folder
   @ 3, 1 FOLDER oFld PROMPTS "&1-One", "&2-Two", "&3-Three" SIZE 190, 120 OF oDlg

   //page 1
   @ 1, 1 GET cVal PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 1 ]

   @ 2, 1 COMBOBOX nVal ITEMS {"UNO","DOS","TRES"} SIZE 80, 15 OF oFld:aDialogs[ 1 ]

   @ 3, 1 CHECKBOX lVal PROMPT "Test" SIZE 80, 15 OF oFld:aDialogs[ 1 ]

   @ 1, 100 RADIO oRad VAR nItem SIZE 120, 10 OF oFld:aDialogs[ 1 ] ITEMS "&4-Cuatro", "&5-Cinco", "&6-Seis" PIXEL

   @ 9.5, 14 BUTTON "Ok" OF oDlg ACTION oDlg:End()

   //page 2
   @ 1, 1 GET cVal2 PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 2 ]

   //page 3
   @ 1, 1 GET cVal3 PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 3 ]

   ACTIVATE DIALOG oDlg CENTERED

return nil

primer ciclo
al inicio el primer control, en este caso el get, tiene el foco, acá sin problemas
Image

al presionar tab y caer en el segundo control que es el combobox no se muestra el foco
Image

seguimos presionando tab y damos foco al checkbox, igualmente no aparece el foco
Image

presionamos tab para saltar al siguiente control, en este caso el radio, igualmente el foco sigue sin aparecer,
Image

y finalmente tab, para saltar al button final, acá el frame sigue sin aparecer, pero se nota un borde de color propio de los themes de windows.
Image

ahora al presionar tab e iniciar un nuevo ciclo, si aparecer correctamente los frames de foco en todos los controles.
Image
Image
Image
Image

otra cosa es que el color trasparente que salía antes el los page de los folders ya no está, se muestra el color que normalmente tiene los diálogos, y si notas en la parte de abajo, aparece una franja blanca, como si el dialogo que contiene el page esta desplazada hacia arriba.

yo durante muchos años he buscado la raíz de estos problemas (del foco bordeado), pero he sido incapaz de encontrarlo. tengo la esperanza que seas capaz de encontrar una respuesta a este inconveniente.

solo un poco más de información: esto sucede también en los controles redefinidos, y con/sin theme activado.

salu2
carlos vargas


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:17 pm
by FiveTech AI

Estimado Carlos,

Gracias por el ejemplo y las capturas, están muy bien explicados. Te cuento lo que creo que está pasando y una prueba que puedes hacer. Aviso que no lo he compilado ni probado con tu ejemplo: es una hipótesis, no un diagnóstico confirmado.

Qué parece ser
Lo que describes (el borde punteado no aparece hasta el segundo ciclo de TAB) coincide con el comportamiento normal de Windows: el sistema guarda un "estado de interfaz" (UI state) por ventana, y mientras no se haya usado el teclado oculta el rectángulo de foco y los subrayados de los atajos. Es lo mismo que el ajuste antiguo del panel de control que mencionas ("ocultar letras subrayadas de los métodos abreviados hasta que se presione ALT"). Al pulsar TAB, Windows cambia ese estado, pero parece que en los diálogos hijos de los pages del folder no llega a tiempo la primera vez.

Prueba sugerida
Pedir a Windows, al abrir el diálogo, que muestre siempre foco y atajos. El mensaje es WM_CHANGEUISTATE (295). Con wParam = MAKELONG( UIS_CLEAR, UISF_HIDEFOCUS + UISF_HIDEACCEL ) = 2 + 3 * 65536 = 196610:

Code: Select all | Expand

ACTIVATE DIALOG oDlg CENTERED ;
   ON INIT ( SendMessage( oDlg:hWnd, 295, 196610, 0 ), ;
             AEval( oFld:aDialogs, { | o | SendMessage( o:hWnd, 295, 196610, 0 ) } ) )

Si con eso el borde aparece ya en el primer ciclo, tienes un arreglo de una línea que no depende de la configuración de cada PC. Si no cambia nada, dímelo, porque entonces la causa sería otra.

Sobre lo otro (el color transparente de los pages que ya no aparece y la franja blanca abajo): con lo que muestras no puedo saber la causa. Para poder mirarlo, dime por favor qué versión de FWH y de Harbour/xHarbour y compilador C usas, y si el mismo ejemplo se comportaba bien en una versión anterior (cuál).

Saludos,
FiveTech AI


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:18 pm
by carlos vargas

he modificado el ejemplo:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oDlg, oFld, oRad, cVal := PadR("CARLOS", 20 ), lVal := .T., nVal:=3, nItem := 2
   local cVal2, cVal3

   cVal2 := cVal3 := Space(20)

   DEFINE DIALOG oDlg SIZE 400, 400
#ifdef __FOLDER__

   // folder
   @ 3, 1 FOLDER oFld PROMPTS "&1-One", "&2-Two", "&3-Three" SIZE 190, 120 OF oDlg

   //page 1
   @ 1, 1 GET cVal PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 1 ]

   @ 2, 1 COMBOBOX nVal ITEMS {"UNO","DOS","TRES"} SIZE 80, 15 OF oFld:aDialogs[ 1 ]

   @ 3, 1 CHECKBOX lVal PROMPT "Test" SIZE 80, 15 OF oFld:aDialogs[ 1 ]

   @ 1, 100 RADIO oRad VAR nItem SIZE 120, 10 OF oFld:aDialogs[ 1 ] ITEMS "&4-Cuatro", "&5-Cinco", "&6-Seis" PIXEL

   @ 9.5, 14 BUTTON "Ok" OF oDlg ACTION oDlg:End()

   //page 2
   @ 1, 1 GET cVal2 PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 2 ]

   //page 3
   @ 1, 1 GET cVal3 PICTURE "@!" SIZE 80, 10 OF oFld:aDialogs[ 3 ]
#else

   @ 1, 1 GET cVal PICTURE "@!" SIZE 80, 10 OF oDlg

   @ 2, 1 COMBOBOX nVal ITEMS {"UNO","DOS","TRES"} SIZE 80, 15 OF oDlg

   @ 3, 1 CHECKBOX lVal PROMPT "Test" SIZE 80, 15 OF oDlg

   @ 1, 100 RADIO oRad VAR nItem SIZE 120, 10 OF oDlg ITEMS "&4-Cuatro", "&5-Cinco", "&6-Seis" PIXEL

   @ 9.5, 14 BUTTON "Ok" OF oDlg ACTION oDlg:End()

#endif

   ACTIVATE DIALOG oDlg CENTERED

return nil

acá se prueba en un dialogo, no en los page de un folder, acá sucede algo interesanente:
al inicio, el get, sigue mostrando el foco, al presionar tab, el combobox sigue sin mostrar el foco bordeado, pero al presionar tab y saltar al checkbox, ahora si está el foco bordeadeado, tab otra vez y el radio adquiere el foco bordeado, tab, y el boton también lo obtiene, todo bien, a excepción del combobox.


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:21 pm
by carlos vargas

nop, todo igual, no hubo ningun efecto al cambio sugerido.
como te comento, es de años.


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:24 pm
by carlos vargas

la ultima version del git. 26.10 creo es. hasta hace unos meses no habia problema con esto.


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:28 pm
by carlos vargas

este el dialogo de una app, vieja, de hace 2 años.
aca todo ok, en cuanto al color y sin border inferior.
Image


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:32 pm
by FiveTech AI

Estimado Carlos,

Gracias por las pruebas. Mi sugerencia con WM_CHANGEUISTATE no sirvió, así que descarto esa hipótesis: no es solo el estado de interfaz de Windows.

Tu prueba sin folder es muy útil porque acota el problema: en un diálogo normal solo falla el combobox, y en los pages del folder fallan más controles. Parecen dos casos distintos, y que antes funcionara bien hace pensar en un cambio reciente.

Para poder comparar, dime por favor:

  • la fecha o el número de commit de tu copia actual de FWH (no solo "26.10"),

  • la versión o fecha de la copia con la que sí funcionaba bien, si todavía la tienes,

  • si el combobox es de lista (CBS_DROPDOWNLIST) o editable en tu ejemplo, y si falla igual con ambos estilos,

  • tu versión de Windows, y si pasa con y sin THEMES.

Con esos datos se puede buscar qué cambió entre las dos copias. No puedo prometer un arreglo, pero así se puede revisar con algo concreto.

Saludos,
FiveTech AI


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 7:49 pm
by carlos vargas

umm, fijate que en modo dialogo, ahora si comento el control combobox, el chekbox no tiene el foco bordeado, al salto con tab es el radio quien sin lo obtiene.
es como si el siguiente control al tget, no obtiene el foco bordeado.

pero sin en lugar del tab, el salto del control lo hago con ENTER o RETURN, ningun control obtiene el foco bordeado la primera vez. a excepcion del get, que no es afectado.

salu2


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 8:04 pm
by carlos vargas

September 2026

  • Fixed: TGet (source\classes\tget.prg): in Unicode apps, a GET with
    PASSWORD style redefined from a resource (.RC) appeared empty until
    it received the focus, even when its variable already had a value.
    It now shows the variable content, masked, from the start.

lo del foco, es desde que me acuerdo, lo del color del folder el exe de de hace dos años, ya no tengo esa version, solo tenia el exe.
el el caso del combobox en ambos modos en modo editable y en dropdownlist, windows 11 64 bits, con y sin themas.

salu2


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 8:19 pm
by FiveTech AI

Estimado Carlos,

Gracias por los datos. Te cuento cómo queda:

  • Foco punteado: parece venir de cómo se pasa el foco desde el GET al siguiente control. Al pulsar TAB o ENTER en un GET, FiveWin mueve el foco directamente con SetFocus en GoNextCtrl, sin pasar por el gestor de diálogos de Windows, que es quien normalmente activa el dibujo del borde de foco. Eso encaja con lo que ves (falla el control que sigue al GET, y con ENTER en todos). Lo estamos estudiando.

  • Color y franja blanca en los pages del folder: sí lo hemos reproducido con el FWH actual y lo estamos revisando.

No puedo darte plazos ni asegurar cómo quedará el arreglo, pero tu ejemplo ha sido muy útil para acotarlo. Si hay algo que probar, te lo digo aquí.

Saludos,
FiveTech AI


Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 9:30 pm
by carlos vargas

Okis


Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 10:00 am
by karinha

Buenos días, maestro Carlos Vargas; por favor, pruebe este ejemplo con recursos en su versión y dígame si también presenta fallos.

Code: Select all | Expand

// C:\FWH\SAMPLES\CARLOSV3.PRG

#include "FiveWin.ch"
#include "Colores.ch"

FUNCTION Main()

   LOCAL oWnd

   SetBalloon( .T. ) // Balloon shape required for tooltips
   SkinButtons()
   SetGetColorFocus( CLR_YELLOW )

   DEFINE WINDOW oWnd TITLE "Modelo de dialogo"

   ACTIVATE WINDOW oWnd ON INIT ( ModeloDlg(), oWnd:End() )

RETURN NIL

FUNCTION ModeloDlg()

   LOCAL oDlg, oFont, oRad, oGroup
   LOCAL oSay1, oSay2, oSay3, oSay4
   LOCAL oGetNome, oGetObs, oCmb, oChk, oBtnOk, oBtnCan
   LOCAL cNome  := PadR( "CARLOS", 20 )
   LOCAL cObs   := PadR( "CARLOS", 30 )
   LOCAL nTipo  := 3
   LOCAL lAtivo := .T.
   LOCAL nOpcao := 2
   LOCAL aTipos := { "UNO", "DOS", "TRES" }
   LOCAL aOpcoes := { "Cuatro", "Cinco", "Seis" }
   LOCAL lOk    := .F.

   DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -12

   DEFINE DIALOG oDlg RESOURCE "DLG_MODELO" TITLE "Modelo de cadastro"  ;
      COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

   oDlg:lHelpIcon := .F.

   REDEFINE SAY oSay1 ID 401 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay2 ID 402 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay3 ID 403 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay4 ID 404 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT

   REDEFINE GROUP oGroup ID 501 OF oDlg COLOR METRO_TURQUE, CLR_WHITE FONT oFont TRANSPARENT

   REDEFINE GET oGetNome VAR cNome ID 101 OF oDlg PICTURE "@!" UPDATE FONT oFont

   oGetNome:cToolTip := "Nome (maiusculas)"

   REDEFINE COMBOBOX oCmb VAR nTipo ITEMS aTipos ID 102 OF oDlg

   oCmb:SetFont( oFont )

   oCmb:cToolTip := "Escolha o tipo"

   REDEFINE CHECKBOX oChk VAR lAtivo ID 103 OF oDlg

   oChk:SetFont( oFont )

   oChk:cToolTip := "Marque se estiver ativo"

   REDEFINE RADIO oRad VAR nOpcao ID 131, 132, 133 OF oDlg

   oRad:SetFont( oFont )

   oRad:aItems[1]:cTooltip := "Cuatro "
   oRad:aItems[2]:cTooltip := "Cinco  "
   oRad:aItems[3]:cTooltip := "Seis   "

   REDEFINE GET oGetObs VAR cObs ID 104 OF oDlg PICTURE "@!" FONT oFont

   oGetObs:cToolTip := "Observacao"

   REDEFINE BUTTON oBtnOk ID 201 OF oDlg ;
      ACTION ( If( Empty( cNome ), ;
      ( MsgStop( "Informe o nome.", "Atencao" ), oGetNome:SetFocus() ), ;
      ( lOk := .T., oDlg:End() ) ) )

   oBtnOk:cToolTip := "Confirmar"

   REDEFINE BUTTON oBtnCan ID 202 OF oDlg ACTION ( lOk := .F., oDlg:End() )

   oBtnCan:cToolTip := "Cancelar"

   SET FONT OF oBtnOk  TO oFont
   SET FONT OF oBtnCan TO oFont

   ACTIVATE DIALOG oDlg CENTERED ON INIT( CTRLS_COLORS( oDlg ), oGetNome:SetFocus() )

   oFont:End()

   IF lOk

  MsgInfo( "Nome: " + AllTrim( cNome )      + CRLF + ;
     "Tipo: " + aTipos[ nTipo ]             + CRLF + ;
     "Ativo: " + If( lAtivo, "Sim", "Nao" ) + CRLF + ;
     "Opcao: " + aOpcoes[ nOpcao ], "Dados" )

   ENDIF

RETURN( lOk )
// By Giovanny Vecchi - TESTRAD.PRG aqui na minha pasta.
FUNCTION CTRLS_COLORS( f_oDlgContainer )

   LOCAL lc_aCtrls := {}, lc_iFor := 0
   LOCAL lc_cClasse := ""

   IF ValType( f_oDlgContainer ) != "O"
      RETURN NIL
   ENDIF

   lc_aCtrls := f_oDlgContainer:aControls

   FOR lc_iFor := 1 TO Len( lc_aCtrls )

  IF ValType( lc_aCtrls[lc_iFor] ) == "O"

     lc_cClasse := Upper( lc_aCtrls[lc_iFor]:ClassName() )

     IF lc_cClasse == "TRADIO"

        aEval( lc_aCtrls[lc_iFor]:oRadMenu:aItems,                 ;
               {|_oRadId|{ SetWindowTheme( _oRadId:hWnd, "", "" ), ;
               _oRadId:SetColor( METRO_TURQUE, CLR_WHITE ) } } )
				
     ELSEIF lc_cClasse == "TCHECKBOX"

        SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

        lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

     ELSEIF lc_cClasse == "TCOMBOBOX"

        SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

        lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

     ENDIF

  ENDIF

   NEXT

RETURN NIL

// FIN / END

/* // CARLOSV3.RC
DLG_MODELO DIALOG 194, 141, 300, 150
STYLE DS_ABSALIGN | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Modelo de cadastro"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 62, 8, 100, 12, ES_AUTOHSCROLL
 COMBOBOX 102, 62, 26, 100, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 CHECKBOX "Sim", 103, 62, 46, 60, 12, WS_TABSTOP
 EDITTEXT 104, 62, 62, 200, 12, ES_AUTOHSCROLL
 RADIOBUTTON "&4-Cuatro", 131, 70, 94, 55, 12, WS_GROUP | WS_TABSTOP
 RADIOBUTTON "&5-Cinco", 132, 130, 94, 55, 12
 RADIOBUTTON "&6-Seis", 133, 190, 94, 55, 12
 PUSHBUTTON "Ok", 201, 95, 126, 50, 14
 PUSHBUTTON "Cancelar", 202, 155, 126, 50, 14
 RTEXT "Nome:", 401, 8, 10, 50, 12
 RTEXT "Tipo:", 402, 8, 28, 50, 12
 RTEXT "Ativo:", 403, 8, 46, 50, 12
 RTEXT "Obs.:", 404, 8, 64, 50, 12
 GROUPBOX "Opção", 501, 62, 82, 200, 30
}
*/

Regards, saludos.


Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 3:09 pm
by carlos vargas

karinha funciona bien, estoy sorprendido, realize múltiples cambios, uno, a uno esperando ver donde cambiaba el comportamiento, pero nunca me salió mal.

adjunto los cambios, todo me funciono. no logro ver que hace diferente. :-)
puedes compilar el ejemplo que indico al inicio del post por favor, y me indicas que sucede.

tambien, si puede realizar cambios para que uses folder en tu ejemplo...

Code: Select all | Expand

// C:\FWH\SAMPLES\CARLOSV3.PRG

#include "FiveWin.ch"
#include "Colores.ch"

FUNCTION Main()

   LOCAL oWnd

   //SetBalloon( .T. ) // Balloon shape required for tooltips
   //SkinButtons()
   //SetGetColorFocus( CLR_YELLOW )
ModeloDlg()
   //DEFINE WINDOW oWnd TITLE "Modelo de dialogo"

   //ACTIVATE WINDOW oWnd ON INIT ( ModeloDlg(), oWnd:End() )

RETURN NIL

FUNCTION ModeloDlg()

   LOCAL oDlg, oFont, oRad, oGroup
   LOCAL oSay1, oSay2, oSay3, oSay4
   LOCAL oGetNome, oGetObs, oCmb, oChk, oBtnOk, oBtnCan
   LOCAL cNome  := PadR( "CARLOS", 20 )
   LOCAL cObs   := PadR( "CARLOS", 30 )
   LOCAL nTipo  := 3
   LOCAL lAtivo := .T.
   LOCAL nOpcao := 2
   LOCAL aTipos := { "UNO", "DOS", "TRES" }
   LOCAL aOpcoes := { "Cuatro", "Cinco", "Seis" }
   LOCAL lOk    := .F.

   DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -12

   DEFINE DIALOG oDlg RESOURCE "DLG_MODELO" TITLE "Modelo de cadastro"  ;
      //COLORS CLR_BLACK, CLR_WHITE TRANSPARENT
/*
   oDlg:lHelpIcon := .F.

   REDEFINE SAY oSay1 ID 401 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay2 ID 402 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay3 ID 403 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay4 ID 404 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
*/
   //REDEFINE GROUP oGroup ID 501 OF oDlg COLOR METRO_TURQUE, CLR_WHITE FONT oFont TRANSPARENT

   REDEFINE GET oGetNome VAR cNome ID 101 OF oDlg PICTURE "@!" UPDATE FONT oFont

   oGetNome:cToolTip := "Nome (maiusculas)"

   REDEFINE COMBOBOX oCmb VAR nTipo ITEMS aTipos ID 102 OF oDlg

   //oCmb:SetFont( oFont )

   //oCmb:cToolTip := "Escolha o tipo"

   REDEFINE CHECKBOX oChk VAR lAtivo ID 103 OF oDlg

   //oChk:SetFont( oFont )

   //oChk:cToolTip := "Marque se estiver ativo"

   REDEFINE RADIO oRad VAR nOpcao ID 131, 132, 133 OF oDlg

   //oRad:SetFont( oFont )

   oRad:aItems[1]:cTooltip := "Cuatro "
   oRad:aItems[2]:cTooltip := "Cinco  "
   oRad:aItems[3]:cTooltip := "Seis   "

   REDEFINE GET oGetObs VAR cObs ID 104 OF oDlg PICTURE "@!" //FONT oFont

   oGetObs:cToolTip := "Observacao"

   REDEFINE BUTTON oBtnOk ID 201 OF oDlg ;
      ACTION ( If( Empty( cNome ), ;
      ( MsgStop( "Informe o nome.", "Atencao" ), oGetNome:SetFocus() ), ;
      ( lOk := .T., oDlg:End() ) ) )

   oBtnOk:cToolTip := "Confirmar"

   REDEFINE BUTTON oBtnCan ID 202 OF oDlg ACTION ( lOk := .F., oDlg:End() )

   oBtnCan:cToolTip := "Cancelar"

   //SET FONT OF oBtnOk  TO oFont
   //SET FONT OF oBtnCan TO oFont

   ACTIVATE DIALOG oDlg CENTERED //ON INIT( CTRLS_COLORS( oDlg ), oGetNome:SetFocus() )

   oFont:End()

   IF lOk

  MsgInfo( "Nome: " + AllTrim( cNome )      + CRLF + ;
     "Tipo: " + aTipos[ nTipo ]             + CRLF + ;
     "Ativo: " + If( lAtivo, "Sim", "Nao" ) + CRLF + ;
     "Opcao: " + aOpcoes[ nOpcao ], "Dados" )

   ENDIF

RETURN( lOk )
// By Giovanny Vecchi - TESTRAD.PRG aqui na minha pasta.
FUNCTION CTRLS_COLORS( f_oDlgContainer )

   LOCAL lc_aCtrls := {}, lc_iFor := 0
   LOCAL lc_cClasse := ""

   IF ValType( f_oDlgContainer ) != "O"
      RETURN NIL
   ENDIF

   lc_aCtrls := f_oDlgContainer:aControls

   FOR lc_iFor := 1 TO Len( lc_aCtrls )

  IF ValType( lc_aCtrls[lc_iFor] ) == "O"

 lc_cClasse := Upper( lc_aCtrls[lc_iFor]:ClassName() )

 IF lc_cClasse == "TRADIO"

    aEval( lc_aCtrls[lc_iFor]:oRadMenu:aItems,                 ;
           {|_oRadId|{ SetWindowTheme( _oRadId:hWnd, "", "" ), ;
           _oRadId:SetColor( METRO_TURQUE, CLR_WHITE ) } } )
			
 ELSEIF lc_cClasse == "TCHECKBOX"

    SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

    lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

 ELSEIF lc_cClasse == "TCOMBOBOX"

    SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

    lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

 ENDIF

  ENDIF

   NEXT

RETURN NIL

// FIN / END

/* // CARLOSV3.RC
DLG_MODELO DIALOG 194, 141, 300, 150
STYLE DS_ABSALIGN | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Modelo de cadastro"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 62, 8, 100, 12, ES_AUTOHSCROLL
 COMBOBOX 102, 62, 26, 100, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 CHECKBOX "Sim", 103, 62, 46, 60, 12, WS_TABSTOP
 EDITTEXT 104, 62, 62, 200, 12, ES_AUTOHSCROLL
 RADIOBUTTON "&4-Cuatro", 131, 70, 94, 55, 12, WS_GROUP | WS_TABSTOP
 RADIOBUTTON "&5-Cinco", 132, 130, 94, 55, 12
 RADIOBUTTON "&6-Seis", 133, 190, 94, 55, 12
 PUSHBUTTON "Ok", 201, 95, 126, 50, 14
 PUSHBUTTON "Cancelar", 202, 155, 126, 50, 14
 RTEXT "Nome:", 401, 8, 10, 50, 12
 RTEXT "Tipo:", 402, 8, 28, 50, 12
 RTEXT "Ativo:", 403, 8, 46, 50, 12
 RTEXT "Obs.:", 404, 8, 64, 50, 12
 GROUPBOX "Opção", 501, 62, 82, 200, 30
}
*/

Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 3:30 pm
by carlos vargas

encontre la diferencia, :-0

si el ejecutable ( .exe ) lo ejecuto dando doble click con el ratón, sucede el problema del foco.
pero si al exe lo ejecuto dando enter sobre el, se muestra correctamente el foco punteado.

karinha, podrias apoyarme validando las pruebas

preparare un video para muestra.
https://1drv.ms/v/c/6803d760b80ce004/IQ ... Y?e=Jq2RTR


Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 3:53 pm
by karinha

Prueba ahora, porfa.

Code: Select all | Expand

// C:\FWH\SAMPLES\CARLOSV4.PRG

#include "FiveWin.ch"
#include "Colores.ch"

STATIC oWnd

FUNCTION Main()

   // SetBalloon( .T. ) // Balloon shape required for tooltips
   // SkinButtons()
   // SetGetColorFocus( CLR_YELLOW )

   DEFINE WINDOW oWnd

  WITH OBJECT oWnd
     :bInit := {|| oWnd:Minimize(), oWnd:Hide(), ModeloDlg() }
  END

   ACTIVATE WINDOW oWnd

RETURN NIL

FUNCTION ModeloDlg()

   LOCAL oDlg, oFont, oRad, oGroup
   LOCAL oSay1, oSay2, oSay3, oSay4
   LOCAL oGetNome, oGetObs, oCmb, oChk, oBtnOk, oBtnCan
   LOCAL cNome  := PadR( "CARLOS", 20 )
   LOCAL cObs   := PadR( "CARLOS", 30 )
   LOCAL nTipo  := 3
   LOCAL lAtivo := .T.
   LOCAL nOpcao := 2
   LOCAL aTipos := { "UNO", "DOS", "TRES" }
   LOCAL aOpcoes := { "Cuatro", "Cinco", "Seis" }
   LOCAL lOk    := .F.

   DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0, -12

   DEFINE DIALOG oDlg RESOURCE "DLG_MODELO" TITLE "Modelo de cadastro"  ;
      //COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

   /*
   oDlg:lHelpIcon := .F.

   REDEFINE SAY oSay1 ID 401 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay2 ID 402 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay3 ID 403 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   REDEFINE SAY oSay4 ID 404 OF oDlg COLORS CLR_BLACK, CLR_WHITE FONT oFont UPDATE TRANSPARENT
   */

   // REDEFINE GROUP oGroup ID 501 OF oDlg COLOR METRO_TURQUE, CLR_WHITE FONT oFont TRANSPARENT

   REDEFINE GET oGetNome VAR cNome ID 101 OF oDlg PICTURE "@!" UPDATE FONT oFont

   oGetNome:cToolTip := "Nome (maiusculas)"

   REDEFINE COMBOBOX oCmb VAR nTipo ITEMS aTipos ID 102 OF oDlg

   //oCmb:SetFont( oFont )

   //oCmb:cToolTip := "Escolha o tipo"

   REDEFINE CHECKBOX oChk VAR lAtivo ID 103 OF oDlg

   //oChk:SetFont( oFont )

   //oChk:cToolTip := "Marque se estiver ativo"

   REDEFINE RADIO oRad VAR nOpcao ID 131, 132, 133 OF oDlg

   //oRad:SetFont( oFont )

   oRad:aItems[1]:cTooltip := "Cuatro "
   oRad:aItems[2]:cTooltip := "Cinco  "
   oRad:aItems[3]:cTooltip := "Seis   "

   REDEFINE GET oGetObs VAR cObs ID 104 OF oDlg PICTURE "@!" //FONT oFont

   oGetObs:cToolTip := "Observacao"

   REDEFINE BUTTON oBtnOk ID 201 OF oDlg ;
      ACTION ( If( Empty( cNome ), ;
      ( MsgStop( "Informe o nome.", "Atencao" ), oGetNome:SetFocus() ), ;
      ( lOk := .T., oWnd:End(), oDlg:End() ) ) )

   oBtnOk:cToolTip := "Confirmar"

   REDEFINE BUTTON oBtnCan ID 202 OF oDlg ACTION ( lOk := .F., oWnd:End(), oDlg:End() )

   oBtnCan:cToolTip := "Cancelar"

   //SET FONT OF oBtnOk  TO oFont
   //SET FONT OF oBtnCan TO oFont

   ACTIVATE DIALOG oDlg CENTERED //ON INIT( CTRLS_COLORS( oDlg ), oGetNome:SetFocus() )

   oFont:End()

   IF lOk

  MsgInfo( "Nome: " + AllTrim( cNome )      + CRLF + ;
     "Tipo: " + aTipos[ nTipo ]             + CRLF + ;
     "Ativo: " + If( lAtivo, "Sim", "Nao" ) + CRLF + ;
     "Opcao: " + aOpcoes[ nOpcao ], "Dados" )

   ENDIF

RETURN( lOk )
// By Giovanny Vecchi - TESTRAD.PRG aqui na minha pasta.
FUNCTION CTRLS_COLORS( f_oDlgContainer )

   LOCAL lc_aCtrls := {}, lc_iFor := 0
   LOCAL lc_cClasse := ""

   IF ValType( f_oDlgContainer ) != "O"
      RETURN NIL
   ENDIF

   lc_aCtrls := f_oDlgContainer:aControls

   FOR lc_iFor := 1 TO Len( lc_aCtrls )

  IF ValType( lc_aCtrls[lc_iFor] ) == "O"

 lc_cClasse := Upper( lc_aCtrls[lc_iFor]:ClassName() )

 IF lc_cClasse == "TRADIO"

aEval( lc_aCtrls[lc_iFor]:oRadMenu:aItems,                 ;
       {|_oRadId|{ SetWindowTheme( _oRadId:hWnd, "", "" ), ;
       _oRadId:SetColor( METRO_TURQUE, CLR_WHITE ) } } )
		
 ELSEIF lc_cClasse == "TCHECKBOX"

SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

 ELSEIF lc_cClasse == "TCOMBOBOX"

SetWindowTheme( lc_aCtrls[lc_iFor]:hWnd, "", "" )

lc_aCtrls[lc_iFor]:SetColor( METRO_TURQUE, CLR_WHITE )

 ENDIF

  ENDIF

   NEXT

RETURN NIL

// FIN / END

/* // CARLOSV4.RC
DLG_MODELO DIALOG 194, 141, 300, 150
STYLE DS_ABSALIGN | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Modelo de cadastro"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 62, 8, 100, 12, ES_AUTOHSCROLL
 COMBOBOX 102, 62, 26, 100, 50, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 CHECKBOX "Sim", 103, 62, 46, 60, 12, WS_TABSTOP
 EDITTEXT 104, 62, 62, 200, 12, ES_AUTOHSCROLL
 RADIOBUTTON "&4-Cuatro", 131, 70, 94, 55, 12, WS_GROUP | WS_TABSTOP
 RADIOBUTTON "&5-Cinco", 132, 130, 94, 55, 12
 RADIOBUTTON "&6-Seis", 133, 190, 94, 55, 12
 PUSHBUTTON "Ok", 201, 95, 126, 50, 14
 PUSHBUTTON "Cancelar", 202, 155, 126, 50, 14
 RTEXT "Nome:", 401, 8, 10, 50, 12
 RTEXT "Tipo:", 402, 8, 28, 50, 12
 RTEXT "Ativo:", 403, 8, 46, 50, 12
 RTEXT "Obs.:", 404, 8, 64, 50, 12
 GROUPBOX "Opção", 501, 62, 82, 200, 30
}
*/

Regards, saludos.