Ver Mensaje Individual
  #15  
Antiguo 03-07-2007
senda senda is offline
Miembro
 
Registrado: sep 2006
Posts: 48
Reputación: 0
senda Va por buen camino
Cita:
Empezado por gabrielkc
Form1.SetAtrib.... no existe.
Lo siento, se me olvidó responder a este tema. SetAtrib es un método creado por mí el cual asigna ':=' (aunque dudo que esté bien metodológicamente hablando, tal vez sea una burrada) una lista a un atributo del mismo tipo dentro del formulario.

Cita:
Empezado por gabrielkc
form1 estoy suponiendo que es una instancia de una clase TForm.....
Código:
TForm1 = class(TForm)
Cita:
Empezado por Lepe
Así que tú, en algún momento tendrás que liberar a Form1 haciendo un .Free.

Si picas por segunda vez en el botón, la cosa se complica más:
- Si no has usado FreeAndNil(Form1), es muy probable que Form1 tenga el valor de la antigua ejecución, por lo que jamás se destruirá de memoria (se quedará en el limbo, como se suele decir).
- Si has usado FreeAndNil (o Form1.Free; Form1 := nil), entonces estamos en el primer caso que he comentado arriba.

El hecho de que el programa se interrumpa al situar un BreakPoint, supongo que viene porque el depurador intenta analizar el valor de todas las variables y al tener valores inconsistentes o referencias circulares, se vuelve un poco loco.

El problema viene por la creación y destrucción del "Form1" en tu código, sería bueno que dijeras si liberas Form1, cuando, donde y como.

Si dices como debe funcionar el programa (para qué sirve lo que estas haciendo) y demás... muchísimo mejor.
Realizo ambas instrucciones:
Código:
From1.Free;
Form1:=nil;
tras el Form1.ShowModal, es decir, está pensado para que se ejecute el Form1 y cuando se destruya (el usuario pulsa 'x' o un botón de retorno) se ejecutaría la liberación del mismo (las 2 instrucciones previamente especificadas). No sé si importará mucho, pero el breakpoint lo sitúo en el Form1.Create por lo que no llega a destruir el formulario (ni siquiera llega a crearlo, en teoría).

Cita:
Empezado por Lepe
Si dices como debe funcionar el programa (para qué sirve lo que estas haciendo) y demás... muchísimo mejor.
El programa, en teoría, debe:
1. lanzar este formulario (Form1) para la recogida de datos del usuario
2. ejecutar un algoritmo genético con dichos datos
3. almacenar los resultados en la base de datos
4. volver al formulario de partida (desde donde se crea Form1).

Los pasos 2 y 3 aún están sin implementar, por lo que únicamente debe (Form1) comprobar la corrección de los datos y retornar al formualrio de partida.

Cita:
Empezado por gabrielkc
Generalmente no es necesario que las formas tengan un dueño, probablemente cambiando tu sentencia a

Form1:=TForm1.Create(nil);

puedas evitarte, si no en este caso si posteriormente, muchos problemas dificiles de encontrar
Ya lo he probado y, desgraciadamente, no aprecio ningún cambio en la ejecución. De todas maneras, gracias no me viene mal saber los buenos hábitos de programación en Delphi.
Responder Con Cita