Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Crear objetos dentro de otro objeto. (https://www.clubdelphi.com/foros/showthread.php?t=50807)

Nieto 28-11-2007 19:27:41

Crear objetos dentro de otro objeto.
 
Buenas tardes,

Foro,

Una pregunta estoy tratando de hacer un Pagecontrol con "n" cantidad de Tabsheet (dinamico), esta parte ya lo puede hacer pero lo que no he podido hacer es asignarle a cada tabsheet un dbgrid tambien es dinamico.

Este el el codigo:
Código Delphi [-]
  with sk_Empresas do begin
       First;
       while not Eof do begin
           with TTabSheet.Create(self) do begin
                 Contador := Contador + 1;
                 PageControl := PageControlIngresos;
                 Caption := FieldByName('D_Empresa_Corta').AsString;
                 Name := FieldByName('K_Empresa').AsString;
                 Obj := TwwDBGrid.Create(Self);
                 Obj.Name := 'Gr'+Name;
                 PageControl.InsertControl(Obj);
                 Obj.Enabled := True;
                 Obj.Visible := True;
                 Obj.Align := alClient;
            end;
            Next;
       end;

El problema es que si me crea los dbGrid pero no en cada tabsheet creado.

Que me falta ???

jhonny 28-11-2007 19:33:29

Una vez creas tu DBGrid, le asignas a su propiedad Parent el TabShet en cuestion y listo :).

eduarcol 28-11-2007 19:34:18

No estoy muy al tanto de como funciona el InserControl del Pagecontrol, pero deberias asignarle la propiedad parent del dbgrid el TabSheet que deseas que pertenezca

yo lo hago asi:

Código Delphi [-]
tt := TTabSheet.Create(Self);
              tt.PageControl := Self;
              tt.Caption := slSections.Strings[nIdx];
              sg := TStringGrid.Create(self);
              sg.Parent := tt;
              sg.Align := alClient;
              sg.ColCount := 2;
              sg.RowCount := slKeys.Count + 1;
              sg.ColWidths[0] := sg.Width div 4;
              sg.ColWidths[1] := (sg.Width div 4) * 3;
              sg.Cells[0,0] := 'RUTA: ';
              sg.Cells[1,0] := cArchivo;
              sg.Options := [goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect,goEditing];
              sg.Name := 'sg' + InttoStr(nIdx);

Si te interesa el codigo descarga el componente inieditor de mi pagina

Nieto 28-11-2007 20:09:27

Gracias, EduarCol, ya me funciono.

Otra duda como le hago para liberarlos de memoria o automaticamente se liberan.

Saludos;

eduarcol 28-11-2007 20:44:17

Checate el owner, cuando se destruye el owner se destruye los controles que le pertenecen. Si lo colocas en nil debes destruirlo tu

Nieto 28-11-2007 23:09:12

Una pregunta nuevamente Eduarcol,

Como puedo asignarle ahora un datasource diferente a cada dbgrid.

Tambien necesito crearla al momento de generar el tabsheet, el dbgrid y ahora asignarle el datasource al dbgrid.

Cabe mencionarte que este forma me genera un reporte de presupuestos por empresa por eso creo un tabsheet por cada empresa.

Otra pregunta abusando de tu sabiduria con todo respeto, como puedo exportar todas las hojas del pagecontrol a una hoja de excel con todas sus pestañas.

Gracias por tu ayuda


La franja horaria es GMT +2. Ahora son las 09:31:25.

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