Hola Manuel Mercado.
Es un placer de usar su clase. De hecho el uso desde el año 2003.
En esa ocasión se produjo un error de utilizar ALT + CLAVE, cuando hay dos cuadros de diálogo abierto y tienen los mismos botones. Al pulsar ALT + CLAVE actuó todos los botones que había que clave.
Arreglar la sustitución de la SendMsg() por PostMessage(), pero en el actual xHarbour el error persiste. ¿Qué puede ser?
* ============================================================================
* METHOD TSButton:GetDlgCode() Version 6.0 Mar/1/2008
* ============================================================================
METHOD GetDlgCode( nLastKey ) CLASS TSButton
If nLastkey > 0 .and. nLastkey == ::nWakeup
::nWakeup := 0
EndIf
If (! ::oWnd:lValidating .and. ::lCancel .and. ::cAccel != Nil .and. ;
GetAsyncKey( VK_MENU ) .and. ;
GetAsyncKey( Asc( Upper( ::cAccel ) ) ) .and. ::nWakeup == 0 )
** Modificacao feita por Alexandre Pereira JUL/2003
PostMessage( ::hWnd, FM_CLICK )
* ::SendMsg( FM_CLICK )
** Fim
Return 1
ElseIf (! ::oWnd:lValidating .and. ::lWhen .and. !::lCancel .and. ::cAccel != Nil .and. ;
GetAsyncKey( VK_MENU ) .and. ;
GetAsyncKey( Asc( Upper( ::cAccel ) ) ) .and. ::nWakeup == 0 )
** Modificacao feita por Alexandre Pereira JUL/2003
PostMessage( ::hWnd, FM_CLICK )
* ::SendMsg( FM_CLICK )
** Fim
Return 1
EndIf
Return If( ::lActive, DLGC_WANTALLKEYS, Nil )
///////////////////////////////////////////////
Lo siento por la traducción.
Alexandre Pereira
TSButton V.6.1 como se los prometí
Hola Alejandre:
A ver si entendí (comprendo más el portugués que las traducciones de google jeje), los botones que actúan con el método GetDlgCode() son solamente aquellos pertenecientes al diálogo que tiene el foco.
No creo que el cambio que planteas tenga algún efecto y la verdad no sé como se puede hacer que actúen con teclas de aceleración los botones en Diálogos diferentes.
Un abrazo.
Manuel Mercado.
A ver si entendí (comprendo más el portugués que las traducciones de google jeje), los botones que actúan con el método GetDlgCode() son solamente aquellos pertenecientes al diálogo que tiene el foco.
No creo que el cambio que planteas tenga algún efecto y la verdad no sé como se puede hacer que actúen con teclas de aceleración los botones en Diálogos diferentes.
Un abrazo.
Manuel Mercado.
Maestro Manuel,
Obrigado pela sua resposta. Já que você entende melhor o português do que o GOOGLE, então vai em Português mesmo. hehehehe
Também acho estranho o comportamento quando se pressiona ALT + TECLA, porém, realmente isso acontece. Ele executa todos os botões que possuem a Tecla (key) ACELERADORA, não importando o DIALOG aberto.
Fiz um exemplo para que seja testado. (apenas lembrando que com o MOUSE não apresenta nenhum problema).
/////////////////////////////////////////////////
#include "Fivewin.ch"
#include "\TSButton\Include\TSButton.ch"
//--------------------------------------------------------------------------------------------------------------------//
Function Main()
private oWnd
DEFINE WINDOW oWnd FROM 100, 100 TO 490, 600 PIXEL ;
TITLE "Teste" ;
MENU BuildMenu() ;
COLORS CLR_BLACK, CLR_CYAN
ACTIVATE WINDOW oWnd
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
static function BuildMenu()
local oDlg1, oBtn1
define dialog oDlg1 title 'Dialog 1' of oWnd from 0,0 to 20,90
@ 01,00 sbutton obtn1 Prompt "Sai&r" size 30,40 pixels OF oDlg1 action (oDlg1:end()) MESSAGE 'Pressione ALT + R'
activate dialog oDlg1 NOWAIT
BuildMenu1()
Return Nil
static function BuildMenu1()
local oDlg2, oBtn2
define dialog oDlg2 title 'Dialog 2' of oWnd from 15,10 to 30,120
@ 01,00 sbutton obtn2 Prompt "Sai&r" size 30,40 pixels OF oDlg2 action (oDlg2:end()) MESSAGE 'Pressione ALT + R'
activate dialog oDlg2
Return Nil
//////////////////////////////////////
Se não entender, me diga que tento traduzir. ok ?
Muito Obrigado.
Obrigado pela sua resposta. Já que você entende melhor o português do que o GOOGLE, então vai em Português mesmo. hehehehe
Também acho estranho o comportamento quando se pressiona ALT + TECLA, porém, realmente isso acontece. Ele executa todos os botões que possuem a Tecla (key) ACELERADORA, não importando o DIALOG aberto.
Fiz um exemplo para que seja testado. (apenas lembrando que com o MOUSE não apresenta nenhum problema).
/////////////////////////////////////////////////
#include "Fivewin.ch"
#include "\TSButton\Include\TSButton.ch"
//--------------------------------------------------------------------------------------------------------------------//
Function Main()
private oWnd
DEFINE WINDOW oWnd FROM 100, 100 TO 490, 600 PIXEL ;
TITLE "Teste" ;
MENU BuildMenu() ;
COLORS CLR_BLACK, CLR_CYAN
ACTIVATE WINDOW oWnd
Return Nil
//--------------------------------------------------------------------------------------------------------------------//
static function BuildMenu()
local oDlg1, oBtn1
define dialog oDlg1 title 'Dialog 1' of oWnd from 0,0 to 20,90
@ 01,00 sbutton obtn1 Prompt "Sai&r" size 30,40 pixels OF oDlg1 action (oDlg1:end()) MESSAGE 'Pressione ALT + R'
activate dialog oDlg1 NOWAIT
BuildMenu1()
Return Nil
static function BuildMenu1()
local oDlg2, oBtn2
define dialog oDlg2 title 'Dialog 2' of oWnd from 15,10 to 30,120
@ 01,00 sbutton obtn2 Prompt "Sai&r" size 30,40 pixels OF oDlg2 action (oDlg2:end()) MESSAGE 'Pressione ALT + R'
activate dialog oDlg2
Return Nil
//////////////////////////////////////
Se não entender, me diga que tento traduzir. ok ?
Muito Obrigado.
Alexandre Pereira
xHarbour 1.01 - FWH - 8.06 - SqlLib (MySql) - xDevStudio - Ubuntu 8.04
xHarbour 1.01 - FWH - 8.06 - SqlLib (MySql) - xDevStudio - Ubuntu 8.04
Hola Alexandre:
Creeme que he tratado de reproducir el error que mencionas y en mi sistema funciona todo correctamente, incluso con el ejemplo que mostraste. La tecla de aceleración solo activa el botón del diálogo que tiene el foco.
No sé si alguien más pudiera probar tu ejemplo para ver si les pasa lo mismo.
Incluso si te fijas, el programa NewShape.prg funciona con 2 diálogos abiertos al mismo tiempo y también probé y funciona correctamente.
No sé que más puedo hacer.
Saludos.
Manuel Mercado.
Creeme que he tratado de reproducir el error que mencionas y en mi sistema funciona todo correctamente, incluso con el ejemplo que mostraste. La tecla de aceleración solo activa el botón del diálogo que tiene el foco.
No sé si alguien más pudiera probar tu ejemplo para ver si les pasa lo mismo.
Incluso si te fijas, el programa NewShape.prg funciona con 2 diálogos abiertos al mismo tiempo y también probé y funciona correctamente.
No sé que más puedo hacer.
Saludos.
Manuel Mercado.