Asunto: Crear TabSheet en un PageControl en tiempo de ejecución
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?
Publicado:
Mie Abr 21, 2010 8:16 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución
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.
Publicado:
Mie Abr 21, 2010 8:21 am
varios Magnífico usuario
Registrado: Oct 10, 2006 Mensajes: 2092
Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución
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?
Publicado:
Mie Abr 21, 2010 8:25 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución
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;
//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.
Publicado:
Mie Abr 21, 2010 8:32 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Crear TabSheet en un PageControl en tiempo de ejecución
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:
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