retornar de un Form
buno gente estoy arrancando con delphi y tengo esta duda, como puedo hacer para retornar un dato (ya sea un objeto o una lista o un entero o lo q sea) desde un Form??? ejemplo. supongamos q tengo un form (probablemente modal) para hacer una búsqueda de una lista elementos, como retorno el elemento seleccionado???
Gracias |
Puedes hacer dos cosas, la primera y mas básica es leer desde donde has creado el form las propiedades de los componentes. Todos los componentes que adhieras al form desde el editor siempre quedan como públicos.
Lo que yo suelo hacer, cuando un form tiene una funcionalidad particular, es lo siguiente:
Y en lugar de llamar al ShowModal, utilizo la función Execute definida por mi que me soluciona toda la lógica propia del formulario. Saludos! |
O lo añades como propiedad del form.
Después de visualizarlo y antes de destruirlo la consultas. Algo así:
En el OnClose del Form1 recuerda asignar:
|
ok, gracias amigos, me despejaron una duda antes de q meta la pata en el diseño gracias
|
oto problema, el form termino siendo mdi y no consigo salir de el sin eliminarlo, se minimiza como default, les paso algo de codigo, en el main lo creo asi:
procedure TMainForm.EliminarDepartamento1Click(Sender: TObject); var vElimDep: TfmSeleccionarDepartamento; begin vElimDep := TfmSeleccionarDepartamento.Create(self); ShowWindow(vElimDep.Handle, SW_SW_SHOWNORMAL ); end; |
Hola.
En el evento OnClose de TMainForm, ponè lo siguiente:
Saludos. |
Hola ericgs, según tu ejemplo debes colocar el codigo que te indica ecfisa en el OnClose de tu formulario TfmSeleccionarDepartamento que debe ser tu MDIChild. En las aplicaciones MDI por defecto todas las ventanas hijas se minimizan al cerrarlas.
Saluditos |
Cita:
Realmente equivoqué al escribir el nombre del Form, mis disculpas :( Saludos. |
el problema va en que si pongo:
la 3º linea se ejecuta justo después del ShowWindow, antes de que pueda hacer algo, al diferencia del modal |
Cita:
Quieres recuperar un valor justo después de cerrar el formulario. Si lo muestras modal, tendrás que destruirlo después de obtener el valor, sino tendrás problemas.
En este caso no puedes usar el Action := caFree, porque puede ser que cuando llegues a la línea (1) es formulario ya esté destruído o destruyendose. Si no lo muestras modal, debes utilizar otro sistema, ya que necesitas que la línea se ejecute al cerrar el form (me imagino). Utilizar algunos de los eventos de salida para devolver el valor. |
perdón no me exprese bien, en el codigo anterior estoy creando una ventana mdi (child), por lo q no puede ser modal
|
1 Archivos Adjunto(s)
La otra opción, como ya te he dicho puede ser utilizando un evento. En mi caso más de una vez he utilizado algo similar a esto.
En el formulario MDI que vas a destruir defines un evento tal que así:
Cuando creas ese formulario "enganchas" el evento a un procedimiento tuyo para recibirlo:
Al cerrar el form2 (el MDIChild) antes de destruirlo "aviso" utilizando el evento:
Y en el momento de destruir el Form2 (MDIChild) al leventar el evento, llegará el control a mi procedimiento:
Parece más complejo de lo que es, pero en realidad es bastante sencillo. Te adjunto el código para que veas cómo funciona. |
Yo lo hago utilizando una funcion de clase, mas o menos el codigo es asi...
// la llamada desde otro modulo seria asi unit OtraUnidad ..... AselLote := TfrmSelLote.getLote(ACliente, ADoc); espero que sirva sl2 |
Cita:
|
Muchas gracias, la verdad no se me hubiera ocurrido, gracias a todos.
Un saludo |
Para mi gusto, la opción de Neftalí es la más adecuada. No obstante, sería bueno que te cuestionaras si lo que estás haciendo es lo más correcto. Un formulario como TfmSeleccionarDepartamento tiene toda la pinta de ser un formulario modal, no hay porqué hacerlo MDIChild. En una aplicación MDI puede haber formularios MDI y no MDI, y todo lo que sea o se asemeje a un cuadro de diálogo en donde el usuario va a escoger algo, debería se un formulario modal.
// Saludos |
es exactamente lo q le dije yo, pero como el programa sera introducido dentro de otro en el cual es todo mdi (o eso me dijeron) tiene q ser mdi.
|
La franja horaria es GMT +2. Ahora son las 02:51:45. |
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