Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Problema con TPageControl Dinamico (https://www.clubdelphi.com/foros/showthread.php?t=52932)

NeoAnderson 05-02-2008 06:10:58

Problema con TPageControl Dinamico
 
Hola a todos, soy nuevo en Club Delphi y me uni pk este es probablemente el sitio con mayor informacion y ayuda disponible, pero bueno, ire al grano.

Uso Delphi 7 y estoy haciendo un programa de edicion de imagenes en donde el objetivo es que se puedan abrir cualquier numero de imagenes al mismo tiempo y su manipulacion sea independiente una de otra.

Tengo un Form "TFMain" para la interfaz principal, y en este Form tengo Un PageControl1 (donde se creará un tabSheet por cada imagen que abra).
Aparte tengo un Form "TFImagen" que contiene un TImage (para alojar a la imagen) y las funciones que se aplicaran a esa imagen.

En "TFMain" tengo un boton abrir que lo que hace es crear un nuevo tabSheet en PageControl1 y en este tabsheet se aloja un nuevo Form del tipo TFImagen. Esto lo hago con el siguiente codigo que no recuerdo donde encontre, pero funciona bien.

Código Delphi [-]
   
   //Crear un nuevo tab sheet
   tabSheet := TTabSheet.Create(PageControl1) ;
   tabSheet.PageControl := PageControl1;

   //crear un nuevo form  
   aForm := TFImagen.Create(tabSheet) ;
   aForm.Parent := tabSheet;
   aForm.Align := alClient;
   aForm.BorderStyle := bsNone;
   aForm.Visible := true;
   tabSheet.Caption := aForm.Name;

   //activate the sheet
   PageControl1.ActivePage := tabSheet;

Lo anterior lo tiene un boton en TFMain, pero digamos que tengo otro boton con el cual pretendo ejecutar la funcion "x" que está en "TFImagen", y he ahi el problema, cómo puedo acceder a esta funcion si el tabSheet fue creado dinamicamente???

He probado PageControl1.ActiveSheet.etc, pero no encuentro nada que me permita acceder a la funcion que está en otro form que fue creado dinamicamente.
Espero haberme explicado claro y no confundirlos mucho. y ojalá me puedan dar una ayuda, que me empieza a desesperar el asunto, de antemano gracias.

keyboy 05-02-2008 07:13:08

Algo sencillo e inmediato pudiera ser:

Código Delphi [-]
(PageControl1.ActivePage.Controls[0] as TFImagen).funcion(...)

suponiendo que el formulario es el primer control que insertas en la ficha.

Algo más elaborado, pero más prolijo, podría ser crear un derivado de TTabSheet que se encargue de crear el formulario y exponerlo como una propiedad pública:

Código Delphi [-]
type
  TMyTabSheet = class(TTabSheet)
  private
    FForm: TFImagen;

  public
    property Form: TFImagen read FForm;
    constructor Create(AOwner: TComponent); override;
  end;

{ TMyTabSheet }

constructor TMyTabSheet.Create(AOwner: TComponent);
begin
  inherited;

  FForm := TFImagen.Create(Self) ;
  FForm.Parent := Self;
  FForm.Align := alClient;
  FForm.BorderStyle := bsNone;
  Caption := FForm.Name;
end;

Crearía las fichas así:

Código Delphi [-]
var
  tabSheet: TMyTabSheet;

begin
  //Crear un nuevo tab sheet
  tabSheet := TMyTabSheet.Create(PageControl1) ;
  tabSheet.PageControl := PageControl1;

  //Mostrar el nuevo form
  tabSheet.Form.Visible := true;

  //activate the sheet
  PageControl1.ActivePage := tabSheet;
end;

Ahora puedes referirte al formulario y sus métodos y propiedades usando la propiedad Form del TabSheet, por ejemplo:

Código Delphi [-]
(PageControl1.ActivePage as TMyTabSheet).funcion(...)

Bye

jachguate 05-02-2008 07:30:48

Cita:

Empezado por NeoAnderson (Mensaje 263446)
Hola a todos, soy nuevo en Club Delphi

Hola. En primer lugar, bienvenod@ al club. Te recomiendo una lectura de la guia de estilo.

También que aprendas a usar la etiqueta delphi, misma que he añadido a tu mensaje original y que nos sirve para publicar trozos de código.

Disfruta de los foros!

Un saludo.

;)

NeoAnderson 05-02-2008 21:07:47

Problema Solucionado!
 
Todo un mago keyboy, mil gracias!, ambas soluciones funcionan perfectamente, pero me quedo con la segunda por que se adapta mejor para usos futuros, unicamente quiero agregar que en lugar de ir
Código Delphi [-]
(PageControl1.ActivePage as TMyTabSheet).funcion(...)
debe ser:

Código Delphi [-]
(PageControl1.ActivePage as TMyTabSheet).Form.funcion(...)
de esta manera ya puedo acceder a todas las funciones y propiedades del formulario "TFImagen"
Gracias nuevamente! :rolleyes:


La franja horaria es GMT +2. Ahora son las 15:08:23.

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