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 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Arreglo de formularios, no se por que no funciona mi codigo :(

Holas que tal, expongo mi problema el cual en teoria esta bien planteado pero no se por que no funciona, lo que requiero es al crear un formulario, que se carguen todos los nombres de los formularios que uso dentro de un arreglo para despues trabajar con los formularios, declaro de esta forma los formularios dentro de un arreglo:

Cita:
public
Forms : array[0..6] of Tform;

//en el Oncreate del form princiopal, se genera el array con todos los forms, dentro:
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin

Forms[0]:= frmUsuarios;
Forms[1]:= frmGasolineros;
Forms[2]:= frmEstaciones;
Forms[3]:= frmDepartamentos;
Forms[4]:= frmServiciosCategorias;
Forms[5]:= frmServicios;
Forms[6]:= frmTickets;
end;


y lo que pretendo hacer despues, ya une vez creado el arreglo con los nombre de mis formularios, lo que quiero es:

crear formularios, clientes, departamentos, servicios... etc etc etc

pero solo requiero un formulario activo, si un formulario esta creado, y si le doy de nuevo al boton para que se cree ese mismo formulario hago que se muestre, que resalte de nuevo el formulario ya creado, pero si quiero crear un formulario aparte del que tengo, la idea es que se elimine el anterior y me cree el nuevo.

si tengo formClientes creado, al darle al boton para que me cree el formDepartamentos, la idea es que elimine primero el formclientes, y se cree unicamente el formDepartamentos, para ello primero lo que intente fue saber que formulario estaba creado para eliminarlo y despues crear el nuevo y este fue mi codigo:

Cita:
var
i : integer;
begin
for i := 0 to 6 do
begin
//SI NO ESTA CREADO, QUE NO HAGA NADA
if not Assigned(Forms[i]) then
begin
//NO HACE NADA
end
else
{PERO SI YA ESTA CREADO UN FORMULARIO DIFERENTE, ENTONCES QUE SE ELIMINE, CON ELLO PRETENDO QUE SE ELIMINEN TODOS LOS FORMULARIOS QUE ESTEN ANTERIORMENTE ABIERTOS, CUALQUIERA QUE SEA, POR ESO USO EL CICLO FOR PARA QUE HAGA UN RECORRIDO EN TODOS}
Forms[i].Close;
end;
end;
entonces esa es mi idea, determinar cual esta creado y me lo elimine, y si es que ya esta creado, que lo resalte, Onshow, eso es lo que hago, pero mi problema como les decia, es que nombrando:

Forms[i]

nunca me lo toma como un formulario, en el Forms[i] deberian de estar todos los nombres de los formularios pero al parecer no lo estan, entonces no me cierra ni uno y se abren todos los formularios sin cerrarse los anteriores ya abiertos, bueno espero me puedan ayudar, a determinar si esta bien arreglo declarado, y saber por que nome elimina todos los formularios anteriores ya abiertos.
Responder Con Cita
  #2  
Antiguo 23-08-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No he entendido muy bien, pero creo que estás intentado volver a crear la rueda.
Lo veo con más calma y te comento...
Responder Con Cita
  #3  
Antiguo 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
xD volviendo a crear la rueda? xD pues como decia, lo unico que quiero es tener un formulario activo, si anterior mente ya hay uno abierto, eliminarlo, y para no nombrar los formularios uno por uno, hice un ciclo for, sobre un arreglo que tiene todos los nombres ya cargados, pero al parecer ese arreglo no me toma los nombres, por qu eal hacer la comparacion de nombres, en otro codigo que hice, nunca lo pude echar a andar, y ahora que quiero determinar con el Assigned, si un form esta creado de nuevo no me toma los nombres del arreglo , espero me puedan orientar, por que quisiera hacerlo de esa forma es mas simple, pero no me ha funcionado
Responder Con Cita
  #4  
Antiguo 23-08-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...

Para empezar, ¿que son frmUsuarios, frmGasolineros, etc.? ¿Son nombres o variables?

Si en el arreglo Forms quieres guardar las referencias a a los formularios que estás usando, tienes que hacer la asignación correspondiente al crear un formulario nuevo:

Código Delphi [-]
Forms[0] := TfrmUsuarios.Create(nil);
Forms[1] := TfrmGasolineros.Create(nil);

Y al destruir alguno de los formularios tienes que asignarle un valor nil:

Código Delphi [-]
Forms[0] := nil; // Ya destruí el formulario TfrmUsuarios



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #5  
Antiguo 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ok maeyanes, declarare los forms como lo mencionas y comento los resultados, por eso expongo mis dudas en el foro y disculpen si suena algo tontas a veces mis preguntas, pero ustedes tienen mayor experiencia muchas gracias, comento en un momento los resultados, saludos
Responder Con Cita
  #6  
Antiguo 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
por alguna razon, se iniciaba por default, un formulario, y cuando queria comprobar antes de crear un formulario si habia algun otro creado para cerrarlo me genero un error de acces violation :S, por el momento no me sirvio el codigo de maeyanes,
Responder Con Cita
  #7  
Antiguo 23-08-2011
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Porque mejor no creas la aplicacion como mdi de esa forma ya puedes tratar los formularios hijos como si estuviesen en un arreglo (mdichild[index]).
Responder Con Cita
  #8  
Antiguo 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
si siempre y cuando sea MDI y me parece buena idea, y he trabajado con MDI's pero el problema es que este programa que realizo no requiere MDI, de hecho las estoy haciendo funcionar usando el parent, para que se anexe dentro de un panel, y se muestre dentro de los limites de la forma.

lo que se me acaba de ocurrir, es como podria eliminar los formularios, con alguna propiedad, o con el tag intente pero no funciona, anteriormente me habian proporcionado un codigo para visualizar varios botones, lo intente agregar pero para cerrar el formulario, pero el problema es que no me funciono asi

y no se como cerrar varios formularios,


la idea sigue siendo la misma

1.- //Cerrar todos los formularios abiertos, si no hay ni uno abierto entonces
no hace nada

2.- llamo un formulario, si no esta creado, lo creo
- si esta creado, solo lo muestro, onshow

eso es todo, pero como son varios formularios, quiero determinar por un ciclor for o como sea, recorrer todos los formularios y determinar si esta creado, cerrarlo si es que se abrira un formulario diferente
Responder Con Cita
  #9  
Antiguo 23-08-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...

Si solo necesitas tener un solo formulario abierto a la vez, puedes usar una variable que indique cual es el formulario actual:

Código Delphi [-]
var
  CurrentForm: TForm;

// Al inicial la aplicación, tal vez en el evento FormCreate del formulario principal:
begin
  CurrentForm := nil;
end;

// Creas un formulario, desde un evento OnClick de un menú o algún botón:
begin
  if Assigned(CurrentForm) then
    CurrentForm.Free; // Lo destruyes
  CurrentForm := TfrmUsuarios.Create(nil); // Creas el formulario y lo asignas a CurrentForm
  // Demás inicializaciones...
end;

Este es un ejemplo rápido y podría no funcionar del todo bien, pero te puede dar una idea de como hacerlo.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #10  
Antiguo 23-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
perfecto maeyanes, ya quedo todo listo muchas gracias y si era cierto, tuve que crear un panel mejor, y el formulario lo puse como AlClient, asi podia destruir rl panel y bueno practicamente era lo mismo que me dijiste, pero con tu idea se me facilito todo, gracias, tenia la idea pero no la podia plasmar saludos y gracias de nuevo xD
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
codigo comun entre distintos formularios federiconqn21 Varios 5 27-11-2007 16:22:11
Error en codigo, ¿como lo arreglo? jorgegetafe Varios 8 13-02-2007 16:02:30
No me funciona el código de ordenar campos por titulo Nbull Conexión con bases de datos 1 10-04-2006 18:52:15
Codigo Printer no me funciona JOMABRI Impresión 0 11-06-2004 21:51:15
Por que no funciona este codigo en XP? kia Varios 3 15-10-2003 21:39:33


La franja horaria es GMT +2. Ahora son las 22:27:18.


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