Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Creación dinamica de Formularios (https://www.clubdelphi.com/foros/showthread.php?t=29520)

Caro 24-01-2006 14:26:49

Creación dinamica de Formularios
 
1 Archivos Adjunto(s)
Hola a todos

Hace tiempo pregunte sobre la creación dinamica de formularios teniendo el nombre del formulario como un String ya que dichos nombres estaban en mi base de datos, me hicieron una referencia a este hilo donde explica Roman muy bien sobre las referencias de clase que soluciono mi problema y al que doy muchas gracias por ello

http://www.clubdelphi.com/foros/showthread.php?t=2656

durante todo este tiempo solo necesite llamar una forma por opción que cargo en mi menu, pero ahora necesito llamar a 2, primero llamar de mi menu de opciones a la primera forma digamos Form2 y de esta llamar a otra Form4 en la cual hago operaciones y el resultado volverlo a pasar a Form2 como ven las 2 ya estan creadas pero en el momento de pasar de Form4 a Form2 me sale un error de access violation es como si no estuviera creada Form2 pero esta ahi.

Les pongo un pequeño ejemplo para que lo entiendan mejor.

Utilizo delphi7

Ayudenme por favor, se los agradece un monton.

ElKurgan 25-01-2006 07:35:15

El fallo que te está ocurriendo es el siguiente:

Estás usando una factoría de Formularios a los cuales añades el nombre de la referencia de clase (en tu ejemplo, TForm2); cuando haces click y creas un formulario a partir de la referencia de clase tienes un formulario de tipo "TForm2" (que en realidad, es un puntero a un objeto de tipo formulario); sin embargo, al llamar al formulario 4, le pones estas líneas:

Código:

    IF edit1.Text<>'' THEN
    begin
        form2.Edit1.Text:=edit1.Text; // <<<<< ¿Form2?

Aqui estás llamando a UNA VARIABLE de tipo TForm, que no ha sido creada en ningún sitio, por lo que te da el error de Access Violation.

Yo lo que haría en TForm4 es lo siguiente:

Código:

procedure TForm4.Button1Click(Sender: TObject);
begin
  IF edit1.Text = '' THEN
    showmessage('Debe llenar la caja');
  else
    close;
end;

Y en el propio formulario TForm2 es donde daría valor al EditBox:

Código:

procedure TForm2.Button1Click(Sender: TObject);
begin
  Application.CreateForm(Tform4,form4);
  try
    form4.ShowModal;
    self.Edit1.Text := Form4.Edit1.Text;
  finally
    form4.Free;
  end;
end;

Espero haber sido claro

Un saludo

Caro 25-01-2006 13:20:01

Me quedo todo claro, mil gracias


La franja horaria es GMT +2. Ahora son las 00:56:40.

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