Supongo que por código te referirás a en forma no visual (programmatically como dicen en inglés)
Te paso un código de prueba, no te ofendas, puede tener errores, pero si mal no interpreté tu petición, es algo así y quizás te ayude.
utiliza IBControls, DB Firebird, y es obvio que algunos componentes no se encuentran allí.
dmcen es un DataModule.
trListados es un Transacción.
qryStockCritico es una IBQuery.
// Crea un panel con controles internos para mostrar el stock crítico y un botón para la destrucción misma del panel.
// El botón que cierra el panel también cierra las transacciones.
procedure TfrmPrincipal.btInfoStockCrClick(Sender: TObject);
var
But: TButton;
Pan: TPanel;
Grilla: TDBGrid;
dsSC: TDataSource;
begin
// DataSource
dsSC:= TDataSource.Create(Self);
dsSC.DataSet:= dmcen.qryStockCritico;
dmcen.trListados.StartTransaction;
dmcen.qryStockCritico.Open;
// Panel de información rápida
PanInfo:= TPanel.Create(Self);
with PanInfo do
begin
Parent:= frmPrincipal;
Align:= alClient;
Caption:= '';
end;
// Panel inferior del panel de información rápida
Pan:= TPanel.Create(Self);
with Pan do
begin
Parent:= panInfo;
Align:= alBottom;
Height:= 40;
Caption:= '';
end;
// Botón de cierre
But:= TButton.Create(Self);
with But do
begin
Parent:= Pan;
Caption:= 'Cerrar';
Align:= alRight;
AlignWithMargins:= True;
Height:= 40;
OnClick:= btInfoStCrClick;
end;
// Grilla de datos
Grilla:= TDBGrid.Create(Self);
with Grilla do
begin
Grilla.Parent:= PanInfo;
Grilla.DataSource:= dsSC;
Grilla.Align:= alClient;
Grilla.Columns.Add;
Grilla.Columns[0].FieldName:= 'DENOMINACION';
Grilla.Columns[0].Title.Caption:= 'Denominación del artículo';
end;
end;
En este caso sólo hay una columna. Pero créalas análogamente.
Espero que utilices componentes de InterBase.
Se que muchos se verán espantados, pero es una prueba y si me pongo a perfeccionarla talvez ya hayas desistido.
PD: se escribe "decir" no "desir".