Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2011
Avatar de granodetoro
granodetoro granodetoro is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 71
Poder: 14
granodetoro Va por buen camino
Red face evitar que un mdichlid se repita mas de 1 vez

hola de nuevo se que puse este tema en c++ y perdon era aqui disculpen, bueno tengo un form1 con formstyle:MDIform y puse un menu principal y dentro de este menuprincipal ahy una opcion que dice formulario 1 y cuando damos clic , llama a otro formulario que es form2 con formstyle:MDIchild y resulta que si sigo dando clic se repite form2 y si damos clic denuevo sigue apareciendo...bueno quiero que solo pueda aparecer una vez ...ayuda
Responder Con Cita
  #2  
Antiguo 25-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mmmm lo que yo hago es deshabilitar la opcion del menu cosa que ya no puedo escogerla de nuevo

En el create del formulario que llamo
mnuOpcion.Enable := False;

y al salir
mnuOpcion.Enable := True;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 25-04-2011
Avatar de granodetoro
granodetoro granodetoro is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 71
Poder: 14
granodetoro Va por buen camino
no entiendo bien me puedes explicar mejor amigo
Responder Con Cita
  #4  
Antiguo 25-04-2011
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 granodetoro.

Existen varias maneras de lograrlo, te pongo dos formas:
Código Delphi [-]
function TMDIForm.AssignedMDI(AName:String): boolean;
var
  i: integer;
begin
  Result:= False;
  for i:= 0 to MDIChildCount - 1 do
    if MDIChildren[i].Name = AName then Result:= True
end;

Llamada:
Código Delphi [-]
begin
 if AssignedMDI('MDIChild1') then
    MDIChild1.BringToFront
  else
    MDIChild1:= MDIChild1.Create(nil);
end;

Otro forma:
Código Delphi [-]
procedure TForm1.MostrarChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= 0 to Screen.FormCount -1 do  
    if Screen.Forms[i] is AClass then  
    begin
      Screen.Forms[i].WindowState:= wsNormal; 
      Screen.Forms[i].BringToFront;           
      Exit;                                   
    end;
  with AClass.Create(Self) do Show;           
end;

Llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  MostrarChild(TMDIChild1);
end;


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 25-04-2011
Avatar de granodetoro
granodetoro granodetoro is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 71
Poder: 14
granodetoro Va por buen camino
Thumbs up

muchas gracias si en esto se pudiera regalar puntos de mi parte tuvieras 1000
ecfisa
'great premium user'
Responder Con Cita
  #6  
Antiguo 25-04-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
saludos.

puedes preguntar por si tiene valor nil
Código Delphi [-]
 
if form2=nil then
begin
application.createform(tform2,Form2);
form2.show;
end;
Responder Con Cita
  #7  
Antiguo 25-04-2011
Avatar de granodetoro
granodetoro granodetoro is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 71
Poder: 14
granodetoro Va por buen camino
y donde pongo el codigo me olvide preguntar
Responder Con Cita
  #8  
Antiguo 25-04-2011
Avatar de granodetoro
granodetoro granodetoro is offline
Miembro
NULL
 
Registrado: mar 2011
Posts: 71
Poder: 14
granodetoro Va por buen camino
Talking

begginer oye muchisimas gracias tu ejemplo tambien me funciono
Responder Con Cita
  #9  
Antiguo 25-04-2011
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
Cita:
Empezado por granodetoro Ver Mensaje
y donde pongo el codigo me olvide preguntar
El código va en el MDIForm, que por supuesto debe incluir las unidades que definen las ventanas MDIChilds.



Otra opcion es que sea el propio MDIChild quién verifique su existencia, para eso debes usar métodos de clase.
Código Delphi [-]
unit Unit2;
....
type
  TMDIChild = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
  private
  public
    class procedure MostrarChild;
  end;

var
  MDIChild: TMDIChild;

implementation 

class procedure TMDIChild.MostrarChild;
begin
  if not Assigned(MDIChild) then
     MDIChild:= TMDIChild.Create(nil);
  MDIChild.Show;
end;

procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

procedure TMDIChild.FormDestroy(Sender: TObject);
begin
  MDIChild:= nil; // necesario, evita repetir la creacion en MostrarChild
end;
end.

Y llamarlo desde el MDIForm de este modo:
Código Delphi [-]
uses Unit2;
....
begin
   TMDIChild.MostrarChild;
end;
En todos los casos tenés que quitar las ventanas hijas de auto-create forms.

Y otra, a mi gusto la mejor, es usar un patrón Singleton. Si buscas con ese término, hay mucho redactado al respecto .


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 26-04-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Solo para comentar que usar el método Show de un formulario con la propiedad FormStyle igual a fsMDIChild, es innecesario, ya que este tipo de formularios tiene su propiedad Visible en True, por lo que se muestra automáticamente al crearse.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
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
como evitar que un formulario MDICHILd se repita cada ves que lo llamo granodetoro C++ Builder 7 30-03-2011 01:59:55
Evitar nulos HectorMendez SQL 3 24-11-2007 17:16:03
generar numero de 9 cifras aleatorio que nunca se repita coletaun Varios 9 19-02-2007 10:34:29
controlar que un artículo que exista no se repita josejose Varios 2 17-01-2007 19:27:04
Evitar KeyViolation Ing Harry Conexión con bases de datos 10 11-06-2005 00:10:01


La franja horaria es GMT +2. Ahora son las 19:53:53.


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