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 03-12-2015
scigliano scigliano is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 10
Poder: 0
scigliano Va por buen camino
Manipular PageControl en Form heredado

Hola, un saludo a todos...

Tengo un formulario base (UBaseForm), donde guardo los procedimientos y funciones que más utilizo en otros form. Por una consulta que realicé en días pasados aquí en el club, decidí trabajar con "Herencia", he estado leyendo y documentándome al respecto, ya que soy novato en ese tema.

El punto es que necesito manipular las pestañas de un PageControl en un formulario heredado desde el formulario base, pero hasta el momento no he tenido éxito.

Me explico: Tengo un procedimiento en el formulario base al que le paso como parámetros el nombre de un campo y la pestaña donde se encuentra, para que lo muestre y le pase el foco.

A continuación les muestro lo que llevo hecho, para que me orienten.

En la primera prueba, definí el PageControl en la sección Interface/Var, no da error, pero al ejecutar el procedimiento no muestra la pestaña que requiero.

Código Delphi [-]
unit UBaseForm;

interface

uses
  vcl.ComCtrls, ....

type
  TBaseForm = class(TForm)
  .
  .

var
   BaseForm: TBaseForm;
   //******************************************
   //*** OPCION 1: DECLARACION DEL PAGECONTROL
   //******************************************
   PageControl1: TPageControl;

implementation

procedure TBaseForm.MostrarEdit(NameCampo:TEdit ; NameSheet:TTabSheet);
begin
   //*** Activa la pestaña
   PageControl1.ActivePage := NameSheet;
   //*** Pasa el foco al campo
   NameCampo.SetFocus;
   Abort;
end;

En la segunda prueba, definí el PageControl en la sección Var dentro del procedimiento, tampoco da error, pero al ejecutar el procedimiento no muestra la pestaña que requiero.

Código Delphi [-]
unit UBaseForm;

interface

uses
  vcl.ComCtrls, ....

type
  TBaseForm = class(TForm)
  .
  .

var
   BaseForm: TBaseForm;

implementation

procedure TBaseForm.MostrarEdit(NameCampo:TEdit ; NameSheet:TTabSheet);
var
   //******************************************
   //*** OPCION 2: DECLARACION DEL PAGECONTROL
   //******************************************
   PageControl1: TPageControl;
begin
   //*** Activa la pestaña
   PageControl1.ActivePage := NameSheet;
   //*** Pasa el foco al campo
   NameCampo.SetFocus;
   Abort;
end;

Para llamar al procedimiento desde el form heredado, utilizo la siguiente instrucción:
Código Delphi [-]
MostrarEdit(TxtCodigo,TabSheet1);

Al no poder ejecutarse el SetFocus en la pestaña requerida, obviamente aparece el mensaje:
"Cannot focus a disabled or invisible windows"

Qué me falta definir o declarar ?

Gracias anticipadas por sus comentarios...
Responder Con Cita
  #2  
Antiguo 03-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Eso es porque la variable PageControl1 que tenes declarada "no es quien tu crees que es"

Estas referenciando a un TPageControl que ni siquiera fue creado; no es el PageControl de tu formulario

Tenes dos alternativas:

1. Recorrer los controles del form, y buscar el PageControl

Código Delphi [-]
// se podria extender pasando como parametro el nombre...
// esta funcion te retorna el primero que encuentra
function TBaseForm.FindPageControl: TPageControl;
var
  I: Integer;
begin
  for I := 0 to ControlCount - 1 do
  begin
    if Controls[i] is TPageControl then
      Exit(Controls[i] as TPageControl);
  end;

  raise Exception.Create('PageControl no encontrado');
end;

2. Tener el PageControl como parametro

Código Delphi [-]
procedure TBaseForm.MostrarEdit(AEdit: TEdit ; APageControl: TPageControl; NameSheet: TTabSheet);
begin
  APageControl.ActivePage := NameSheet;
  AEdit.SetFocus;
end;

No tengo Delphi a mano ahora, pero si mal no recuerdo, los TTabSheet tienen en algun lado una referencia al PageControl; si no es explicito (propiedad de tipo TPageControl) deberia poder obtenerse haciendo:

Código Delphi [-]
  APageControl := NameSheet.Parent as TPageControl;

Por otro lado, porque tenes llamadas al procedimiento Abort? Sabes para que sirve eso?
Responder Con Cita
  #3  
Antiguo 03-12-2015
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
Hola

Disculpa pero no me quedo muy claro.

El pagecontrol pertenece al formulario base????
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #4  
Antiguo 03-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola scigliano.

Seguramente te va a resultar interesante lo tratado sobre herencia visual en este libro.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Manipular TEdit de un Form desde una Unit scigliano Varios 3 01-12-2015 21:38:55
Redefinir procedure OnShow en form heredado. Walterio OOP 3 11-09-2012 17:46:25
Problemas al manipular form reivaj_bo Varios 1 16-11-2009 16:28:35
Como puedo abrir un form en un PageControl marcoev OOP 7 05-09-2008 18:41:38
¿se puede manipular el componente PageControl? Nelly Varios 3 06-01-2006 19:51:15


La franja horaria es GMT +2. Ahora son las 20:06:43.


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