FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour problema de focos en varios controles
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:11 PM

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:

#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

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

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

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

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.

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



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

Salu2

Carlos Vargas

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:17 PM

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:

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

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:18 PM

he modificado el ejemplo:

#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.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:21 PM

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

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:24 PM

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

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:28 PM

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

Salu2

Carlos Vargas

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:32 PM

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

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 07:49 PM

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

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 08:04 PM

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

Salu2

Carlos Vargas

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 08:19 PM

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

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

Re: problema de focos en varios controles

Posted: Tue Oct 13, 2026 09:30 PM

Okis

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 10:00 AM

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.

// 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.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 03:09 PM

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...

// 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
}
*/
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1813
Joined: Tue Oct 11, 2005 05:01 PM

Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 03:30 PM

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/IQCyyui0LbqWS6WTc4OwUjDuAdV0woVK0y31VA-OKbXm0yY?e=Jq2RTR

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 8716
Joined: Tue Dec 20, 2005 07:36 PM

Re: problema de focos en varios controles

Posted: Wed Oct 14, 2026 03:53 PM

Prueba ahora, porfa.

// 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.

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