FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Formulario que inhabilite todas las funciones
Saludos, mi consulta es la siguiente.
Mi aplicación, en cierto momento, abre un formulario con un cronómetro, el cual finaliza al apretar un gran botón. Este formulario, no ocupa toda la pantalla, por lo que puede a sus costados verse el entorno común de Windows. Lo que yo necesito, es deshabilitar todo, de manera que la unica opción para continuar con la funcionalidad de la aplicación y del propio entorno del sistema operativo sea presionar ese gran botón. Ejemplo para expresarme mejor...se abre este formulario, y a los costados se ve parte del escritorio, incluyendo el ícono MiPC. Lo que quiero lograr es que si hago click sobre el ícono no pase nada, no hasta que yo aprete ese gran botón. Espero haberme explicado bien, muchas gracias! PD: La idea es que el formulario no ocupe toda la pantalla. Esta solución queda descartada. |
#2
|
||||
|
||||
¿Para qué quieres que se vea el escritorio si de todas maneras va a ser inaccesible?
// Saludos |
#3
|
|||
|
|||
Porque por cuestiones de diseño de la aplicación, no quiero que el formulario ocupe toda la pantalla. Pura cuestión estética.
Aunque si no hay solución a lo que pido, no me quedará otra alternativa. |
#4
|
||||
|
||||
Una opción rudimentaria es la de abrir un formulario a pantalla completa pero con su propiedad AlphaBlend en true y AlphaBlendValue en 1. Tal formulario será transparente de manera que parecerá que no está, y, si embargo, no puedes seleccionar nada por debajo de él. Encima de este formulario abres el del cronómetro.
// Saludos |
#5
|
|||
|
|||
No conocía esa herramienta. Igualmente probé y el rendimiento es algo ineficiente.
Muchisimas gracias por tu ayuda! Sigo buscando, aunque lo más probable es que termine poniendo el form en Maximized. |
#6
|
||||
|
||||
Hola...
yo tengo un form.. aunque si lo dejo en pantalla completa, pero además, en la propiedad FormStyle := fsStayOnTop; lo que me deja siempre la aplicación encima... Salu2
__________________
BlueSteel |
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
||||
|
||||
Una forma de hacerlo es utilizando la API de Windows. Ojo! que no siempre puede funcionar en WinXP*
El truco es tratar de imitar el comportamiento de UAC en windows Vista y posteriores. En sí, en lo que consiste es en crear un nuevo escritorio con CreateDesktop. Luego utiliza las funciones SwitchDesktop y SetThreadDesktop para mostrar el formulario en el nuevo escritorio, en el que el usuario no tendrá ningún tipo de interacción más que la ventana que proporcione tu aplicación. Sin embargo, no es tan sencillo. SetThreadDesktop no puede ejecutarse cuando el hilo principal de tu aplicación ya tiene una ventana o un "hook" instalado sobre otro escritorio. Se sabe que el objeto Application de Delphi crea una ventana oculta siempre que inicias tu aplicación. Esta ventana oculta siempre impedirá que puedas llamar a la función SetThreadDesktop. Pero como todo en la vida este problema tiene solución. Lo único malo es que tendrás que técnicamente cerrar la aplicación y volverla a iniciar. Fíjate en este código que he escrito: Este es el código fuente del inicio de la aplicación. El código que está en el archivo *.dpr. Esta es la solución más simple. Pero puede ser que en tu caso no sea realmente la más simple. Hay otra técnica. Consiste en crear un nuevo proceso de tu aplicación desde la primera. Puedes consultar más al respecto en el blog oficial de JWSCL en http://blog.delphi-jedi.net/2008/03/...threaddesktop/ Espero haber podido ayudarte. Saludos! PD.: Para simular que el escritorio siempre es el mismo, y el nuevo escritorio aparezca con los iconos a cómo lo hace UAC, tendrás que tomar una imagen del escritorio activo y dibujarla sobre el nuevo. En el enlace abajo hay código de ejemplo sobre cómo puedes hacer esto. Está en .net pero no es díficil de pasar a Delphi ya que el código original utiliza la API nativa de Windows (la misma utilizada por Delphi ). -- * http://blog.developex.com/?p=930 |
#9
|
||||
|
||||
Proceso Explorer.exe
En Windows Xp
Cuando yo hice una aplicación de mensaje al iniciar Windows Xp (Epocas de novatillo.... Aunque lo sigo siendo ) Para que el usuario no pueda hacer nada más que oprimir el Botón "Aceptar" Yo cerraba el proceso "explorer.exe" y mediante un timer controlaba que no se vuelva a ejecutar. De paso negaba los permisos de entrar al control de procesos (mediante el Ctrl+alt+spr) para que el usuario esté obligado a aceptar mi mensaje de bienvenida sin "cerrar mi programa" Despues que el usuario oprimía el botón. La aplicación volvía a la normalidad todo el escritorio.... Puedes empezar por investigar como cerrar procesos de Windows. Aunque al cerrar el explorar.exe, se cierran todas las ventanas abiertas.... Por lo que tal vez no te sirva |
#10
|
|||
|
|||
soy nuevo en el club
He probado el truco al que hacen mención y funciona correctamente... Pero necesito saber cómo regresar el escritorio por defecto de Windows al hacer clic en un botón determinado de mi aplicación. |
#11
|
||||
|
||||
Cita:
Y pon tu pregunta en los foros, gracias.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar todas mis funciones y procedures a una unidad ...como...? | Kenobi | Varios | 2 | 03-10-2008 18:03:35 |
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo | jzginez | OOP | 5 | 22-06-2007 22:40:51 |
...Todas són iguales... | FunBit | Humor | 2 | 29-12-2005 16:51:45 |
pasar datos de un formulario vista a cualquier formulario | @-Soft | OOP | 2 | 28-09-2004 22:56:01 |
En Red Con Dbf ¿ Dudas? Todas | mainau | MySQL | 7 | 21-04-2004 03:24:13 |
|