Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [ayuda] detector de ventana (https://www.clubdelphi.com/foros/showthread.php?t=72535)

darkcuevas 24-02-2011 17:28:12

[ayuda] detector de ventana
 
buenas


hola les planteo mi situación estoy creando un projet con 2 form (form1 y form2)


ok bueno el objetivo es lograr que al abrir el programa aparezca el form1 este form va a tener solo un label que va a decir (esperando....) cuando el projet detecte la aplicación quiero que desaparezca ese form1 y aparezca el form2 que es el que va a tener las funciones del programa

noce no tengo idea de lo que voy ha hacer lo que estoy usando es
Código Delphi [-]
begin
GameWindow := findwindow(nil,'xxxxxx.exe')
if GameWindow <> 0 then
begin
//aquí es que no ce que agregar (detectado)
end
else
//aquí es que no ce que agregar (no detectado)
end;
si alguien meda una idea o otra forma de lograr lo que quiero :)

salu2.

Chris 24-02-2011 18:04:20

Quisiera que aclararas un poco lo que deseas. Tengo la impresión de que dices una cosa con tus palabras y otra con el pseudo código que has colocado.

Saludos,
Chris

darkcuevas 24-02-2011 19:43:51

Cita:

Empezado por Chris (Mensaje 391891)
Quisiera que aclararas un poco lo que deseas. Tengo la impresión de que dices una cosa con tus palabras y otra con el pseudo código que has colocado.

Saludos,
Chris

mira lo que pasa es que en el form1 tengo un timer y en este timer en el tengo este codigo
Código Delphi [-]
begin
GameWindow := findwindow(nil,'xxxxxx.exe')
if GameWindow <> 0 then
begin
  form2.show;   //por ejenplo
  form1.hide;
end
else
  form2.hide;
  form1.show;
end;
es desir al detectar la ventan este codigo hace que aparesca el form2 y desaparesca el form1

y cuando no lo detecta aparece el form1 y desaparece el form2


pero esto es solo una hidea lo que pasa es que con este codigo el timer no permite que se precionar ningun boton

es por eso que ago la pregunta

Neftali [Germán.Estévez] 25-02-2011 11:58:03

Tienes 2 tareas a realizar:
(1) Detectar el nuevo programa.
(2) Cerrar la ventana actual y abrir la nueva.

Para la (1) puedes utilizar el código que has colocado. Si buscas en los foros por FindWindows encontrarás bastantes ejemplos, tanto para buscar por título como por classname.

Para el (2) una vez detectado la nueva aplicación basta con que ocultes o cierres el form1 (Close/Hide) y abras el nuevo (Show).

darkcuevas 02-03-2011 17:34:18

Cita:

Empezado por Neftali (Mensaje 391982)
Tienes 2 tareas a realizar:
(1) Detectar el nuevo programa.
(2) Cerrar la ventana actual y abrir la nueva.

Para la (1) puedes utilizar el código que has colocado. Si buscas en los foros por FindWindows encontrarás bastantes ejemplos, tanto para buscar por título como por classname.

Para el (2) una vez detectado la nueva aplicación basta con que ocultes o cierres el form1 (Close/Hide) y abras el nuevo (Show).

eso ya loc es codigo que yo coloque hace toda la funcion correctamente pero el problema es que como yo agrego el codigo a un timer hac el proceso una y otra vez esto no me deja precinar ningun boton lo que yo busco es por ejemplo un evento o algo asi que que me permita realizar lo que kiero solo una vez sin que este haciendo lo mismo continuamente

Neftali [Germán.Estévez] 03-03-2011 10:24:32

Cita:

Empezado por darkcuevas (Mensaje 392445)
el problema es que como yo agrego el codigo a un timer hac el proceso una y otra vez esto no me deja precinar ningun boton

No me queda claro cual es el problema. Si se trata de que el problema queda bloquedado, tal vez deberías colocar dentro del procedimiento del Timer un:

Código Delphi [-]
  Application.ProcessMessages;

Y tal vez subir la frecuencia del Timer.

Cita:

Empezado por darkcuevas (Mensaje 392445)
yo busco es por ejemplo un evento o algo asi que que me permita realizar lo que kiero solo una vez sin que este haciendo lo mismo continuamente

Pues elimina ese código del evento del Timer y colócalo en un botón. ¿Cual es el problema? :confused::confused:

Chris 04-03-2011 18:17:36

Doy por supuesto que los botones bloqueados se encuentran en Form1. Además, si ya estás mostrando Form1, no es necesario la línea Form1.Show. También doy por supuesto que la frecuencia del Timer debe ser muy corta para dejar colgada la interfaz de la aplicación. En este caso puedes hacer lo que te ha dicho Neftalí. Si aún así no se soluciona el problema o deseas mantener la frecuencia del Timer bien corta, entonces te recomiendo que trabajes con Hilos (Threads) en tu aplicación. Esa es la mejor solución que puedes implementar. Pero es un trabajo que hay que hacerlo con un poco más de cuidado y trabajo.

Saludos!

rastafarey 06-03-2011 17:05:26

Resp
 
Si es desde tu misma aplicacion.

Form1.Show;
//Codigo qu ehace esperar
Form1.hide;
//muestras tu otra ventana

Ahora si lo que quieres es algo como un spalash. Algo asi como cuando delphi esta iniciado.

Entonces mira los ejemplos de delphi no recuerdo cuan exactmanete creo que es MATabs o algo asi hay esta todo en una estupides que debes agrgar en el proyecto.

rastafarey 06-03-2011 17:06:04

Resp
 
Si es desde tu misma aplicacion.

Form1.Show;
//Codigo qu ehace esperar
Form1.hide;
//muestras tu otra ventana

Ahora si lo que quieres es algo como un spalash. Algo asi como cuando delphi esta iniciado.

Entonces mira los ejemplos de delphi no recuerdo cuan exactmanete creo que es MATabs o algo asi hay esta todo en una estupides que debes agrgar en el proyecto. solo se que es uno de los proyectos de base de datos que la ventana muestraun barquito ao algo por estilo.

darkcuevas 08-03-2011 06:47:08

Cita:

Empezado por Chris (Mensaje 392683)
Doy por supuesto que los botones bloqueados se encuentran en Form1. Además, si ya estás mostrando Form1, no es necesario la línea Form1.Show. También doy por supuesto que la frecuencia del Timer debe ser muy corta para dejar colgada la interfaz de la aplicación. En este caso puedes hacer lo que te ha dicho Neftalí. Si aún así no se soluciona el problema o deseas mantener la frecuencia del Timer bien corta, entonces te recomiendo que trabajes con Hilos (Threads) en tu aplicación. Esa es la mejor solución que puedes implementar. Pero es un trabajo que hay que hacerlo con un poco más de cuidado y trabajo.

Saludos!


si es nesesario el form1.show

begin
GameWindow := findwindow(nil,'xxxxxx.exe')
if GameWindow <> 0 then
begin //cuando se detecta la aplicacion acurre que
form2.show; //se muesta el form2
form1.hide; //se oculta el form1
end
else //cuando detecta que la aplicacion ha cido cerrada
form2.hide; //se oculta el form2
form1.show; //se muestra elform1
end;he estado probando el evento activate

aunque no e tenido mucho tienpo para trabajar en mi aplicacion a primera vista funciono correctamente

bueno apenas pueda sigo con la aplicacion si no me funciona me veran aqui de nuevo :) gracias por su colaboracion

espero que me disculpen por averme ausentado tanto tienpo en este post lo que sucede es que me cortaron el internet y no la avia pagado por falta de tienpo xD

haaa y si no es mucho abuso les agradeceria que me dejaran algunos ejemplos de otras maneras de detectar una ventana en este momento no necesito esta información pero es bueno tener este conocimiento


La franja horaria es GMT +2. Ahora son las 23:07:42.

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