Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Lo basico, Como llamar formularios desde otro formulario ? (https://www.clubdelphi.com/foros/showthread.php?t=78598)

sierraja 02-05-2012 22:27:38

Lo basico, Como llamar formularios desde otro formulario ?
 
Buenas tardes a todos, realmente lo basico es como dice el titulo pero no logro conseguir llamar a un formulario modal desde otro formulario. De que manera se puede hacer?

maeyanes 02-05-2012 22:30:04

Hola...

Código Delphi [-]
with TMyModalForm.Create(nil) do
  try
    ShowModal
  finally
    Free
  end


Saludos...

roman 02-05-2012 22:39:42

Y no olvides incluir la unidad del formulario modal en la unidad del formulario que llama.

// Saludos

dec 02-05-2012 22:55:11

Hola,

Y recuerda que lo puedes "complicar" y/o "adornar" de no pocas formas diferentes, por ejemplo, aquí un par de unidades, una correspondiente a un "formulario principal" y otra a un formulario "modal" cuya clase implementa una función "estática" que puede usarse para mostrar el formulario tal como quieres. Es sólo para ver que se pueden seguir cantidad de caminos para llegar al mismo sitio, aunque igual la solución propuesta por el compañero más arriba sea la idónea aquí por su sencillez.

Código Delphi [-]
unit UMainForm;

interface

uses
  Forms, Classes, Controls, StdCtrls;

type
  TMainForm = class(TForm)
    ShowMyModalFormButton: TButton;
    procedure ShowMyModalFormButtonClick(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  Windows, Dialogs, UMyModalForm;

procedure TMainForm.ShowMyModalFormButtonClick(Sender: TObject);
begin
  if TMyModalForm.ShowMeModal() = IDOK then
  begin
    ShowMessage( 'Accepted! ');
  end
  else
  begin
    ShowMessage( 'Canceled!' );
  end;
end;

end.

Código Delphi [-]
unit UMyModalForm;

interface

uses
  Forms, Controls;

type
  TMyModalForm = class(TForm)
  public
    class function ShowMeModal() : TModalResult;
  end;

var
  MyModalForm: TMyModalForm;

implementation

{$R *.dfm}

{ TMyModalForm }

class function TMyModalForm.ShowMeModal() : TModalResult;
begin
  with TMyModalForm.Create( nil ) do
  try
    result := ShowModal();
  finally
    Free();
  end;
end;

end.

:)

ecfisa 02-05-2012 22:55:44

Hola.


Modal: (Estando en Auto-create forms)
Código Delphi [-]
implementation

uses Unit2; // unidad del form a llamar

procedure TForm1.btnLlamarOtroFormClick(Sender: TObject);
begin
  Form2.ShowModal;
end;

(Sin auto-create)
Código Delphi [-]
implementation

uses Unit2; // unidad del form a llamar

procedure TForm1.btnLlamarOtroFormClick(Sender: TObject);
begin
  with TForm2.Create(Self) do
  try
    ShowModal
  finally
    Free
  end
end;

No modal: (Estando en Auto-create forms)
Código Delphi [-]
implementation
uses Unit2; // unidad del form a llamar

procedure TForm1.btnLlamarOtroFormClick(Sender: TObject);
begin
  Form2.Show;
end;

No modal: (Sin auto-create)
Código Delphi [-]
implementation

uses Unit2; // unidad del form a llamar

procedure TForm1.btnLlamarOtroFormClick(Sender: TObject);
begin
  Form2:= TForm2.Create(Self);
  Form2.Show;
  // Liberar despues de usarlo (Form2.Free), hacerlo aquí lo cerraría
end;
Si mal no recuerdo en un capítulo de La cara oculta de Delphi 4 se trata la creación y destrucción de formularios SDI y MDI con detalle.

Saludos.

Edito: De echo el último modo que sugiere Dec es el que mayormente uso.

sierraja 02-05-2012 23:36:24

Bastante claro
 
Hola a todos, ok me quedo bastante claro. Gracias por aclararme este episodio. Solo una pregunta mas: Para liberarlo totalmente de la memoria usando sin auto-create y modal, como dice el amigo ecfisa, tan solo utilizar Free y mas nada? :D para asegurarme...

dec 03-05-2012 00:09:07

Cita:

Empezado por sierraja (Mensaje 431634)
Hola a todos, ok me quedo bastante claro. Gracias por aclararme este episodio. Solo una pregunta mas: Para liberarlo totalmente de la memoria usando sin auto-create y modal, como dice el amigo ecfisa, tan solo utilizar Free y mas nada? :D para asegurarme...

Así es. Básicamente, cuando tú creas un objeto, tú eres el responsable de destruirlo. ¿Cuándo? Generalmente, cuando ya no te sea necesario. De todas formas, al crear un objeto, normalmente, su constructor te permite asignarle un "padre", y, si así haces, el propio "padre" se encargará de eliminar el objeto en cuestión, si tú no lo haces antes. Por ejemplo:

Código Delphi [-]
Form2 := TForm2.Create(Form1);

Arriba "Form2" es creado y después se le asigna como padre a "Form1". Desde ese momento "Form1" se encargará de destruir el objeto cuando ya no sea necesario, insisto, si tú no lo haces antes. Por el contrario, cuando escribes algo como lo siguiente:

Código Delphi [-]
Form2 := TForm2.Create( nil );

... no estás asignando ningún "responsable" ("padre") a "Form2", de manera que tú eres el encargado de destruir a "Form2". ¿Cuándo? Como dijimos antes, generalmente, cuando ya no te sea necesario.

sierraja 03-05-2012 00:35:53

Bastante Claro Parte II
 
Nuevamente muchas gracias, excelente. Muchas gracias....:D


La franja horaria es GMT +2. Ahora son las 07:31:02.

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