Page 1 of 1

Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 10:05 pm
by Francisco Horta
Hola foro,

pues eso, tengo un dialogo desde recurso, y al presionar la tecla ALT todos mis SAYS desaparecen, e visto algo en el foro, pero no me da solucion
he probando usando un BRUSH y el GRADIENTFILL y de las 2 formas desapaecen,,
fwh1103 xharbour windows 7
salu2
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 10:15 pm
by Antonio Linares
Paco,

Prueba añadiendo esta función a tu aplicación:

function IsAppThemed()
return .F.

Aqui en este hilo comentamos el tema:
viewtopic.php?f=3&t=22979

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 10:21 pm
by Francisco Horta
Antonio,

Ahora si no desaparecen los SAY pero no toma el fondo transparente,

DEFINE DIALOG ::oDlgVe RESOURCE "DLG_PDVVENTAS" ;
FONT oApp:fBold BRUSH oBrush

::oDlgVe:lHelpIcon := .F.

REDEFINE SAY PROMPT "Mesa: " + StrZero(::aMesas[pnNumMesa,1],2) ;
ID 901 OF ::oDlgVe ;
FONT ::oFont[2] ;
COLOR Brown_Dark ;
TRANSPARENT

adjunto imagen
Image

Uploaded with ImageShack.us

gracias
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 10:30 pm
by carlos vargas
solo como prueba
pon:
Code: Select all  Expand view

ACTIVATE DIALOGO oDlg CENETER ON INIT FixSays( oDlg:hWnd )
 


cambia oDlg por la variable que contiene tu dialogo y comenta como te fue

salu2

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 10:43 pm
by Francisco Horta
Que tal Carlos,

Funcionó !! el único detalle es que los say desde recurso en las propiedades lo tenia centrado y ese valor ya no lo respeto,,,
en otro dialogo con 2 buttonbmp y al presionar la tecla ALT, los textos de los botones y los say los pone en negritas,,, tengo un brush en el dialogo, pero los say no los estoy redefiniendo, estos estan tan cual en el recurso.
saludos
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 11:00 pm
by Francisco Horta
con el fixsays() el ultimo caracter me lo elimina si tengo "Producto:" me pone "Producto", en la fecha me la deja "13 de Diciebre de 201"
algo mas?
:-(
saludos
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 11:07 pm
by carlos vargas
Antonio aun esta trabajando para corregir algunos detalles, como te comento antonio sigue el hilo de la discucion, y encontraras que es un trabajo en progreso.

ese codigo es como un atajo, no es recomendable. :-)

realmente ese codigo es ejecutado en el metodo initiate en tdialog, cuando pones la clausula TRANSPARENT

Code: Select all  Expand view

DEFINE DIALOG oDlg ... TRANSPARENTE
 


agrega un nuevo prg a tu proyecto, que contenga este codigo
Code: Select all  Expand view

#pragma BEGINDUMP

#include <hbapi.h>
#include <windows.h>

void WindowBoxBlack( HDC hDC, RECT * pRect );

LRESULT static CALLBACK LabelProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
   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;
   }
   else
   {
      return CallWindowProc( ( WNDPROC ) GetProp( hWnd, "__FWTRANS" ), hWnd, uMsg, wParam, lParam );
   }
}

HB_FUNC( FIXSAYS )
{
   HWND hDlg = ( HWND ) hb_parnl( 1 );
   HWND hCtrl = GetWindow( hDlg, GW_CHILD );
   char className[ 64 ];
   WNDPROC pLabelProc;

   while( hCtrl != NULL )
   {
      GetClassName( hCtrl, className, sizeof( className ) );

      if( ! lstrcmp( "Static", className ) && ! ( ( GetWindowLong( hCtrl, GWL_STYLE ) & SS_ICON ) == SS_ICON ) && ! ( ( GetWindowLong( hCtrl, GWL_STYLE ) & WS_BORDER ) == WS_BORDER ) )
      {
         if( GetWindowLong( hCtrl, GWL_WNDPROC ) != ( LONG ) LabelProc )
         {
            pLabelProc = ( WNDPROC ) SetWindowLong( hCtrl, GWL_WNDPROC, ( LONG ) LabelProc );
            SetProp( hCtrl, "__FWTRANS", ( HANDLE ) pLabelProc );
         }
      }

      hCtrl = GetWindow( hCtrl, GW_HWNDNEXT );

   }
}

#pragma ENDDUMP

 


tambiem prueba redefinir esos says. yo estoy haciendo eso. mientras se resuelve el fallo.

salu2

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 11:23 pm
by Francisco Horta
carlos,

fijate que como son varios y eso de redefinirlos y hide y show, opte por ponerles un espacio en blanco al final de cada say y solucionado, pequeño truco a la mexicana, pero funciona, esperamos la respuesta de Antonio,
saludos
Paco

Re: Desaparcene Says con tecla ALT

PostPosted: Tue Dec 13, 2011 11:45 pm
by carlos vargas
con el fixsay se soluciona lo del ultimo char.
el codigo que te puse es el fuente de fixsays

saul2

Re: Desaparcene Says con tecla ALT

PostPosted: Wed Dec 14, 2011 12:55 am
by Antonio Linares
Arreglado FixSays() para que no haga el efecto "negrita" de pintado:

viewtopic.php?f=3&t=22979&p=123701#p123701

Re: Desaparecen Says con tecla ALT (SOLVED)

PostPosted: Thu Dec 15, 2011 3:44 pm
by Francisco Horta
Hola,

Pues probe quitando:
Function IsAppThemed()
Return(.f.)

y en el ON INIT del Dialogo puse Fixsays() y le agregue a mis says al final un espacio en blanco, y
ya no elimina los say con la tecla ALT y respeta la transparencia, nomas no me respeta el centrado del objeto say desde las propiedades en el recurso.
Antonio, no del cambio a negritas, no encontre donde hacer la modificacion
salu2
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Thu Dec 15, 2011 4:51 pm
by Antonio Linares
Paco,

Si el diálogo re repinta (llamando a oDlg:Refresh( .F. )) los SAYs se iran viendo más oscuros, salvo que se use el nuevo cambio que hemos implementado. Puedes verificarlo ? gracias

Re: Desaparcene Says con tecla ALT

PostPosted: Thu Dec 15, 2011 5:03 pm
by Francisco Horta
Antonio,

El Dialogo lo defino asi:

DEFINE DIALOG oDlg ;
RESOURCE "DLG_ACCESO" ;
BRUSH oBrush ;
TRANSPARENT ;
FONT ::fNormal

REDEFINE SAY ID 103 OF oDlg
REDEFINE SAY ID 104 OF oDlg

redefiniendo los say es la unica manera en que no pone en negritas los say y los desaparece, al menos voy a tener que redefinir todos mis says, esto sin usar fixsays() en el on init del dialogo

gracias
salu2
paco

Re: Desaparcene Says con tecla ALT

PostPosted: Thu Dec 15, 2011 5:24 pm
by Antonio Linares
Paco,

Precisamente eso es lo que hace FixSays(): evitar que se tengan que redefinir todos los SAYs, lo cual seria un trabajo enorme.

No te funciona bien FixSays() ?