Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Crear TabSheet en un PageControl en tiempo de ejecución
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Crear TabSheet en un PageControl en tiempo de ejecución

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Crear TabSheet en un PageControl en tiempo de ejecución Responder citando

Estoy desarrollando una aplicación de facturación y contabilidad, tengo un formulario con un PageControl, lo que quiero es poder crear por código tantas pestañas o solapas (TabSheet) como sean necesarias en tiempo de ejecución, no de diseño.

¿Cómo puedo crear TabSheet en un PageControl en tiempo de ejecución, por código?
MensajePublicado:
Mie Abr 21, 2010 8:16 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución Responder citando



Anuncios



varios escribió:
Estoy desarrollando una aplicación de facturación y contabilidad, tengo un formulario con un PageControl, lo que quiero es poder crear por código tantas pestañas o solapas (TabSheet) como sean necesarias en tiempo de ejecución, no de diseño.

¿Cómo puedo crear TabSheet en un PageControl en tiempo de ejecución, por código?


Puedes utilizar el siguiente código fuente en Delphi para crear pestañas nuevas en un PageControl por código:

Código:

procedure crearTabSheet (pagControlPantalla);
var
  tabTmp : TTabSheet;
begin
  //Creamos el objeto TabSheet
  tabTmp := TTabSheet.Create(tabTablas);
  //asignamos al TabSheet el PageControl
  tabTmp.PageControl := pagControlPantalla;
  tabTmp.Name := 'tabSheet' +
      inttostr(pagControlPantalla.PageCount);
  tabTmp.Caption := tabTmp.Name;

  //mostramos la pestaña (TabSheet)
  tabTmp.Visible := true;
  tabTmp.Show;
end;


La forma de uso del procedimiento (procedure) anterior sería:

Código:

  crearTabSheet (nombrePageControl);


Donde:

* NombrePageControl: será el componente PageCotrol que tengamos en el formulario.
MensajePublicado:
Mie Abr 21, 2010 8:21 am
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución Responder citando



Anuncios



alonsojpd escribió:


Código:

procedure crearTabSheet (pagControlPantalla);
var
  tabTmp : TTabSheet;
begin
  //Creamos el objeto TabSheet
  tabTmp := TTabSheet.Create(tabTablas);
  //asignamos al TabSheet el PageControl
  tabTmp.PageControl := pagControlPantalla;
  tabTmp.Name := 'tabSheet' +
      inttostr(pagControlPantalla.PageCount);
  tabTmp.Caption := tabTmp.Name;

  //mostramos la pestaña (TabSheet)
  tabTmp.Visible := true;
  tabTmp.Show;
end;


La forma de uso del procedimiento (procedure) anterior sería:

Código:

  crearTabSheet (nombrePageControl);



Ok, funciona.

Ahora tengo otra duda: quiero crear un TDBGrid en el TabSheet, un TDBNavigator, un TDataSource que una ambos y un TQuery que ejecute una consulta. Todo ello en tiempo de ejecución, por código, y en cada TabSheet uno diferente.

¿Cómo hago esto?
MensajePublicado:
Mie Abr 21, 2010 8:25 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución Responder citando



Anuncios



varios escribió:

Ok, funciona.

Ahora tengo otra duda: quiero crear un TDBGrid en el TabSheet, un TDBNavigator, un TDataSource que una ambos y un TQuery que ejecute una consulta. Todo ello en tiempo de ejecución, por código, y en cada TabSheet uno diferente.

¿Cómo hago esto?


A continuación te mostramos el código fuente en Delphi para crear tantos TabSheet como quieras en un PageControl por código y, además, añadirle a cada uno un DBNavigator, un DBGrid, un DataSource y un Query. Esto vale para cualquier componente (Memo, ListView, etc.).

Por un lado el procedimiento para crear los TabSheet en el PageControl y, además, crear el Query, el DataSource, el DBNavigator y el DBGrid:

Código:

procedure TformMenuPrincipal.crearTabTablas (nombreTabla : string; sqlEjecutar : string);
var
  tabTmp : TTabSheet;
  gridTmp : TDBGrid;
  dataSTmp : TDataSource;
  navTmp : TDBNavigator;
  tcConsulta : TZReadOnlyQuery;
begin
  //creamos y ejecutamos la consulta SQL
  tcConsulta := TZReadOnlyQuery.Create(nil);
  tcConsulta.Close;
  tcConsulta.Connection := bd;
  tcConsulta.SQL.Clear;
  tcConsulta.SQL.Add(sqlEjecutar);
  tcConsulta.Open;
  if tcConsulta.RecordCount > 0 then
  begin
    //Creamos el TabSheet correspondiente a la tabla
    tabTmp := TTabSheet.Create(tabTablas);
    tabTmp.PageControl := tabTablas;
    tabTmp.Name := 'tabTablas' +
        inttostr(tabTablas.PageCount);
    tabTmp.Caption := nombreTabla;

    //creamos el DataSource
    dataSTmp := TDataSource.Create(nil);
    dataSTmp.DataSet := tcConsulta;
    dataSTmp.Name := 'dts' + tabTmp.Name;

    //creamos el Navigator
    navTmp := TDBNavigator.Create(nil);
    navTmp.Align := alTop;
    navTmp.Parent := tabTmp;
    navTmp.Flat := true;
    navTmp.VisibleButtons :=
        [nbFirst,nbPrior,nbNext,nbLast,nbRefresh];
    navTmp.Cursor := crHandPoint;
    navTmp.Name := 'nav' + tabTmp.Name;
    navTmp.DataSource := dataSTmp;

    //cremos el DBGrid
    gridTmp := TDBGrid.Create(nil);
    gridTmp.Align := alClient;
    gridTmp.Parent := tabTmp;
    gridTmp.Name := 'grid' + tabTmp.Name;
    gridTmp.DataSource := dataSTmp;

    //mostramos la pestaña (TabSheet)
    tabTmp.Visible := true;
    tabTmp.Show;
  end
  else
    tcConsulta.Free;
end;


Ejemplo de uso del procedimiento anterior:

Código:

...
  //recorremos todas las tablas
  for i := 0 to lsTablas.Count - 1 do
  begin
    //ejecutamos consulta SQL sólo para las seleccionadas
    if lsTablas.Selected[i] then
    begin
      tablaActual := lsTablas.Items[i];
      camposTablaTexto := obtenerCamposTexto (tablaActual);
      consultaSQL := obtenerSQLConsulta (camposTablaTexto,
          tablaActual, txtValorBuscar.Text);
      if consultaSQL <> '' then
        crearTabTablas(tablaActual, consultaSQL);
    end;
  end;
...


Con lo anterior creamos un TabSheet (solapa o pestaña nueva) en un PageControl y, además, mostramos el resultado de la ejecución de una consulta SQL en un DBGrid y un DBNavigator enlazados con un DataSource. Y éste enlazado con el Query correspondiente.

En el ejemplo utilizamos un TZReadOnlyQuery, que corresponde a los componentes ZeosDBO de acceso a bases de datos MySQL. Para el caso de un TQuery normal sería el mismo procedimiento.
MensajePublicado:
Mie Abr 21, 2010 8:32 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución Responder citando



Anuncios



En el siguiente enlace tienes una descarga gratuita de la aplicación AjpdSoft Búsqueda completa MySQL que utiliza este método de creación de TabSheet (pestañas o solapas) en un componente PageControl:

http://www.ajpdsoft.com/modules.php?name=Downloads&d_op=viewdownloaddetails&lid=265
MensajePublicado:
Mie Abr 21, 2010 4:40 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A