Ver Mensaje Individual
  #4  
Antiguo 24-01-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Reputación: 19
DriverOp Va por buen camino
Thumbs up

Cita:
Empezado por Al González Ver Mensaje
¡Hola!
Hola .

Cita:
Empezado por Al González Ver Mensaje
Tu planteamiento es muy claro en varios aspectos. Ojalá todos prestaran esa dedicación a la hora de escribir las preguntas. Te felicito.
Gracias.
Costumbre. Suelo responder mucho más que preguntar (en otros foros, sobre otros temas) por eso he aprendido cómo preguntar :P.

Cita:
Empezado por Al González Ver Mensaje
Te recomiendo que compiles la aplicación con la opción "Use debug DCUs" activa. Esto te permitirá conocer con mayor detalle la pila de llamadas (call stack) al momento de ocurrir la excepción y quizá con esto podrás inferir en dónde está el problema.
Ah!, excelente dato, siempre se aprende algo nuevo .

Cita:
Empezado por Al González Ver Mensaje
Si se complica, te agradeceríamos expusieras algo más del código involucrado. Y de paso que nos digas si estás haciendo uso de eventos como OnClose, OnCloseQuery, OnHide, OnDeactivate, etc. (muéstranos el código que contienen en caso dado).
Si te refieres a la ventana modal (FrmModif) pues no, no hay código para ninguno de esos eventos.

Cita:
Empezado por Al González Ver Mensaje
Saludos.
Gracias por responder, me ha sido útil.

Cita:
Empezado por Lepe Ver Mensaje
Para evitar los access violation, no le pases el "nodo" (que es un puntero al elemento de la lista que vas a eliminar), crea un nuevo objeto TNodo, copia el valor de sus propiedades, y ese es el que pasas a la ventana Modal.
Me has abierto los ojos, gracias por el truco.

Cita:
Empezado por Lepe Ver Mensaje
Yo abogo por una solución así:
Al ver tu código me ha parecido ver la solución pero tengo un problema. Si lo hago tal como dices cuando tengo que cerrar la ventana por código no tengo ninguna referencia a esa ventana (no tengo un puntero a la ventana). Quizá no quedó claro en los códigos que he puesto en mi primer mensaje. El segundo código se ejecuta en un evento totalmente diferente del primero.

En cambio al tener en la ventana principal la variable FrmModif puedo determinar si esa ventana se está mostrando actualmente o no.

En tu versión al copiar la información del Nodo que se está editando en otro tipo TNodo que pertenece a TFrmModif a simple vista parecería que mi problema se soluciona pero desde el punto de vista del usuario la ventana sigue allí con datos que ya no se corresponden a ninguno de los nodos de la lista de datos. ¿Se comprende lo que digo?. (Hay más comentario sobre esto más abajo).

Cita:
Empezado por Lepe Ver Mensaje
Una cosa que no me ha gustado de tu código es que no compruebas el ModalResult...
Tienes razón.
Pero en realidad no necesito comprobar ese valor en la ventana principal (tal como está en el código que he puesto yo en mi primer mensaje) ya que como le paso a la ventana modal una referencia (y no una copia como propones tú) cualquier cambio que haga en TFrmModif.Nodo se reflejará inmediatamente en el Nodo de la lista (concretamente esto lo hago solamente en el evento OnClick del botón 'Aceptar' de la ventana modal).

De implementar tu solución, por supuesto que tengo que comprobar el valor de retorno de ModalResult, eso sí lo tengo claro.

Cita:
Empezado por Lepe Ver Mensaje
Si ahora me dices que necesitas la variable FrmModif, entonces te responderé que tu diseño (de comunicación entre ventanas) podría mejorarse .
No puedo estar más de acuerdo con esto .

Cita:
Empezado por Lepe Ver Mensaje
Usa eventos creados por tí, para que ese evento externo de la aplicación informe directamente a TFrmModif que ha de cerrarse.
He visto la luz
Excelente. Eso voy a hacer. No necesitas explicarme nada más, ya entendí tu idea. Todavía no he implementado la solución propuesta pero con lo que me has dicho confío en que funcionará.

Gracias Lepe!
Responder Con Cita