Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas al abrir un formulario (https://www.clubdelphi.com/foros/showthread.php?t=38445)

Mc_Hacks 14-12-2006 21:41:37

Problemas al abrir un formulario
 
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

Código:

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:
Código Delphi [-]
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:
Código Delphi [-]
  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
Código Delphi [-]
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

Código Delphi [-]
procedure TwndPrincipal.ProduAgregaExecute(Sender: TObject);
begin
  wndAgregaArticulo := TwndAgregaArticulo.Create(Self);   
  wndAgregaArticulo.Show; 
end;

ya que el de Caral me da error

Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 16:49:13.

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