Lo siento,
me he precipitado con las pruebas,... este Wrapper no funciona en Win98.
Sacaré las transparencias de mi aplicación...
Un Saludo,
Xevi.
"Rolando Sarrailh" <
rsarrailh@gmail.com> escribió en el mensaje
news:[email=
45ed79a8@news.xailer.com...]
45ed79a8@news.xailer.com...[/email]
> Excelente !!!.
> Gracias.
>
> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
> news:[email=
45ed50e3@news.xailer.com...]
45ed50e3@news.xailer.com...[/email]
>> Ignacio,
>>
>> Perfecto!!!
>> Gracias.
>>
>> Ahí va el Wrapper que corre en TODOS los windows y que la transparencia
>> funciona en windows no 9x.
>>
>> //---------------------------------------------------------- --------------------
>> //Transparencia de Ventanas, Ojo... no funcionan en Win9x
>> #pragma BEGINDUMP
>>
>> #include "windows.h"
>> #include "xailer.h"
>>
>> XA_FUNC( SETLAYEREDWINDOWATTRIBUTES )
>> {
>> if ( !XA_IsWin9X() )
>> {
>> hb_retl( SetLayeredWindowAttributes( (HWND) hb_parnl( 1 ), hb_parnl(
>> 2 ), hb_parnl( 3 ), hb_parnl( 4 ) ) );
>> }
>> }
>>
>> #pragma ENDDUMP
>>
>>
>> Un Saludo,
>> Xevi.
>>
>>
>> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el mensaje
>> news:45ed2f8b$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>> Xevi,
>>>
>>> El truco consiste en hacer un enlace a la función en tiempo de ejecución
>>> cargando la DLL y utilizando la función GetProcAddress(). Aquí os dejo
>>> un ejemplo real del propio Xailer:
>>>
>>> //---------------------------------------------------------- ----------------
>>>
>>> XA_FUNC( XPRINTER_GETPRINTERDEFAULT ) // ()->cPrinter
>>> {
>>> if ( ! XA_IsWin9X() )
>>> {
>>> typedef BOOL (WINAPI *fnGetDefaultPrinter)( LPTSTR pszBuffer,
>>> LPDWORD pcchBuffer );
>>> HMODULE hWinSpool;
>>> fnGetDefaultPrinter fnGDP;
>>> char cBuffer[ 256 ];
>>> DWORD dwSize = 256;
>>>
>>> memset( &cBuffer, 0, 256 );
>>> hWinSpool = LoadLibrary( "winspool.drv" );
>>>
>>> if ( !hWinSpool )
>>> {
>>> hb_retc( "" );
>>> return;
>>> }
>>>
>>> fnGDP = GetProcAddress( hWinSpool, "GetDefaultPrinterA" );
>>>
>>> if ( !fnGDP )
>>> {
>>> FreeLibrary( hWinSpool );
>>> hb_retc( "" );
>>> return;
>>> }
>>>
>>> if ( fnGDP( (LPTSTR) &cBuffer, &dwSize ) )
>>> hb_retclen( (LPTSTR) &cBuffer, dwSize - 1 );
>>> else
>>> hb_retc( "" );
>>>
>>> FreeLibrary( hWinSpool );
>>> }
>>> else
>>> {
>>> LPPRINTER_INFO_2 lp;
>>> DWORD dwNeeded = 0;
>>> DWORD dwReturned = 0;
>>> DWORD dwFlags = PRINTER_ENUM_DEFAULT;
>>>
>>> EnumPrinters( dwFlags , NULL, 2, NULL, 0, &dwNeeded, &dwReturned )
>>> ;
>>>
>>> if ( dwNeeded == 0 )
>>> {
>>> hb_retc( "" );
>>> return;
>>> }
>>>
>>> if ( ( lp = ( LPPRINTER_INFO_2 ) hb_xgrab( dwNeeded ) ) == NULL )
>>> {
>>> hb_retc( "" );
>>> return;
>>> }
>>>
>>> if ( EnumPrinters( dwFlags , NULL, 2, ( LPBYTE ) lp, dwNeeded,
>>> &dwNeeded, &dwReturned ) == 0 )
>>> {
>>> hb_xfree( lp );
>>> hb_retc( "" );
>>> return;
>>> }
>>>
>>> hb_retc( lp[0].pPrinterName );
>>> hb_xfree( lp );
>>> }
>>> }
>>>
>>>
>>>
>>> Un saludo
>>>
>>> --
>>> Ignacio Ortiz de Zúñiga
>>>
http://www.xailer.com
>>>
>>>
>>> "José Luis Capel - Aicom" <
jose.luis@iaicom.com> escribió en el mensaje
>>> news:[email=
45ed2e7f@news.xailer.com...]
45ed2e7f@news.xailer.com...[/email]
>>>> Xevi,
>>>>
>>>> Entonces me temo que tendrás que hacer una compilación condicional
>>>> según el sistema operativo destino. Mucho me temo que al incluir la
>>>> llamada a esa función api de windows estás implícitamente obligando al
>>>> SO a, en el momento del arranque, comprobar la existencia de esa
>>>> función.
>>>>
>>>> Saludos,
>>>> José Luis Capel
>>>> PD: si estoy equivocado... que me corrijan los 'monstruos' de Xailer
>>>>

>>>>
>>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>> news:[email=
45ed285b@news.xailer.com...]
45ed285b@news.xailer.com...[/email]
>>>>> José Luis,
>>>>>
>>>>> He probado de SOLO incluir el Wrapper sin hacer la llamada a la
>>>>> función y por lo visto a nivel de PRG no puedo ponerlo, pues solo con
>>>>> que incluya esta parte del wrapper ya no arranca la aplicación.
>>>>>
>>>>> Por eso se me ocurre que si el Wrapper puede detectar si es una
>>>>> versión superior a Win98 y hacer la llamada, luego si funcionaría.
>>>>>
>>>>>
>>>>> Un Saludo,
>>>>> Xevi.
>>>>>
>>>>>
>>>>> "José Luis Capel - Aicom" <
jose.luis@iaicom.com> escribió en el
>>>>> mensaje news:[email=
45ed24c3@news.xailer.com...]
45ed24c3@news.xailer.com...[/email]
>>>>> Xevi,
>>>>>
>>>>> Ponlo en nivel PRG. Algo así (por ejemplo)
>>>>>
>>>>> IF !XA_IsWin98()
>>>>> SetLayered.....
>>>>> ENDIF
>>>>>
>>>>> Saludos,
>>>>> José Luis Capel
>>>>>
>>>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>>> news:[email=
45ed1802@news.xailer.com...]
45ed1802@news.xailer.com...[/email]
>>>>> Según el Wrapper que JoseF dejó en este foro...
>>>>> ¿cómo modificarlo para llamar a SetLayeredWindowAttributes solo si
>>>>> estamos en una versión de Windows superior a Win98???
>>>>>
>>>>> #pragma BEGINDUMP
>>>>>
>>>>> #include "windows.h"
>>>>> #include "xailer.h"
>>>>>
>>>>> XA_FUNC( SETLAYEREDWINDOWATTRIBUTES )
>>>>> {
>>>>> if( VersionWindows > Windows98 )
>>>>> hb_retl( SetLayeredWindowAttributes( (HWND) hb_parnl( 1 ),
>>>>> hb_parnl( 2 ), hb_parnl( 3 ), hb_parnl( 4 ) ) );
>>>>> }
>>>>>
>>>>>
>>>>> #pragma ENDDUMP
>>>>>
>>>>> Gracias
>>>>>
>>>>> Un Saludo,
>>>>> Xevi.
>>>>>
>>>>>
>>>>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>>> news:45ec7032$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>> > Ignacio,
>>>>> >
>>>>> > Confirmado, son las transparencias.
>>>>> > Ahora bien, para miontar el Wrapper para que tenga en cuenta cuando
>>>>> es Win98
>>>>> > o superior... eso como sería???
>>>>> >
>>>>> >
>>>>> > Gracias.
>>>>> >
>>>>> > Un Saludo,
>>>>> > Xevi.
>>>>> >
>>>>> >
>>>>> > "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el
>>>>> mensaje
>>>>> > news:45ec694a$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>> >> Xevi,
>>>>> >>
>>>>> >> Compruebo que si funciona en Win98. Por lo tanto supongo que será
>>>>> porque
>>>>> >> estás utilizando la transparencia de ventanas que Win98 no debe
>>>>> soportar.
>>>>> >> Por favor, confirmamelo.
>>>>> >>
>>>>> >> Gracias y un saludo,
>>>>> >>
>>>>> >> --
>>>>> >> Ignacio Ortiz de Zúñiga
>>>>> >>
http://www.xailer.com
>>>>> >>
>>>>> >>
>>>>> >> "Ignacio Ortiz de Zúñiga" <
NoName@xailer.com> escribió en el
>>>>> mensaje
>>>>> >> news:45ec67ec$[email=
1@news.xailer.com...]
1@news.xailer.com...[/email]
>>>>> >>> Xevi,
>>>>> >>>
>>>>> >>> ¿Estas utilizando la transparencia en algún formulario?
>>>>> >>>
>>>>> >>> Gracias
>>>>> >>>
>>>>> >>> --
>>>>> >>> Ignacio Ortiz de Zúñiga
>>>>> >>>
http://www.xailer.com
>>>>> >>>
>>>>> >>>
>>>>> >>> "Xevi" <
xevicomas@gmail.com> escribió en el mensaje
>>>>> >>> news:[email=
45ec658e@news.xailer.com...]
45ec658e@news.xailer.com...[/email]
>>>>> >>>> Estoy con la version de Xailer 1.2a
>>>>> >>>>
>>>>> >>>> Pues... MIS MISERIAS!!!... me encuentro que mi aplicación
>>>>> "grandota" no
>>>>> >>>> corre en windows 98. Me ha llamado algún cliente que todavía
>>>>> dispone de
>>>>> >>>> alguna terminal con Win98 y no me lo he creído!!! en los
>>>>> ordenadores que
>>>>> >>>> tiene instalado XP corre como siempre, pero en Win98 NADA DE
>>>>> NADA... se
>>>>> >>>> pone el mouse con el reloj de arena unos segundos y no hace
>>>>> nada!!!
>>>>> >>>>
>>>>> >>>> He sacado el polvo de un Pentium133 con Win98 que tenía
>>>>> guardado... y mi
>>>>> >>>> sorpresa ha sido que EL CLIENTE TIENE RAZÓN, como casi
>>>>> siempre!!!
>>>>> >>>> He hecho alguna prueba, pero no puedo hallar a que se debe,
>>>>> supongo que
>>>>> >>>> por tamaño... ¿puede ser???
>>>>> >>>>
>>>>> >>>> Mirar... si no comprimo el ejecutable con UPX, me lanza el
>>>>> siguiente
>>>>> >>>> error.
>>>>> >>>>
>>>>> >>>> "Error al iniciar el programa
>>>>> >>>> El archivo MiAplicacion.EXE está
>>>>> >>>> vinculado a un USER32.DLL:SetLayeredWindowAttributes de
>>>>> exportación que
>>>>> >>>> no existe"
>>>>> >>>>
>>>>> >>>> Y si comprimo el ejecutable con UPX, que es como lo tienen mis
>>>>> clientes,
>>>>> >>>> no llega a ejecutar NADA de la aplicación, ni un simple
>>>>> MSGINFO() que he
>>>>> >>>> puesto en la función de inicio de mi aplicación.
>>>>> >>>>
>>>>> >>>> Estoy deseperado!!!
>>>>> >>>> No se como puedo arreglar esta situación... Y mis clientes me
>>>>> van a
>>>>> >>>> morder!!!
>>>>> >>>> Tengo alguna aplicacin muuuuuy chiquitica... y esa si corre en
>>>>> Win98,
>>>>> >>>> por eso me ha dado a pensar en el tamaño.... por lo visto el
>>>>> tamaño SI
>>>>> >>>> IMPORTA!!!
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> Gracias por vuestro tiempo.
>>>>> >>>>
>>>>> >>>> Un Saludo,
>>>>> >>>> Xevi.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>
>>>>> >>>
>>>>> >>
>>>>> >>
>>>>> >
>>>>> >
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>