PDA

Ver la Versión Completa : Poner un form en el escritorio y que se vea al hacer Tecla win+D


Angel Fernández
05-10-2008, 15:41:48
Hola a todos.

Estoy interesado en hacer una aplicación que se coloque en el escritorio de windows, no encima de las demás ventanas, sino debajo, pero encima del fondo de escritorio. No sé si me explico. Se trataría de una aplicación que al mostrar el escritorio se viera. ¿Se puede hacer eso con Delphi?

Por si lo conocéis, hay un programa que hace eso: Rainlendar, tipo calendario con tareas y eventos. (Por cierto, os lo recomiendo). Precisamente lo que quiero es hacer una versión particular de este programa.

Gracias de antemano. Un saludo.

coso
05-10-2008, 16:03:30
Para hacer este tipo de aplicaciones, tienes que usar forms transparentes. Si miras en la seccion trucos encontraras maneras (con delphi 5). Si no, lo unico que tienes que hacer es colocar la propiedad Alphablend del form a 0 , con border := bsNone, etc...tendras q programar, por eso, el mover el form. Saludos.

Angel Fernández
05-10-2008, 17:36:15
Gracias coso por tu respuesta.

Pero, ¿hacer mi form transparente hace que no desaparezca al mostrar el escritorio?

Quizá no me expliqué bien. No quiero un formulario que esté siempre encima, sino que esté sólo encima de la imagen del fondo del escritorio en win xp. Es decir, al hacer click en el acceso directo a "Mostrar escritorio" (o pulsar tecla win+D), se ocultan todas las aplicaciones activas (se van a la barra de tareas), excepto el Rainlendar del que hablé, que queda encima de la imagen del escritorio. ¿Eso se puede hacer con forms transparentes?

Un saludo.

coso
05-10-2008, 17:42:52
Ah, no, eso no tiene nada que ver con las forms transparentes. Lo que puedes hacer es capturar el mensaje de minimizar y anularlo de alguna manera.

Algo asi:



procedure WMSysCommand(var Msg : TWMSysCommand); message WM_SYSCOMMAND;
...
procedure T_main.WMSysCommand(var Msg : TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) then
begin
// anular o lo que corresponda
end
else defaulthHandler(msg);
end;


en este caso, de igual manera tendras que implementar tu alguna opción de minimizar si la necesitas.

Angel Fernández
05-10-2008, 20:15:33
OK, gracias, esto sí que puede ser lo que busco.

Un saludo.