No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Tue Jan 10, 2012 6:06 am
by Enrrique Vertiz
Estimados, tengo otro problema con mi migracion de FWH 10.09 a FWH 11.12
En muchos de mis dialogos tengo los botones <Aceptar> y <Cancelar> ambos se definen en el dialogo con el &(ampersand) por delante, para que acepten la combinacion de teckas ALT + A para aceptar o ALT + C para cancelar, en Fwh 10.09 funciona correcto, pero ahora no me acepta la combinacion, si doy por ejemplo ALT + C, se ubica en el BOTON, pero no ejecuta ninguna accion, adjunto el codigo PRG y el RC tambien en codigo
Parte del PRG que llama al Dialogo
DEFINE DIALOG oDlg RESOURCE "cvingpas" TITLE iif(subs(oApp:cEngine,3,3)=="SQL",oApp:cSysName+" - Accounting Software - ","Contsys - Accounting Software - ")+RDDNAME()
REDEFINE GROUP oGrp ID 13 OF oDlg PROMPT iif(wfcoi=="I","Access to : '","Acceso a : '")+alltrim(oApp:cSqlBd2)+iif(wfcoi=="I","' in : '","' en : '")+alltrim(oApp:cSqlHs1)+iif(wfcoi=="I","', Engine : ","', Motor : ")+oApp:cEngine+" Via : "+oApp:cRdd TRANSPARENT
REDEFINE GET oUsua VAR cUsua ID 110 OF oDlg PICTURE "@!" VALID !empty(cUsua)
REDEFINE GET oPass VAR cPass ID 120 OF oDlg PICTURE "@!"
Redefine Sensitive Say oSSay1 ID 810 Prompt cAce COLOR RGB(0,0,255) COLOROVER RGB(128,128,255) OF oDlg Action Gci_Acercade(oWndPrin)
REDEFINE BUTTON ID 998 OF oDlg ACTION (lSig:=.t.,oDlg:End())
REDEFINE BUTTON ID 999 OF oDlg ACTION (lSig:=.f.,oDlg:End()) CANCEL
ACTIVATE DIALOG oDlg CENTERED
Parte de RES (convertido a RC) que describe el Dialogo
CVINGPAS DIALOG 101, 36, 298, 79
STYLE DS_MODALFRAME | 0x4L | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Sans Serif"
{
EDITTEXT 110, 92, 18, 187, 12
EDITTEXT 120, 92, 35, 187, 12, ES_PASSWORD | WS_BORDER | WS_TABSTOP
DEFPUSHBUTTON "&Aceptar", 998, 180, 61, 50, 15
PUSHBUTTON "&Cancelar", 999, 239, 61, 50, 15
GROUPBOX "&Acceso", 13, 12, 2, 277, 55, BS_GROUPBOX
ICON "keys32", -1, 18, 12, 18, 20
RTEXT "&Usuario", -1, 42, 20, 44, 8
RTEXT "&Contraseña", -1, 42, 37, 44, 8
CONTROL "&info@consorcioinformatico.com", 810, "TsSay", 0 | WS_CHILD | WS_VISIBLE | WS_GROUP, 18, 63, 77, 8
}
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Thu Jan 12, 2012 4:09 pm
by Enrrique Vertiz
Karinha, gracias por contestar, pero tengo el mismo problema en un Dialogo creado desde codigo, abajo el ejemplo
DEFINE DIALOG oDlg FROM 0,0 TO 25,70 TITLE "Elija opcion de Importacion"
@ 1,1 LISTBOX oLbx ;
FIELDS &tipimp->cdo_import, &tipimp->cla_import, &tipimp->nom_archiv, &tipimp->nom_import ;
HEADERS "Codigo","Tipo","Archivo","Descripcion" ;
COLSIZES 40, 40, 100, 70 OF oDlg SIZE 260, 140 ;
ON DBLCLICK ( lLbx := .t., oDlg:End() )
@ 9.4, 10 BUTTON "&OK" OF oDlg SIZE 40,12 ACTION ( lLbx := .t., oDlg:End() )
@ 9.4, 28 BUTTON "&Cancel" OF oDlg SIZE 40,12 ACTION ( lLbx := .f., oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
Y al dar ALT + O o ALT + C no ejecuta ninguna accion, pero con el Enter o Click si, y en versiones anteriores de Fwh (10.09) funcionaba correctamente ????
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Thu Jan 12, 2012 4:12 pm
by Antonio Linares
Enrique,
Estamos revisándolo. Es un bug que se ha colado en la versión 11.12 y a ver si lo cazamos cuanto antes, gracias!
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Thu Jan 12, 2012 4:24 pm
by Enrrique Vertiz
Ok Antonio, esperamos, gracias !!!
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Mon Jan 16, 2012 6:30 pm
by carlos vargas
Antonio, esta modificacion
- Code: Select all Expand view
METHOD GetDlgCode( nLastKey ) INLINE ::oWnd:nLastKey := nLastKey, nil // DLGC_WANTALLKEYS
genera un afecto secundario:
que si el boton esta en un dialogo contenido en un folder, el salto de foco al siguiente control falla, y pasa al siguiente control pero del dialogo contenedor del folder.
Uploaded with
ImageShack.ushe cambiado a:
- Code: Select all Expand view
...
METHOD GetDlgCode( nLastKey )
..
METHOD GetDlgCode( nLastKey ) CLASS TButton
::oWnd:nLastKey := nLastKey
IF ::oWnd:oWnd != NIL .and. ::oWnd:oWnd:ClassName() $ "TFOLDER,TFOLDEREX"
RETURN DLGC_WANTALLKEYS
ENDIF
RETURN NIL
y de momento esta funcionando en ambas situaciones, pero no se si esto tambien genera efectos indeseables.
salu2
carlos vargas
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Mon Jan 16, 2012 6:42 pm
by Antonio Linares
Carlos,
Muy bien, gracias!
Solo le he hecho este pequeño cambio:
- Code: Select all Expand view
METHOD GetDlgCode( nLastKey ) CLASS TButton
::oWnd:nLastKey := nLastKey
if ::oWnd:oWnd != nil .and. ( ::oWnd:oWnd:IsKindOf( "TFOLDER" ) .or. ;
::oWnd:oWnd:IsKindOf( "TFOLDEREX" ) )
return DLGC_WANTALLKEYS
endif
return nil
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Mon Jan 16, 2012 7:02 pm
by carlos vargas
Antonio, ya que estamos en esto, me pudes explicar que hace este metodo y
que efecto tiene los valores de retorno
NIL y DLGC_WANTALLKEYS, ademas que efecto tiene
::oWnd:nLastKey := nLastKey
Si no es mucha molestia.
salu2
carlos vargas
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Wed Jan 18, 2012 6:09 pm
by Antonio Linares
Carlos,
El método GetDlgCode() es donde se procesa y se responde al mensaje de Windows WM_GETDLGCODE:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645425(v=vs.85).aspxdevolver nil en FiveWin es solicitar la acción por defecto del API de Windows. Devolver DLGC_WANTALLKEYS significa que queremos todo el input del teclado y que el control será el responsable de hacer lo que sea. Esas dos posibilidades asi como más que hay estan explicadas ahi.
Ese mensaje envía como parámetro el valor de la tecla virtual que va a ser procesada y FiveWin la almacena en el DATA nLastKey por si la necesitamos
Re: No responde a ALT + (Letra definida) (Fwh 11.12)
Posted:
Wed Jan 18, 2012 7:57 pm
by carlos vargas
mil gracias antonio, esta explicacion me ha servido mucho el dia de hoy,
tenia un problema con un dialogo no modal que me sirve como menu en mi app.
este dialogo es contenido por una venta normal, el caso es que si estando la venta abierta y mostrando el dialogo, y el usuario presionaba la tecla escape, el dialogo que muestra el menu en un grupo de botones se cerraba, dejando la ventana solamente.
:-0, dejando al usuario sin ninguna opcion a seleccionar.
me asegure que la funcion setdialogoesc estubiera seteada correctamente, pero aun en estas condiciones el dialogo se cerraba,
ni aun modificando bKeyChar, bKeyDown tanto en la ventana como en el dialogo me servian para interceptar la pulsacion de la tecla escape y modificar la accion de cerrar el dialogo. aun dejando el estas lineas de codigo, conseguia que el dialogo no se cerrara.
ACTIVATE DIALOG oDlgMenu CENTER NOWAIT VALID !GetKeyState( VK_ESCAPE )
o
ACTIVATE DIALOG oDlgMenu CENTER NOWAIT VALID FALSE
pero en una de esas cambie los button por btnbmp y ya el dialogo no se cerraba, mi problema estaba en la clase tbutton.
solucion, encontre que la clase button el metodo getdlgcode que recientemente se modifico, necesita otra modificacion esta vez mas personal.
- Code: Select all Expand view
METHOD GetDlgCode( nLastKey ) CLASS TButton
::oWnd:nLastKey := nLastKey
DO CASE
CASE ::oWnd:oWnd != NIL .and. ( ::oWnd:oWnd:IsKindOf( "TFOLDER" ) .or. ::oWnd:oWnd:IsKindOf( "TFOLDEREX" ) )
RETURN DLGC_WANTALLKEYS
CASE nLastKey == VK_ESCAPE .and. ::oWnd:oWnd != NIL .and. ( ::oWnd:oWnd:IsKindOf( "TWINDOW" ) .and. ::oWnd:IsKindOf( "TDIALOG" ) )
RETURN DLGC_WANTALLKEYS
ENDCASE
RETURN NIL
/*no permite cerra dialogos con tecla ESCAPE*/
SetDialogEsc( FALSE )
Uploaded with
ImageShack.us- Code: Select all Expand view
DEFINE WINDOW oMainWnd ;
FROM 1, 1 TO 600, 800 ;
TITLE StrFormat( "Sistema de control de Prestamos. - versión 1.0a, [%1]" , oSesion:InfoConexion );
BRUSH oBrush ;
ICON GetIcon()
oMainWnd:SetFont( oFont )
/*define barra de estado con información*/
DEFINE MSGBAR oMsgBar OF oMainWnd PROMPT "KDSoft(c), Managua, Diciembre 2011" 2010 FONT oFont
/*muestra datos de la sesion en la barra de estado*/
DEFINE MSGITEM OF oMsgBar PROMPT oSesion:GetUsuarioAlias() SIZE 080 COLOR CLR_RED , NIL ACTION Usuarios_CambiarClave()
DEFINE MSGITEM OF oMsgBar PROMPT oSesion:GetUsuarioTipo() SIZE 100 COLOR CLR_BLUE, NIL
DEFINE MSGITEM OF oMsgBar PROMPT oSesion:GetUsuarioCiud() SIZE 150 COLOR CLR_BLUE, NIL
/*muestra dialogo con menu principal*/
oMainWnd:bInit := {|| MostrarMenu() }
/*activa ventana principal*/
ACTIVATE WINDOW oMainWnd MAXIMIZED VALID MsgNoYes( "Desea salir de la aplicación?", "Seleccione" )
- Code: Select all Expand view
PROCEDURE MostrarMenu()
LOCAL oDlgMenu, oFntMenu
LOCAL oTitle, oFntTitle
LOCAL oBotones[ 8 ]
DEFINE FONT oFntTitle NAME "tahoma" SIZE 0, -26 BOLD
DEFINE FONT oFntMenu NAME "tahoma" SIZE 0, -12
DEFINE DIALOG oDlgMenu NAME "DLG_MENU" OF oMainWnd COLOR CLR_BLUE, CLR_WHITE FONT oFntMenu BRUSH oBrush3
/*crea objeto mytitle con logo de la empresa y su nombre:-)*/
WITH OBJECT ( oTitle := TMyTitle():Redefine( 601, oDlgMenu ) )
:lGlass := TRUE
:lVertical := FALSE
:nClrText := CLR_WHITE
:nClrBegin := CLR_CYAN
:SetFont( oFntTitle )
:SetBitmap( "BM_CREDICOM" )
:SetTitle( "CREDICOM & CIA. LTDA." )
END
/*muestra bitmap*/
REDEFINE BITMAP ID 501 OF oDlgMenu NAME "BM_MENU"
/*muestra informacion del programa*/
SayDlg( oDlgMenu, 2, CLR_RED )
/*botones para ejecutar modulos del programa*/
REDEFINE BUTTON oBotones[ 1 ] ID 101 OF oDlgMenu PROMPT "Catalogo de clientes" ACTION Clientes()
REDEFINE BUTTON oBotones[ 2 ] ID 102 OF oDlgMenu PROMPT "Detalle de prestamo" ACTION Prestamos()
REDEFINE BUTTON oBotones[ 3 ] ID 103 OF oDlgMenu PROMPT "Solicitud de prestamos" ACTION SolicitudP()
REDEFINE BUTTON oBotones[ 4 ] ID 104 OF oDlgMenu PROMPT "Programación de prestamos" ACTION ProgramacionP()
REDEFINE BUTTON oBotones[ 5 ] ID 105 OF oDlgMenu PROMPT "Registro de pagos por ruta de cobro" ACTION PagosXRuta()
REDEFINE BUTTON oBotones[ 6 ] ID 106 OF oDlgMenu PROMPT "Reportes Financieros" ACTION dummy()
REDEFINE BUTTON oBotones[ 7 ] ID 107 OF oDlgMenu PROMPT "Operaciones en caja" ACTION MostrarMenu_ModulosCaja( oBotones[ 7 ] )
REDEFINE BUTTON oBotones[ 8 ] ID 108 OF oDlgMenu PROMPT "&Tablas de soporte y utilidades" ACTION MostrarMenu_TablasSoporte( oBotones[ 8 ] )
REDEFINE BUTTON ID 201 OF oDlgMenu ACTION AcercaDe()
REDEFINE BUTTON ID 202 OF oDlgMenu ACTION oMainWnd:END()
ACTIVATE DIALOG oDlgMenu CENTER NOWAIT VALID !GetKeyState( VK_ESCAPE )
oFntMenu:END()
/*al dar foco a la aplicacion, se da foco al dialogo con las opciones del menu - fix_child_dialog*/
oMainWnd:bGotFocus := {|| oDlgMenu:SetFocus() }
RETURN
dejo aca la incidencia para posteridad.