Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con Activar MDIChid (https://www.clubdelphi.com/foros/showthread.php?t=70615)

ricardo_yah 31-10-2010 02:19:08

Problemas con Activar MDIChid
 
hola amigos, saludos desde cancun y tengo dos años manejando visual fox pero fox creo que esta en sus ultimos dias y eliji delphi para crear mis aplicaciones pero como todo principiante, miren tengo un problema creo mi form pero supongamos que quiero crear otro en vez de que me lo cree quisiera que me active el form que antes cree he buscado la solucion en el manual y no habla nada al respecto, he buscado por la red pero nada espero que ustedes me pueddan ayudar. este es el codigo que uso

procedure TForm1.NuevaFactura1Click(Sender: TObject);
var MyChildForm: Tform2;
begin
if not Existe('Form2') then
begin
MyChildForm:=tform2.Create(self);
end else

aqui es donde quisiera que me maximizara mi form2 antes creado

end;

espero que me puedan ayudar
de antemano graciasss...

ecfisa 31-10-2010 11:56:24

Hola ricardo_yah.

Una forma práctica de hacerlo es usando referencia de clase. La siguiente función crea el Form si no existe, o lo muestra si está creado:
Código Delphi [-]
procedure TForm1.MostrarChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= 0 to Screen.FormCount -1 do  // 0 hasta MDIChild abiertos
    if Screen.Forms[i] is AClass then  // Si está el que buscamos
    begin
      Screen.Forms[i].WindowState:= wsNormal; // a modo normal
      Screen.Forms[i].BringToFront;           // traerlo al frente
      Exit;                                   // encontrado, salir
    end;
  with AClass.Create(Self) do Show;           // crearlo
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  MostrarChild(TForm2);
  // MostrarChild(TOtroForm);
  // MostrarChild(...
end;

Saludos. :)

ricardo_yah 01-11-2010 00:26:23

Hola amigo,
 
hola amigo gracias por responder
mira entiendo el proceso pero me marca un error en

procedure TForm1.MostrarChild(AClass: TFormClass);

me Tform1 no contiene un componene llamado mostrarchild


tambien me marca un error en

with AClass.Create(Self) do Show;

identificador (self) no declarado

no se si es por la version de delphi tengo xe

gracias y disculpa la molestia

ecfisa 01-11-2010 01:40:56

Hola ricardo_yah.

Ese error surge por que te falta declarar la cabecera de la función MostrarChild en la Clase TForm1, o por que la clase del Form no se llama TForm1.

Te pongo el código completo el cuál acabo de probar para pegarte el ejemplo y funciona perfectamente:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure MostrarChild(AClass: TFormClass);  // declaracion que te falta
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses Unit2; // unidad donde está declarado TForm2

procedure TForm1.MostrarChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= 0 to Screen.FormCount -1 do  // 0 hasta MDIChild abiertos
    if Screen.Forms[i] is AClass then  // Si está el que buscamos
    begin
      Screen.Forms[i].WindowState:= wsNormal; // a modo normal
      Screen.Forms[i].BringToFront;           // traerlo al frente
      Exit;                                   // encontrado, salir
    end;
  with AClass.Create(Self) do Show;           // crearlo
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MostrarChild(TForm2);
end;

end.

Por supuesto que TForm1 tiene que estar como fsMDIForm y Form2 como fsMDIChild respectivamente. Y si no se llamasen TForm1 y TForm2, cambiar los nombres por los que les hayas asignado.

Es conveniente (aunque no necesario) que quites el Form MDIChild de la creación automática de forms:
Project -> Options -> Forms -> Auto-create forms


Saludos. :)

ricardo_yah 01-11-2010 03:44:14

funciono ecfisa
 
gracias ecfisa y disculpa las molestias funciono perfectamente el codigo
y te agradesco la aclaracion ya que como mencione estoy empezando con delphi y ese tipo de aclaraciones me ayudara en lo sucesivo me ayudara.

Mil Gracias.................

ecfisa 01-11-2010 03:51:30

De nada, me alegra haber podido ayudarte.

Saludos. :)


La franja horaria es GMT +2. Ahora son las 17:55:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi