Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-10-2010
ricardo_yah ricardo_yah is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 13
Poder: 0
ricardo_yah Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 31-10-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
Responder Con Cita
  #3  
Antiguo 01-11-2010
ricardo_yah ricardo_yah is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 13
Poder: 0
ricardo_yah Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 01-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.

Última edición por ecfisa fecha: 01-11-2010 a las 01:45:37.
Responder Con Cita
  #5  
Antiguo 01-11-2010
ricardo_yah ricardo_yah is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 13
Poder: 0
ricardo_yah Va por buen camino
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.................
Responder Con Cita
  #6  
Antiguo 01-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
De nada, me alegra haber podido ayudarte.

Saludos.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Activar Boton agustin173 Varios 8 03-07-2010 01:27:10
Activar con voz Pablo Carlos Varios 3 22-05-2010 18:12:01
Activar el salvapantallas azulin API de Windows 6 14-11-2008 13:21:03
Activar formulario pabliyo Gráficos 1 07-04-2008 12:06:28
Activar los Componetes Ado.Net BuenaOnda Conexión con bases de datos 0 02-08-2006 15:57:35


La franja horaria es GMT +2. Ahora son las 05:09:10.


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