Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda (https://www.clubdelphi.com/foros/showthread.php?t=39257)

vicmp3 15-01-2007 15:48:36

Ayuda
 
Hola todos,

necesito ayuda, estoy realizando un programa para la universidad, que tiene un formulario, en donde debe moverse un agente y mi problema es que quiero que haya un boton de reset para que el formulario arranque de cero y no tener que cerrar la aplicacion y volver a cargarla para empezar de cero,

es eso posible, comenzar la aplicacion desde cero con un boton,

espero me ayuden.

Bicho 15-01-2007 16:16:07

Hola, bienvenido al foro.

Leete la Guía de Estilo y aprenderás cosas interesantes de como funciona este foro y de porque el título de este hilo no ayuda a nadie y que la pregunta que haces tampoco.

Así, ¿pues cuáando dices que quieres un botón de reset a que te refieres? ¿qué cosas hay que resetear?, ¿qué objetos hay en el formulario?, ¿hay acceso a base de datos?, etc

Saludos

dec 15-01-2007 19:15:07

Hola,

Estoy en absoluto de acuerdo con Bicho. Dicho esto, tal y como expones el problema me ha venido a la cabeza que acaso querrías poder reiniciar la aplicación desde la propia aplicación...

Código Delphi [-]
procedure ReiniciarApp;
begin
  WinExec(PChar(ParamStr(0)), SW_NORMAL);
  TerminateProcess(GetCurrentProcess, 0);
end;

* El código anterior está ya como truco en el apartado correspondiente.

Bicho 16-01-2007 10:49:01

Está muy bien el código, muy interesante la verdad.
¿Pero la instrucción TerminateProcess no podría susbtituirse (o equivale) simplemente por un Close?
Lo digo porque un Close es más usual que el TerminateProcess, no necesita parámetros, etc.
Yo lo he probado y consigo el mismo efecto.

Código Delphi [-]
procedure ReiniciarApp;
begin
  WinExec(PChar(ParamStr(0)), SW_NORMAL);
//  TerminateProcess(GetCurrentProcess, 0);
  Close;
end;

Saludos

Neftali [Germán.Estévez] 16-01-2007 10:57:35

¿Y no sería mejor saber qué hace la aplicación y el formulario e inicializarlo sin volver a ejecutar la aplicación?
No he entendido lo de "mover el agente", pero se debe poder inicializar el estado sin cerrar y volver a arrancar todo ¿no?

Bicho 16-01-2007 11:08:22

Cita:

Empezado por Neftali
¿Y no sería mejor saber qué hace la aplicación y el formulario e inicializarlo sin volver a ejecutar la aplicación?
No he entendido lo de "mover el agente", pero se debe poder inicializar el estado sin cerrar y volver a arrancar todo ¿no?

Exactamente amigo Germán, no lo indiqué antes, pero ciertamente, no creo que llegue a usar nunca el código de dec.
Por eso mismo le pedí que tipo de componentes hay, sabiéndolos siempre podemos inicializarlos.
Yo en mis programas, que generalmente son programas automáticos o semi-automáticos (fucnionando en servidores sin la intervención de usuarios), están latentes a la espera de eventos o de un timer, y cuando toca, se ejecuta su evento principal (el programa está en marcha siempre), y cuando termina el proceso, no se cierra, sigue esperando para una nueva ejecución. Y lo que hace es inicializarse. Todos tienen un procedimiento que inicializa las variables, y los componentes, elimina estructura temporales, etc.

Sólo es una opinión y una manera de trabajar.

Saludos

vicmp3 16-01-2007 19:26:35

disculpen, soy nuevo en el foro y tal vez debi leer como hacerlo antes,

con respecto a la aplicacion es re sensilla, en el formulario hay un timage que tiene un movimiento aleatorio, y otros timage que sirven como obstaculos.
al iniciar la aplicacion se posicionan todos en lugares del formulario, y se inicializan matrices y listas para seguir el control.
Pero si quiero reiniciar la aplicacion no me queda otra que salir y volverla a ejecutar, yo lo que queria es alguna clase de boton que me reinicie la aplicacion a cero, como si la volviera a cargar pero sin salir de esta.

Gracias,
victor.

roman 16-01-2007 19:43:56

Cita:

Empezado por Bicho
¿Pero la instrucción TerminateProcess no podría susbtituirse (o equivale) simplemente por un Close?

De hecho no equivale. El problema con TerminateProcess es que mata el proceso sin más, no dando oportunidad a las tareas que la aplicacion tuviere que hacer al finalizar. Pueden probarlo poniendo algo en el evento OnClose del formulario principal. Dicho evento no se ejecutará si seusa TerminateProces.

// Saludos

Bicho 16-01-2007 20:34:29

Claro, pero yo estaba indicando que puedo poner el Close, siempre que no tenga nada definido en el OnClose, o el CloseQuery.

Saludos

seoane 16-01-2007 20:36:20

Cita:

Empezado por vicmp3
disculpen, soy nuevo en el foro y tal vez debi leer como hacerlo antes,

con respecto a la aplicacion es re sensilla, en el formulario hay un timage que tiene un movimiento aleatorio, y otros timage que sirven como obstaculos.
al iniciar la aplicacion se posicionan todos en lugares del formulario, y se inicializan matrices y listas para seguir el control.
Pero si quiero reiniciar la aplicacion no me queda otra que salir y volverla a ejecutar, yo lo que queria es alguna clase de boton que me reinicie la aplicacion a cero, como si la volviera a cargar pero sin salir de esta.

Gracias,
victor.

:confused: No entiendo, según parece eres tu el que posiciona las imágenes, e inicializa matrices y listas, supongo que lo haces en el evento OnCreate del formulario, o alguno similar. Por que entonces, en el evento del botón, no colocas el código necesario para inicializar todo de nuevo, o aun mejor llamas al evento OnCreate.

roman 16-01-2007 22:15:47

Cita:

Empezado por Bicho
Claro, pero yo estaba indicando que puedo poner el Close, siempre que no tenga nada definido en el OnClose, o el CloseQuery.

¡Ah caray! ¿Dónde mencionaste todo eso? Pero en realidad no te estaba contradiciendo, al contrario. Lo que quiero decir es que no es buena práctica usar TerminateProcess. Debe usarse como último recurso.

// Saludos

Bicho 16-01-2007 22:39:24

Ups perdona!, lo quise der por supuesto, fallo mio.

De todos modos, veo que coincidimos en opinión, a mí tampoco no me agrada demasiado usar TerminateProcess por eso sugerí si el Close era compatible.

Saludos


La franja horaria es GMT +2. Ahora son las 22:48:47.

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