PDA

Ver la Versión Completa : Problemas al abrir un formulario


Mc_Hacks
14-12-2006, 21:41:37
hola miren mi problema es el siguiente tengo un menu en el cual tenco un item el que esta enlasado a un ActionList:TactionList en el cuan tenfo una categoria articulos y un i un action ProduAgrega que es su Evento :OnExecute invoco a ProduAgregaExecute

aca dejo el codigo que tengo en ese evento

procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin

wndAgregaArticulo.Show;

end;

el problema es que, cuando hago correr la aplicacion no me abre el Form que invoco en este caso wndAgregaArticulo. llevo dos semanitas recien en delphi asi que si alguien me puede orientar se le agradecera

delphi.com.ar
14-12-2006, 21:56:33
¿Has creado una instancia de ese form?... Recuerda que los forms son objetos del tipo TForm o derivados, que por defecto el IDE nos crea una variable con el nombre del form, para que hagamos referencia a ella pero no necesariamete esa variable contenga una instancia de la clase.
Hay varias formas de hacerlo, una de ellas es crear la instancia cada vez que la necesitemos:

procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin
wndAgregaArticulo := TwndAgregaArticulo.Create(Self);
wndAgregaArticulo.Show;
end;

En este caso tendríamos que hacer que el propio form se autodestruya cuando se cierre, utilizadon el parámetro Action del OnClose del form = caFree.

O podríamos hacer que el form se autocree cuando inicia la aplicación. (Siempre evaluando anteriormente el costo de esto). En el archivo del proyecto tendría que existir alguna línea como:

Application.CreateForm(TwndAgregaArticulo, wndAgregaArticulo);

Puedes configurar para que el IDE se encarge de agregar esta línea en forma automática para todos los forms y datamodules desde el menú: Tools \ Enviroment Options \ Designer \ Module creation Options \ Autocreate forms & data modules.

¿Por casualidad tu origen fue Visual Basic?...

Saludos!

Caral
14-12-2006, 22:03:28
Hola Mc_Hacks
Esencialmente lo mismo que dice delphi.com.ar

procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin
wndAgregaArticulo:=TwndAgregaArticulo.Create(self);
try
wndAgregaArticulo.ShowModal;
finally
wndAgregaArticulo.Free;
end;
end;
Lo crea y lo libera.
Saludos

Mc_Hacks
14-12-2006, 22:12:06
un no funciona probe el codigo de los dos y nada eso si ahora ubiu un avance con el codigo de Caral me abre el form pero me da un error en

wndAgregaArticulo.ShowModal;

que sera

Caral
14-12-2006, 22:34:04
Hola
Es curioso que necesites crear la aplicacion de un simple form, habria que ver como creas este form, si en tiempo de ejecucion o como.
Para abrir o mostrar un form basta con hacer un show de este, tambien dependiendo de si modificaste el project options.
Bueno, sigo insistiendo, es curioso, a mi nunca me ha ocurrido algo semejante.
Me parece, que deberias explicar como creaste el form, asi quedaria mas claro para otros foristas que vean este hilo.
Saludos

delphi.com.ar
14-12-2006, 22:42:37
Cuando "te da un error" es muy importante que nos cuentes el mensaje del error. ¿Será que estas llamando a una variable de una unit que no estas usando? ( uses Unit )

Caral
14-12-2006, 22:53:18
Hola Mc_Hacks
Esta es una suposicion:
Tenemos que llamar a un form, desde otro.
Si fuera el caso, intenta hacerlo desde un boton, a ver que pasa, me parece que por la sentencia que usas, hay algun otro procedimiento involucrado.
Insisto si es solo cuestion de llamar a un form, las sentencias tanto de delphi.com.ar, como la mia deberian funcionar.
Para mi el error lo da por que no se ha creado el form primero, en tiempo de ejecucion, no se digo.
Saludos

Mc_Hacks
14-12-2006, 23:33:21
gracias amigos he solucionado el problema a final use este codigo


procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin
wndAgregaArticulo := TwndAgregaArticulo.Create(Self);
wndAgregaArticulo.Show;
end;


ya que el de Caral me da error


procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin
wndAgregaArticulo:=TwndAgregaArticulo.Create(self);
try
wndAgregaArticulo.ShowModal; // (error)
finally
wndAgregaArticulo.Free;
end;
end;


lo que me faltaba era asociar el action en el item del mainmenu
muchas gracias por su ayuda se les agradece