Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2005
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 20
Tecnic2 Va por buen camino
Question Aplicacion minimizada en el tray

Hola a todos, mi pregunta es la siguiente:

¿ Se puede hacer que un programa que se ejecuta minimizado en el tray cuando se abre windows, se abra en ventana normal cuando el usuario lo abre de forma manual ?

Muchas gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 02-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A mí se me ocurre lo siguiente a bote pronto. Como para que se abra el programa cuando se inicia Windows puedes/debes preparar una clave en el "Registro" con la ruta de dicho programa, a dicha ruta podrías añadirle un parámetro, más o menos de este modo:

"C:\Archivos de programa\Tu programa\programa.exe -tray"

Comprobarías si el parámetro en cuestión existe. ¿Que existe? Pues inicias el programa sin mostrar el formulario principal, o, en fin, lo minimizas en la "Bandeja del sistema". ¿Que no existe? Pues nada, inicias el programa mostrándolo "normalmente" y santas pascuas y aquí paz y después gloria.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-06-2005 a las 18:43:23. Razón: (ampliación del texto)
Responder Con Cita
  #3  
Antiguo 02-06-2005
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 20
Tecnic2 Va por buen camino
Post Si, pero.....

Si, perfecto, pero y si en mi programa el usuario activa la opción de iniciar minimizado con windows, cierra el programa y lo quiere volver a abrir? Entoces quiero que se abra de forma normal, no minimizado. Pero la opción en el registre debe seguir allí.

Me explico?
Responder Con Cita
  #4  
Antiguo 02-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé cómo lo harás tú. Cuando he hecho algún programa que tuviera la posibilidad de iniciarse con Windows una de las opciones de dicho programa era, precisamente, esa, esto es, le daba al usuario la posibilidad de elegir si iniciar el programa junto con Windows o no hacerlo.

Quiero decir que, al cerrar el programa (o cuando quiera que compruebes las opciones del mismo, y, claro está, siempre que incluya la que te comento) compruebas la elección del usuario al respecto y entonces la cosa está clara: escribes/sobreescribes la clave/el valor correspondiente del Registro de Windows según el caso.

De no ser así, puesto que dices que el programa tiene una opción para que el usuario decida si quiere comenzar con el programa "minimizado" o no, podrías aprovechar el momento de guardar dicha opción para lo mismo que digo más arriba: escribir/sobreescribir la clave/el valor del Registro de Windows según sea menester.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-06-2005 a las 19:00:42. Razón: (corrección del texto)
Responder Con Cita
  #5  
Antiguo 02-06-2005
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 20
Tecnic2 Va por buen camino
Post Me parece que no nos entendemos

Pongamos un caso práctico:

Arranca el windows y como en mi programa está puesto que arranque al inicio pues lo hace, y minimizado en el tray, apareciendo solo un icono al lado del reloj.
Cuando le doy al icono, la ventana principal aparece, trabajo con mi programa y finalmente le doy al botón de cerrar, el programa se cierra por completo. Seguidamente, sin cerrar windows necesito volver a mi programa, pues lo que hago es ir al acceso directo en mi escritorio o a través del menú inicio de windows y lo abro. Lo normal es que se abra otra vez minimizado, pero ahora quiero que lo haga de forma normal y no minimizado, solo lo quiero minimizado cuando inicio windows o cuando lo minimizo yo mismo.

A ver si ahora tengo suerte :P
Responder Con Cita
  #6  
Antiguo 02-06-2005
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
hola...

entonces supongo que podrias hacer una de dos :

1) cuando el usuario selecciona cerrar tu programa debes colocar en el evento OnCloseQuery, alguna acción para que en vez de cerrarlo simplemente lo "minimice" tu aplicación...

2) crear una pequeña apliación que sea la que se inicie con windows y que al hacer click sobre ella en el area de los tray icons lo que haga sea arrancar la aplicación que ahora tienes, al cerrar tu aplicacion normal la que esta en el area del "reloj" seguira estando activa para cuando volver a ejectar tu aplicacion

saludos...
Responder Con Cita
  #7  
Antiguo 03-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Efectivamente, no nos hemos entendido, o, por mejor decir, desde luego, yo no pude entender el problema, puesto que me lanzé a bote pronto a tratar de solucionarlo y, puede leerse, lo que he propuesto no lleva a ningún sitio, como bien dices.

Voy a proponer una solución que probablemente sea un tanto chapuza. Espero que no lo sea tanto, o que, en todo caso, puedas hallar otra solución al problema y mejor que la que a continuación trataré de explicar.

Propongo que añadas al programa, además de la opción "iniciar minimizado", otra opción "iniciar con Windows".

Propongo utilizar el "truco" de nombre "Diferir el borrado de ficheros" publicado en la Web de Ian Marteens.

En dicho truco se muestra cómo conseguir que un determinado archivo sea borrado por Windows cuando este se inicie.

A ver. Si no lo he entendido todo mal, tu programa ha de iniciarse "minimizado" de todas, todas, siempre que este se inicie con Windows, incluso si el usuario tiene "desmarcada" la opción correspondiente ("iniciar minimizado").

Sería al cerrarse tu programa cuando guardaras las opciones del usuario, al menos las que nos ocupan: "iniciar minimizado" e "iniciar con Windows".

Si el usuario dejó "marcada" la opción "iniciar con Windows" también tendrías que escribir en el "Registro" la ruta de tu programa en la "clave" oportuna, pero, ya sin "parámetro" ninguno, por lo menos sin el que yo propuse más arriba. Esto lo harías también al cierre de tu programa.

Además de lo dicho, al cerrarse el programa, tendrías también que crear un archivo, un fichero, (que no tendría que contener nada, podría perfectamente estar "vacío"), en la "carpeta temporal de Windows", por ejemplo.

Además de eso, y, acto seguido, utilizarías la función que propone Ian Marteens en el "truco" mencionado antes.

Esta función dejaría al archivo "temporal" listo para ser borrado por Windows (1) al iniciarse este.

El archivo tendría que llamarse siempre igual y situarse en el mismo lugar (2), de tal manera que después pudiera comprobarse su existencia.

¿Me explico? Vayamos a lo práctico. Si el programa ha sido iniciado por Windows, porque así lo determinara la opción correspondiente, y, el usuario lo cerrara antes de cerrarse Windows, al cierre del programa se llevaría a cabo todo lo dicho: se comprobarían las opciones, se guardarían y se crearía el archivo temporal.

De este modo, y, siempre que el usuario volviera a iniciar el programa (en la misma "sesión") además de recuperar las opciones del usuario, comprobaríamos la existencia de dicho archivo temporal: de existir el archivo esto nos indicaría que el programa ya se ejecutó y fue cerrado por el usuario, que ahora vuelve a iniciarlo.

En este caso solamente iniciarías el programa "minimizado" si la opción "iniciar minimizado" estuviera "marcada" por el usuario.

En sucesivas ocasiones en que se inicie Windows, si este inicia tu programa porque así estuviera determinado en el "Registro", comprobarías, antes incluso de la opción "iniciar minimizado", la existencia del archivo temporal de que venimos hablando.

Si dicho archivo temporal no existe es que Windows acaba de iniciarse (y lo ha borrado) (3) de tal modo que tú harías que el programa se iniciara "minimizado", independientemente ya de la opción correspondiente: se inicia el programa junto a Windows, por lo tanto, el programa se inicia "minimizado" de todas, todas.

Insisto en que tal vez todo esto pueda resultar una chapuza inadmisible: empero, puede funcionar, y, o bien a alguien se le ocurre otra cosa (probablemente, yo me incluyo) o mal...

Ya comentarás si lo dicho puede servir como solución al problema, qué otros problemas plantea, o, en fin, cómo te va con la cuestión que nos ocupa.

Notas:

(1) La función que se utiliza en el "truco" "Diferir el borrado de ficheros" de Ian Marteens, y, según el propio autor declara, solamente "vale" para Windows NT, 2000, XP y/o 2003. Sin embargo, el propio autor refiere que en Windows 9x puede conseguirse "lo mismo", pero utilizando el archivo "WinIni". Sería cuestión de averiguar cómo hacerlo de este modo, siempre que fuera necesario.

(2) El nombre/la ruta del archivo temporal podría ser "aleatorio" (de lo contrario procura darle un nombre que difícilmente pueda coincidir con otro archivo que pueda haber creado otro programa). Podría tal vez, a la vez que se crea el archivo temporal (con su ruta a nuestra disposición), guardarse esta en algún lado: junto a las opciones, en el "Registro", etc., de manera que luego, cuando es menester, pueda averiguarse dónde se encuentra, esto es, pueda comprobarse su existencia.

(3) He comprobado que en Windows XP, efectivamente, funciona el "truco" "Diferir el borrado de ficheros", esto es, Windows borra al inicio el archivo/fichero que previamente se indicó. Sin embargo, esto plantea el siguiente problema, ¿lo borra antes o después de iniciar los programas que sean menester? Debería comprobarse esto, tanto en el caso de Windows NT, etc., como de Windows 9x.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-06-2005 a las 01:06:38. Razón: (corrección del texto)
Responder Con Cita
  #8  
Antiguo 03-06-2005
bumiga bumiga is offline
Miembro
 
Registrado: sep 2004
Posts: 28
Poder: 0
bumiga Va por buen camino
Hola, mira este artículo de delphi.about http://delphi.about.com/od/kbwinshell/l/aa121801a.htm ahí encontras todo lo que necesitas para hacer que una aplicación que se ejecute minimizada en el tray.
Responder Con Cita
  #9  
Antiguo 03-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿No se complican demasiado?

En el registro de Windows, donde especifican que se inicie la aplicación al comenzar la sesión en lugar de simplemente poner

miaplicacion.exe

ponen

miaplicacion.exe win

Cuando la aplicación inicie, leerá el primer parámetro: ParamStr(1). Si es = 'win' sabrá que se ejecuta al iniciar Windows y correrá minimizado en la bandeja. De cualquier ora manera que inicien la aplicacíon, mientras no especifiquen este parámetro, la aplicación iniciará normal.

// Saludos
Responder Con Cita
  #10  
Antiguo 03-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

roman, no me creo que tú también cayeses en la "trampa" (es broma) en que he caído yo cuando propuse mi primera posible solución. El problema radica en que la aplicación ha de iniciarse siempre "minimizada" si esta se inicia con Windows.

De no ser así, esto es, si es el usuario el que inicia la aplicación, entonces la misma se iniciará "minimizada" dependiendo de la opción "minimizar al iniciar", que el usuario puede establecer.

Entonces, ¿estás seguro roman que lo que propones funcionaría? Uf... si fuera así qué bien, porque lo que he planteado más arriba tiene tela... ya lo he reconocido...
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-06-2005 a las 01:27:47. Razón: (aclaración)
Responder Con Cita
  #11  
Antiguo 03-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y por qué no ha de funcionar?

Código:
Pseudo código:

IF (param(1) = 'win') OR (opcion_registro = 'min') THEN
  IniciarMinimizada
ELSE
  IniciarNormal
ENDIF
Es decir, la aplicación iniciará minimizada siempre que el parámetro de la línea de comandos sea 'win' o en el registro de Windows se establezca la opción 'min'

La opción del registro se establece cada vez que el usario cierra la aplicación con tal opción seleccionada. Pero aún cuando no haya sido así, el parámetro 'win' le indicará que inicie minimizada.

La lectura aquí es que en lugar de complicarnos la vida buscando métodos para detectar si Windows está inciando sesión, le ayudamos un poco pasando ese parámetro. Claro está que si alguien inicia la aplicación pasando explícitamente el parámetro, se iniciará minimizada, pero no creo que sea algo para quitarnos el sueño.

// Saludos
Responder Con Cita
  #12  
Antiguo 03-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Supón roman que se han escrito en el "Registro" las opciones "win" y "min". Supón que la aplicación se inicia con Windows, y, efectivamente, se comprueba la existencia del parámetro "win" y, por tanto, se inicia la aplicación "minimizada".

En este caso "min" no es necesario, puesto que, como la aplicación se inició con Windows, ha de iniciarse "minimizada" de todas, todas: sin contar con la opción "min". Así es como parece requerirlo Tecnic2.

Pero ahora ponte en que el usuario cierra la aplicación y ha dejado claro en las opciones que él quiere que esta no se inicie "minimizada", pero, ojo, que no se inicie "minimizada" si la vuelve a abrir él, porque, como creo y digo, si la aplicación se inicia con Windows habrá de iniciarse "minimizada", independientemente de lo que el usuario determinara.

¿Qué hacemos? ¿Borramos del registro el valor "min"?

Continuando. Si el usuario vuelve a iniciar la aplicación antes de cerrarse Windows, al inicio de la misma y buscar el valor "min" este no estará, pero sí estará el valor "win", y así la aplicación se iniciará "minimizada", que es lo que el usuario no quiere...

Entonces, ¿si el usuario cierra el programa y no quiere que se inicie la aplicación "minimizada" borramos el valor "min" y quitamos de la ruta del programa el parámetro "win"?

Bien. En ese caso, desde luego, se conseguirá que la aplicación no inicie "minimizada", pero, ¡cuando se inicie con Windows tampoco lo hará! Y es, precisamente, el caso, que cuando se inicie con Windows la aplicación ha de hacerlo "minimizada": independientemente de los parámetros "win" y "min".

La probable chapuza que se me ocurrió, tras proponer una solución similar a la tuya, roman, no tiene que estar pendiente de si se inicia la sesión en Windows. De hecho esa es otra: la propuesta solución no funcionará (se me olvidó comentarlo arriba) si el usuario cierra e inicia luego la sesión: solamente lo hará si se reinicia Windows, o se inicia, simplemente, desde un principio, esto es, luego de haberse apagado el sistema.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-06-2005 a las 02:27:59. Razón: (corrección del texto)
Responder Con Cita
  #13  
Antiguo 03-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que no estás captando la idea.

win y min son dos cosas totalemente distintas aun cuando ambas se guarden en el registro.

win es un parámetro en la línea de comandos de la aplicación. Siempre que se ejecute la aplicación con ese parámetro correrá minimizada sin importar más nada. Pero ese parámetro sólo lo usaremos en

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

que es donde se indican las aplicaciones que iniciarán junto con Windows:

miaplicacion --- miaplicacion.exe win

Siempre que esté esta entrada en el registro se correrá minimizada la aplicación cuando inicie Windows y sólo entonces pues será el único lugar donde le pasemos ese parámetro en la línea de comandos.

Si la aplicación se corre posteriormente, esa entrada del registro ya no cuenta para nada. Esa entrada no la lee nuestra aplicación directamente sino el mismo Windows al iniciar.

Enfatizo:

En corridas subsecuentes, la aplicación no encontrara ese parámetro con ParamStr pues no se le especifica en la línea de comandos.

Entonces, no habiendo tal parámetro, la aplicación leera del registro el valor de

min que es una entrada en

HKCU\Software\miaplicacion

que es donde normalmente se guardan configuraciones de la aplicación:

modo_inicio -- min

y el valor dependerá de lo que haya escogido el usuario. Si el usuario decide no iniciar minimizado el valor desaparecerá o valdrá otra cosa:

modo_inicio -- normal

pero como la aplicación, cuando se incia desde otro lugar que no sea en

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

no encuentra nada de win, iniciará en modo normal.

// Saludos
Responder Con Cita
  #14  
Antiguo 03-06-2005
Tecnic2 Tecnic2 is offline
Miembro
 
Registrado: may 2004
Posts: 155
Poder: 20
Tecnic2 Va por buen camino
Thumbs up Cuando lo pruebe os informo

Muchas gracias por todo, hasta pronto.
Responder Con Cita
  #15  
Antiguo 03-06-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sin duda, no solamente no he captado la idea, pero, no he sabido explicarme y además he hecho el ridículo y he quemado una de las dos neuronas que me quedaban sin tino ni concierto.

Aún y sabiendo que estabas en lo cierto, roman, he releído tu última respuesta dos o tres o cuatro veces, porque, ¿cómo iba a ser posible que le diera ayer tantas vueltas y que la solución fuera la que yo mismo propuse, aunque mal explicada, al inicio de este hilo?

Pues es posible... ya lo creo que sí. Efectivamente, la aplicación no ha de leer la entrada del "Registro" de Windows en:

"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

Sino que será el propio Windows el que lea dicha entrada al iniciarse y solo en este punto: no en sucesivas ocasiones en que la aplicación sea ejecutada.

Terminaré esto aquí dándote la razón y pidiéndote disculpas, roman, por, de algún modo, haber tratado de quitártela. No era mi intención, aunque, no puedo negar que tal vez traté de hacerlo ladinamente, y no diré más.

He de plantearme si no me ocurre "algo" que hace que me ciege en determinados momentos, que no pueda salir de mi primer pensamiento, precisamente, por no estar pensando bien, o, de otro modo, por desplazar ese pensamiento y poner otro en su lugar fastidiándolo todo.

Pero este es otro cantar que nada tiene que ver aquí y ahora. Me reitero en mis disculpas roman: creo que Tecnic2 puede conseguir lo que planteaba siguiendo tus respuestas, y obviando las mías, por lo menos, desde un principio.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-06-2005 a las 11:20:33. Razón: (corrección del texto)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:37:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi