FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Pressing ALT erasing parts of dialog
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 08:54 PM
carlos vargas wrote:antonio, he logrado que me funcione, ya no muestra en bold los textos en los dialogos en un folder, tanto en xp como en w7

he modificado un poco y habilitado el metodo handlevent de la clase tcheckbox

si la version es xp entonces llamo al super:handlevent.
no creo que sea lo adecuado este codigo, pero te puede dar luz de donde este el problema, revisalo por favor.

Code (fw): Select all Collapse
#define WM_UPDATEUISTATE 聽0x0128

METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TCheckBox

聽 聽IF nMsg == WM_UPDATEUISTATE
聽 聽 聽 ::Refresh(.f.)
聽 聽 聽 RETURN NIL
聽 聽ENDIF

RETURN IIf( "XP" $ Upper( cWinVersion() ), Super:HandleEvent( nMsg, nWParam, nLParam ), NIL )


Carlos,

El efecto de pintado en negrita viene de la funci贸n FixSays() que hace que los SAYs se pinten en modo transparente, pero se pintan sobre su propia imagen. Es decir, habr铆a que borrar su imagen antes de que se pintasen. Estamos intentando encontrar una soluci贸n a eso.

En tu soluci贸n lo que evitas es el repintado, pero si muves la caja de dialogo fuera de la pantalla y luego dentro forzando un repintado, el efecto aparecera.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 08:56 PM
carlos vargas wrote:otra cosa Antonio.

cuando en XP o Win7 se tiene activado


Propiedades de pantalla->Apariencia->Efectos->Ocultar las letras subrayadas de acceso rapido hasta que presione la tecla ALT.


los controles checkbox y radiobuttons al obtener el foco la primera vez no muestra el borde punteado.

pero cuando esa propiedad esta activa.

ambos controles muestran correctamente el borde punteado, de ahi que muchas personas
reporte el problema y mucho otros indiquen que no tienen el problema.


ahi estaba el misterio.

ahora a saber que lo soluciona. :-)

disculpa la jodarria con esto, pero es para que el producto FWH quede cada dia mejor. :-)

salu2


Carlos,

Puedes poner un pantallazo de la opci贸n de Windows, no la localizo. Posiblemente cambie un valor del registro, si lo localizamos, podriamos hacerlo configurable desde FWH :-)

Gracias por tu ayuda, asi conseguimos que FWH sea cada vez mejor :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 09:07 PM


Uploaded with ImageShack.us
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 09:11 PM
casualmente, eso pensaba, que aca entraba fixsays en accion, por ello consideraba que el mimso no era un fix valido.

he mirado el codigo que tengo de esa funcion, que realmente no se si es la version mas reciente.
para ver por donde van los tiros.

veo que hay una secion donde se usa la misma tecnica de doble buffer. :-)

Code (fw): Select all Collapse
聽 if( uMsg == WM_ERASEBKGND )
聽 聽{
聽 聽 聽 return 1;
聽 聽}
聽 聽else if( uMsg == WM_UPDATEUISTATE )
聽 聽{
聽 聽 聽 LONG lResult = CallWindowProc( ( WNDPROC ) GetProp( hWnd, "__FWTRANS" ), hWnd, uMsg, wParam, lParam );
聽 聽 聽 InvalidateRect( hWnd, NULL, TRUE );
聽 聽 聽 return lResult;
聽 聽}
聽 聽else if( uMsg == WM_PAINT )
聽 聽{
聽 聽 聽 PAINTSTRUCT ps;
聽 聽 聽 char text[ 256 ];
聽 聽 聽 RECT rct;
聽 聽 聽 HDC hDC = BeginPaint( hWnd, &ps );
聽 聽 聽 HGDIOBJ hOldFont;

聽 聽 聽 GetWindowText( hWnd, text, 255 );
聽 聽 聽 GetClientRect( hWnd, &rct );
聽 聽 聽 SetBkMode( hDC, TRANSPARENT );
聽 聽 聽 SelectObject( hDC, GetStockObject( DEFAULT_GUI_FONT ) );

聽 聽 聽 SendMessage( GetParent( hWnd ), WM_CTLCOLORSTATIC, ( WPARAM ) hDC, ( LPARAM ) hWnd );
聽 聽 聽 hOldFont = SelectObject( hDC, ( HGDIOBJ ) SendMessage( hWnd, WM_GETFONT, 0, 0 ) );

聽 聽 聽 if( ( GetWindowLong( hWnd, GWL_STYLE ) & SS_BLACKFRAME ) == 聽 SS_BLACKFRAME )
聽 聽 聽 {
聽 聽 聽 聽 聽RECT rct;
聽 聽 聽 聽 聽GetClientRect( hWnd, &rct );
聽 聽 聽 聽 聽WindowBoxBlack( hDC, &rct );
聽 聽 聽 }
聽 聽 聽 else if( GetWindowLong( hWnd, GWL_STYLE ) & SS_CENTER )
聽 聽 聽 {
聽 聽 聽 聽 聽DrawText( hDC, text, lstrlen( text ), &rct, 聽DT_CENTER | DT_WORDBREAK );
聽 聽 聽 }
聽 聽 聽 else if( GetWindowLong( hWnd, GWL_STYLE ) & SS_RIGHT )
聽 聽 聽 {
聽 聽 聽 聽 聽DrawText( hDC, text, lstrlen( text ), &rct, 聽DT_RIGHT | DT_WORDBREAK );
聽 聽 聽 }
聽 聽 聽 else if( GetWindowLong( hWnd, GWL_STYLE ) & SS_LEFTNOWORDWRAP )
聽 聽 聽 {
聽 聽 聽 聽 聽DrawText( hDC, text, lstrlen( text ), &rct, 聽DT_LEFT );
聽 聽 聽 }
聽 聽 聽 else
聽 聽 聽 {
聽 聽 聽 聽 聽DrawText( hDC, text, lstrlen( text ), &rct, 聽DT_LEFT );
聽 聽 聽 }
聽 聽 聽 SelectObject( hDC, hOldFont );
聽 聽 聽 EndPaint( hWnd, &ps );
聽 聽 聽 return 0;
聽 聽}


salu2
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 09:39 PM

Carlos,

Y en Windows 7 sabes desde donde se accede a esa opci贸n ?

El problema del c贸digo viene de SetBkMode( hDC, TRANSPARENT ); que hace que el texto se pinte encima del anterior. Pero si lo quitamos, entonces el fondo no es transparente. A ver que soluci贸n se le puede encontrar...

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 09:41 PM

dejame buscarla, que aca en el brete no tenemos win7.
te comento en breve.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Tue Dec 13, 2011 09:58 PM
segun san google

http://social.technet.microsoft.com/For ... 38929ddb3c


La opci贸n est谩 en Panel de control, Centro de accesibilidad, Cambiar el funcionamiento del teclado, Subrayar los m茅todos abreviados de teclado y las teclas de acceso.
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Wed Dec 14, 2011 12:46 AM

Carlos,

Parece que ya tenemos una soluci贸n efectiva al problema de los SAYs que se van poniendo en negrita :-)

Ahora le pasamos a FixSays() como segundo par谩metro el brush del di谩logo y asi el SAY antes de pintar el texto, rellena su superficie con el brush del di谩logo. Asi desde dialog.prg ahora hacemos:

FixSays( ::hWnd, ::oBrush:hBrush ) // Solo hay una llamada a FixSays() desde dialog.prg

y en FixSays() ahora usamos ese brush que recibimos :-)

Te envio por email las librerias modificadas, gracias por las pruebas

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Wed Dec 14, 2011 01:42 AM

gracias antonio, pruebo y te comento.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog (SOLVED)
Posted: Wed Dec 14, 2011 02:16 AM
Antonio........

Estoy que lloro :-) , pero de alegria.

todo anda como la seda.
ahora que ya se el truco para permitir el correcto pintado de los bordes (aunque sea manual la cosa)
y ahora con este cambio, en fixsays, o las modificaciones en checkboxy radiobutton para permitir que la tecla ENTER ejecute el salto del foco al siguiente control en un folder.

por fin la cosa esta como debe de estar.

te doy un 100 en conducta. :-)

si no es mucha molestia, me podrias pasar la modificaciones en lib para xhb.com que es el otro compilador que uso.

mil gracias antonio.

una pregunta antonio, el segundo parametro en fixsay es opcional?, ya que por ejemplo la otra parte donde se usa fixsays es en toolbars, por ejemplo la de rpreview.

aca esta la config del subrayado.


Uploaded with ImageShack.us
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Wed Dec 14, 2011 09:20 AM
Carlos,

En rpreview.prg hay que modificar asi:

Code (fw): Select all Collapse
   if lRebar .or. nStyle >= 2007
      FixSays( ::oBar:hWnd, ::oBar:oBrush:hBrush )
   endif


No lo he probado. Te envio las libs para xhb.com

Muy bien por localizar esa opci贸n en Windows 7. Ahora se trataria de usar un programa monitor del registro para que al cambiar esa opci贸n veamos que se cambia en 茅l y asi poder configurarlo desde nuestras aplicaciones :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Wed Dec 14, 2011 09:26 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Wed Dec 14, 2011 11:59 AM
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pressing ALT erasing parts of dialog
Posted: Thu Dec 15, 2011 05:19 PM

Carlos,

Creo que he localizado el valor que cambia en el registro :-)

HKEY_CURRENT_USER\Control Panel\Accesibility\Keyboard Preference\On

Confirmado

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Pressing ALT erasing parts of dialog
Posted: Thu Dec 15, 2011 06:53 PM

Antonio, has visto los link?
estas pensando modificar el reg cuando la app inice ? :-)

salu2

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)