Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   llamar a procedimientos desde otro form (https://www.clubdelphi.com/foros/showthread.php?t=35256)

David 05-09-2006 18:34:33

llamar a procedimientos desde otro form
 
Hola

tengo un form childMDI , que esta heredado de otro . En la creación del formulario tengo el siguiente código :

Código Delphi [-]
procedure TFormDatos.FormCreate(Sender:TObject);
begin

  inherited;

  PageControl.ActivePage := TabSheet1;
  TabSheet2.TabVisible := False;
  Caption := 'xselelsee........';

end;

Pero quiero , quitar el código del FormCreate y ponerlo en la ventana principal de la aplicacion MDIForm , para que llamando a esta formulario después de crearlo me haga el código que he puesto .

Tengo en el formulario principal , un código de creación de la ventan MDI y luego e intentado poner algo así

Código Delphi [-]

TFormDatos.Lanzar ; // aquí se crea la aplicación

// El código que pongo acontinuación me da error , No al compilar si al ejecutar

with formDatos do
begin
  PageControl.ActivePage := TabSheet1;
  .......................
end;

ixMike 05-09-2006 19:09:20

Bueno, me parece que no te he entendido muy bien, pero creo que puede ser una cosa...

Si FormDatos es la ventana hija (MDIChild), antes de hacer nada con ella tienes que crearla (si no se crea automáticamente, míralo en Project|Option|Forms). Es algo así:

Código Delphi [-]
FormDatos:=TFormDatos.Create(Self);
With FormDatos do
  begin
  PageControl.ActivePage:=TabSheet1;
  {...}
  end:;

Por supuesto, asegúrate de que se destruye (en el evento OnClose del MDIChild pon "Action:=caFree;");

Si pudieras explicarlo un poco mejor, igual te podría ayudar más... y un consejo: ponle nombre a todos los componentes que manejes por código (PageControl, TabSheet1...).

yusnerqui 05-09-2006 19:13:09

Lo que te dice el amigo ixMike es sierto, por otra parte, creo que deberías publicar un poco más detallado tu código de creación, quizás estes olvidando algo en el mismo.

saludos

yusnerqui

David 05-09-2006 19:38:06

Pongo la función lanzar , que esta en el formulario , del cual derivan los MDI.

Asi pues TFormDatos viene de TFormPadre ,

type
TFrmGCobrosPagos = class(TFrmMaestros)

Código Delphi [-]
class Function TFormPadre.Lanzar : TFormPadre;
var
 i : integer;
 f: TForm;
begin
    For i := Screen.FormCount -1 downto 0 do
    begin
        F := Screen.Forms[i];
        if F.ClassType = self then
            begin
                if F.WindowState <> wsMAximized then
                    F.WindowState := wsMaximized;
                    Result := TFormPadre(F);
                    Exit;
            end
            else  if F.FormStyle = fsMDIChild then
                F.Close;

    end;

    Result := self.Create(Application);
end;

El resto del código ya lo he puesto . El formulario se crea sin problemas , eso no tiene ningún error .

Cuando pongo

TFormDatos.Lanzar;

Se crea el MDIChild y no hay ningún error , así se crean todos los formularios y no da error .

El Error esta cuando pongo el código que he puesto antes , el siguiente

Código Delphi [-]
with formDatos do
begin
  PageControl.ActivePage := TabSheet1;
  .......................
end;

David 05-09-2006 19:45:01

Depurando me he dado cuenta de que falla en sólo cuando llega a :

PageControl.ActivePage := TabSheet1;
TabSheet2.TabVisible := False;

maeyanes 05-09-2006 22:52:01

Y que mensaje de error te da?

DarKraZY 06-09-2006 00:31:42

Hola!!

Se supone que escribes

Código Delphi [-]
begin
  //  ...
  TFormDatos.Lanzar;
  // ...
  with formDatos do
  begin
    PageControl.ActivePage := TabSheet1;
    // ...
end;

Ahí está el programa ya que el método de clase que utilizas (TFormDatos.Lanzar) debería guardar el formulario que crea en una variable.

Creo que debería de ser así:

Código Delphi [-]
var
  formDatos: TFormDatos;
begin
  //  ...
  formDatos: TFormDatos.Lanzar;
  // ...
  with formDatos do
  begin
    PageControl.ActivePage := TabSheet1;
    // ...
end;

Esto es lo que ya te ha contestado ixMike, pero creo que debería funcionar ;)

David 06-09-2006 16:24:37

Si pongo el anterior código me da error , ya que el formulario esta heredado y no puedo ponerle la variable , no me deja compilar .

como yo lo he puesto , me deja compilar ,no me da error , pero al ejecutar el programa me da este error :

http://img168.imageshack.us/img168/641/delphiqq7.jpg

David 06-09-2006 18:28:12

Ya lo he resuelto , con este código :

Código Delphi [-]
TFormDatos.Lanzar;

       with (ActiveMDIChild as TFormDatos) do
       begin

            // Aquí el código
       end;


La franja horaria es GMT +2. Ahora son las 20:39:46.

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