FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Instanciar un form más de una vez
Hola foro,
La verdad que no estoy seguro si el título con que nombré este hilo sea el correcto, pero he aquí una breve explicación para ver si pueden ayudarme con lo que necesito: Imaginemos que el usuario está llenando una formulario para agregar clientes y en ese mismo momento desea agregar otro cliente, pero no ha terminado de con los datos del primero, en consecuencia, de la forma que yo conozco (ShowModal) o tendrá que terminar con el primero para proceder con el segundo o cancelar el primero para proceder con el segundo. Espero puedan comprender lo que traté de explicar, Las gracias anticipadas, Víctor.- |
#2
|
||||
|
||||
Disculpen, creo que me faltó un detalle para ser un poco más explícito:
¿Es posible dejar los datos del primer cliente y llamar el mismo formulario en blanco para proceder con el segundo y luego de finalizado el segundo, buscar el formulario del primero y continuar? Vpepen.- |
#3
|
||||
|
||||
bueno, por poder si que se puede, el problema mayor que veo ahi es el dataset... probablemente tengas un ttable o un clientdataset en tu datamodule y los componentes dataware del formulario enganchados a ese dataset en concreto.
por tanto si creas otra instancia del formulario TDatosdeCliente éste te mostrara exactamente lo mismo que tenias en el anterior y veras con resignación que cada cambio que hagas en los controles de la segunda instancia se reflejan en la primera. Para hacerlo necesitarias que el dataset estubiera dentro del formulario de datos para que se clonase junto con los controles. Otra forma de hacerlo seria tener una segunda tabla (en el datamodule o creada en runtime) un TDatasource dentro del formulario con todos los controles apuntando a ese datasource y al llamar a la segunda instancia cambias el Datasource1.dataset por tu tabla/clientdataset auxiliar:
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa. |
#4
|
|||
|
|||
La solución más sencilla es tener la tabla en el propio formulario.
|
#5
|
||||
|
||||
Gracias Ruina,
La verdad creo que me quedaré con la primera opción de colocar el dataset en el formulario, ya que de tener otra tabla en el datamodule estaría forzando a que solamente se pueda instanciar el formulario solo dos veces. ............................ Más abajo planteo como instancio el form más de una vez: Apliqué este código a mi programa y me funciona de maravillas, ahora bien, no sabría decir si el rendimiento de mi aplicación sería aceptable. Eso es lo que quiero que me aclaren si es posible. Utilizo un proyecto como ejemplo donde tengo dos formularios, uno es el principal y desde ahí llamo al segundo formulario: ******************************* program Eje; uses Forms, Ueje1 in 'Ueje1.pas' {Form1}, Ueje2 in 'Ueje2.pas' {Form2}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); { Application.CreateForm(TForm2, Form2);} Application.Run; end. ******************************* Como es obvio, he eliminado la creación del segundo formulario cuando la aplicación inicia y en su lugar la he colocado cuando el usuario la invoque, de esta manera siempre que él la invoque creará un nuevo formulario: procedure TForm1.Button1Click(Sender: TObject); begin Application.CreateForm(TForm2, Form2); Form2.Show; end; Las gracias anticipadas, Víctor.- |
#6
|
||||
|
||||
vpepen, para que a los demás les sea más fácil entender tu código y ayudarte, intenta usar las etiquetas [ Delphi ] y [ / Delphi ] (sin espacios) te lo hago yo pa'que veas que tal queda
Como podrás comprobar, esto respeta el identado... Eso si, esta respuesta la hago no con intencion de corregir, sino de sugerir... ahora cada uno toma el camino que quiere, amigo
__________________
:) |
#7
|
||||
|
||||
Gracias DarkByte, sugerencia aceptada !!!!
Víctor.- |
|
|
|