PDA

Ver la Versión Completa : Ayuda


vicmp3
15-01-2007, 15:48:36
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 (http://www.clubdelphi.com/foros/guiaestilo.php) 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...


procedure ReiniciarApp;
begin
WinExec(PChar(ParamStr(0)), SW_NORMAL);
TerminateProcess(GetCurrentProcess, 0);
end;


* El código anterior está ya como truco (http://www.clubdelphi.com/trucos/index.php?id=28&scroll=0&scrollb=0) 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.


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
¿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
¿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
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
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