Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Un formulario principal y varios secundarios en una aplicación (https://www.clubdelphi.com/foros/showthread.php?t=60233)

noob 25-09-2008 11:24:49

Un formulario principal y varios secundarios en una aplicación
 
Tengo una aplicación con un formulario principal que tiene un menú principal que tiene tres items: Ver Form1, Ver Form2 y Ver Form3

Cuando yo pulso en "Ver Form1" quiero que aparezca un formulario en modo modal que he hecho a parte, y así con los demás items del menú principal.

No se si la forma correcta de hacerlo es la que he hecho. Os pongo mi code a ver qué os parece:

Código Delphi [-]
program Project1;
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in '..\..\..\..\Archivos de programa\Borland\Delphi6\Projects\Unit2.pas' {Form2},
  Unit3 in '..\..\..\..\Archivos de programa\Borland\Delphi6\Projects\Unit3.pas' {Form3},
  Unit4 in '..\..\..\..\Archivos de programa\Borland\Delphi6\Projects\Unit4.pas' {Form4};
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.Run;
end.

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus;
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    VerForm11: TMenuItem;
    VerForm21: TMenuItem;
    VerForm31: TMenuItem;
    procedure VerForm11Click(Sender: TObject);
    procedure VerForm21Click(Sender: TObject);
    procedure VerForm31Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4;
{$R *.dfm}
procedure TForm1.VerForm11Click(Sender: TObject);
var
 Modal: TForm2;
begin
 Modal := TForm2.Create (Application);
 try
  Modal.ShowModal;
 finally
  Modal.Free;
 end;
end;
procedure TForm1.VerForm21Click(Sender: TObject);
var
 Modal: TForm3;
begin
 Modal := TForm3.Create (Application);
 try
  Modal.ShowModal;
 finally
  Modal.Free;
 end;
end;
procedure TForm1.VerForm31Click(Sender: TObject);
var
 Modal: TForm4;
begin
 Modal := TForm4.Create (Application);
 try
  Modal.ShowModal;
 finally
  Modal.Free;
 end;
end;
end.

El código de Unit2, Unit3 y Unit4 no lo pongo porque son simplemente formularios vacíos.

Digo que si es así porque no entiendo por qué en el archivo dpr tenemos las líneas:

Código:

  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);

ya que no quiero que se creen nada más arrancar el programa sino cuando yo pulse en los diferentes items de los submenús.

Thanks!

coso 25-09-2008 11:28:55

Hola, debes mirar en project->options->forms->autocreateforms, y desactivarlas de alla.

noob 25-09-2008 11:35:38

Entonces la forma correcta de crear un formulario principal con unos cuantos secundarios que aparecen en tiempo de ejecución es como lo puse arriba pero quitando los CreateForm asociados a los formularios secundarios del dpr, ¿verdad?

coso 25-09-2008 13:44:12

si, pero si quitas las lineas pero no los sacas de autocreate forms, delphi te las pondra de nuevo.

Caro 25-09-2008 14:21:37

Cita:

Empezado por noob (Mensaje 316203)
Entonces la forma correcta de crear un formulario principal con unos cuantos secundarios que aparecen en tiempo de ejecución es como lo puse arriba pero quitando los CreateForm asociados a los formularios secundarios del dpr, ¿verdad?

Hola, como te dice el amigo coso puedes quitarlas desde project->options->forms lo quitas de autocreateforms y lo colocas en avalailable forms, pero también vale que lo quites directamente del dpr, pero solo las lineas donde se crea cada formulario, despues de quitar y grabar puedes entrar nuevamente a project->options->forms y veraz que ya no estan en el autocreate.

Sobre la creación en vez de usar una variable, podrías usar el mismo nombre del formulario así te evitas de crear variables.

Código Delphi [-]
procedure TForm1.VerForm11Click(Sender: TObject);
begin
  Form2 := TForm2.Create (Application);
  try
   Form2.ShowModal;
  finally
   Form2.Free;
  end;
end;

Saluditos

FGarcia 25-09-2008 18:06:35

Hola!! Yo creo los formularios secundarios asi:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.create(Application) do
    try
      ShowModal;
    finally
      Free;
    end;
end;

Por otro lado creo que habria que explicarle a noob que al colocar un nuevo formulario en una aplicacion Delphi este automaticamente lo coloca para crearlo al iniciar la aplicacion, con el consecuente uso de recursos de la maquina.

Código Delphi [-]
 Application.CreateForm(TForm2, Form2);
 Application.CreateForm(TForm3, Form3);
 Application.CreateForm(TForm4, Form4);

y si queremos evitar eso entonces habria que evitar que se autocreen y crearlos y destruirlos cuando lo necesitemos tal como se lo han explicado.

¡¡Si me equivoco corrijanme!

¡¡Un saludo autocreado!!


¿parodiando a quien....?

coso 25-09-2008 19:53:43

????? ??????


La franja horaria es GMT +2. Ahora son las 21:16:16.

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