Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
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.-
Responder Con Cita
  #2  
Antiguo 28-07-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
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.-
Responder Con Cita
  #3  
Antiguo 28-07-2004
Avatar de ruina
ruina ruina is offline
Miembro
 
Registrado: jun 2004
Posts: 196
Poder: 20
ruina Va por buen camino
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:

Código Delphi [-]
procedure TFRDatosCliente.ButtonOtroclienteNuevoClick(Sender: TObject);
var OtraInstancia:TFRDatosCliente;
begin
      OtraInstancia:=TFRDatosCliente.Create(Self);
      try
         OtraInstancia.Datasource.dataset:=DataModule.Otratabla;
         DataModule.Otratabla.insert;
         if OtraInstancia.Showmodal=mrok then
            DataModule.Otratabla.Post;
         else
            DataModule.Otratabla.cancel;
      finally
           OtraInstancia.free;
      end;
end;
__________________
todo el mundo debe creer en algo... yo creo que voy a tomarme otra copa.
Responder Con Cita
  #4  
Antiguo 28-07-2004
u1025425 u1025425 is offline
Registrado
 
Registrado: may 2003
Ubicación: Girona
Posts: 8
Poder: 0
u1025425 Va por buen camino
La solución más sencilla es tener la tabla en el propio formulario.
Responder Con Cita
  #5  
Antiguo 29-07-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
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.-
Responder Con Cita
  #6  
Antiguo 30-07-2004
Avatar de DarkByte
DarkByte DarkByte is offline
Miembro
 
Registrado: sep 2003
Ubicación: Desconocido
Posts: 1.322
Poder: 22
DarkByte Va por buen camino
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
Código Delphi [-]
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.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  Form2.Show;
end;
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
__________________
:)
Responder Con Cita
  #7  
Antiguo 30-07-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
Gracias DarkByte, sugerencia aceptada !!!!

Víctor.-
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 23:54:48.


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
Copyright 1996-2007 Club Delphi