Pressing ALT erasing parts of dialog

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Tue Dec 13, 2011 8: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: Select all  Expand view

#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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Tue Dec 13, 2011 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Tue Dec 13, 2011 9:07 pm

Image

Uploaded with ImageShack.us
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Tue Dec 13, 2011 9: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: Select all  Expand view

  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)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Tue Dec 13, 2011 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Tue Dec 13, 2011 9:41 pm

dejame buscarla, que aca en el brete no tenemos win7.
te comento en breve.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Tue Dec 13, 2011 9: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)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Wed Dec 14, 2011 1:42 am

gracias antonio, pruebo y te comento.
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog (SOLVED)

Postby carlos vargas » Wed Dec 14, 2011 2:16 am

Antonio........

Estoy que lloro :cry: , 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.
Image

Uploaded with ImageShack.us
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Wed Dec 14, 2011 9:20 am

Carlos,

En rpreview.prg hay que modificar asi:

Code: Select all  Expand view
  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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Wed Dec 14, 2011 9:26 am

regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Wed Dec 14, 2011 11:59 am

Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Pressing ALT erasing parts of dialog

Postby Antonio Linares » Thu Dec 15, 2011 5: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41323
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pressing ALT erasing parts of dialog

Postby carlos vargas » Thu Dec 15, 2011 6:53 pm

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

salu2
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

PreviousNext

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 11 guests