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 01-12-2010
Rowerto Rowerto is offline
Miembro
 
Registrado: abr 2010
Posts: 20
Poder: 0
Rowerto Va por buen camino
Hola de nuevo. Aunque no posteo mucho si que entro casi a diario al foro para resolver mis dudas.

En esta ocasion resubo este hilo (bastante antiguo por lo que veo, pero lo prefiero a crear otro nuevo, razones obvias), porque la duda que tengo va en la linea. Tenia en un primer momento la misma duda que tenia esocrates, la de como crear un tabsheet y dentro de este una stringgrid en tiempo de ejecucion y lo dicho, gracias a la ayuda del propio Delphi y de este hilo lo he logrado.
Pero a raiz de esto, tengo otra duda. Y os explico un poco de como va el programa en el que estoy currando ahora para que me podais ayudar mejor.

Yo abro un/os fichero/s y recojo en un primer momento ciertos datos que necesito.
Esta info es el nombre de un sitio, su matricula y el dia de "autos" (como en cualquier producto: tipo, referencia y dia).
Si este sitio no tiene pestaña propia, debo crear una (en tiempo de ejecucion) con su propio stringgrid asociado, y de existir debo pasar la hoja de ese sitio y por ende su stringgrid. Una vez hecho esto relleno la grid con los datos del fichero abierto.
Yo consigo hacerlo todo salvo pasar el stringgrid asociado a la hoja con el sitio.
Os paso algo de codigo para que se entienda "mejor":

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var   tabs : ttabsheet;
      stri : tstringgrid;   //hay mas variables, pero pongo solo las que creo que os seran necesarias saber el tipo para entenderlo
begin
  memo1.Lines.Clear;  //en este memo (se que se puede hacer con otras cosas) meto los nombres de los ficheros que abro desde el dialogo
          //de apertura
  opendialog1.Execute;
  memo1.Lines :=opendialog1.Files;
  for y:=0 to memo1.Lines.Count-1 do  //recorro el memo para abrir todos los ficheros seleccionados antes
  begin
    memo2.Lines.LoadFromFile(memo1.Lines[y]);//copio el contenido de cada fichero independiente

    {recojo la informacion que necesito para ver si ya existe, aunque tampoco lo pongo
     matricula y centro que son unas strings}

    compara:=0;
    for z:=0 to pagecontrol1.PageCount-1 do    //miro pagina por pagina el caption y de ser igual paso en compara el numero
    begin
      if comparestr(trim(PageControl1.Pages[z].Caption), trim(trim(centro)+trim(matricula)))=0
      then begin
        compara:=z+1;    //pasa el numero de pagina (o 0 en su defecto si llega al final y no encuentra ninguno)
      end;
    end;       //posiblemente este bucle se pueda juntar con el proximo IF, cosa a revisar cuando todo funcione

    if compara - 1  = 0   //si no encuentra un caption igual creo tanto la tab como la grid (y sus dimensiones)
    then begin
      tabs := TTabSheet.Create(PageControl1);
      tabs.PageControl := PageControl1;
      tabs.Name := 'TabSheet'+inttostr(pagecontrol1.PageCount+1);
      memo3.Lines.Add(tabs.name);
      tabs.Caption := trim(centro)+trim(matricula);
      stri := tstringgrid.Create(self);
      stri.Parent := tabs;
      stri.Name := 'StringGrid'+inttostr(pagecontrol1.PageCount+1);
      stri.Visible:=true;
      stri.ColCount:=8;
      stri.FixedCols:=0;
      stri.RowCount:=3;
      stri.FixedRows:=2;
      stri.Width:=529;
      stri.Height:=601;
      stringcabecera(stri);
    end
    else begin     // y si lo encuentra le paso la pagina y la grid
      tabs := PageControl1.Pages[z];
      stri := ///////////AQUI LO QUE ME FALTA que es el grid que hay en ese pagecontrol1.pages[z]
    end;

    {aqui viene todo el troncho de rellenado de datos que elimino para que se entienda mejor el resto}

  pagecontrol1.ActivePage:=tabs; //activo la pagina (sea nueva o no)

  end;
end;

Espero que me podais ayudar, porque no se ni por donde empezar.
Perdon por el tronchazo que os acabo de soltar y gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 05-12-2010
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
No estoy seguro de entender bien lo que querés... es asignar a la variable stri el StringGrid que ya está contenido en el TabSheet??

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 09-12-2010
Rowerto Rowerto is offline
Miembro
 
Registrado: abr 2010
Posts: 20
Poder: 0
Rowerto Va por buen camino
Pues si, exactamente eso.
Responder Con Cita
  #4  
Antiguo 10-12-2010
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Si el string grid tiene un nombre, tan fácil como:

Código Delphi [-]
  tabs := PageControl1.Pages[z];
  stri := Tabs.FindControl('ElNombreDelStrignGrid') as TStringGrid;

Si no lo tiene... pero hay solo uno, entonces algo como esto:

Código Delphi [-]
  tabs := PageControl1.Pages[z];
  stri := nil;
  for I := 0 to Tabs.ControlCount - 1 do
    if Tabs.Controls[i] is TStringGrid then
    begin
      stri := TStringGrid(Tabs.Controls[i]);
      break;
    end;

Esto funcionará si el StringGrid está directamente sobre el PageControl. Si está en otro control, pues se busca directamente en ese contenedor... o se hace una búsqueda recursiva.

Si hay varios StringGrid, pues sería de idear la forma de identificar cuál es el que te interesa y condicionar la asignación hasta que se encuentre el indicado.

Un saludo.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 13-12-2010
Rowerto Rowerto is offline
Miembro
 
Registrado: abr 2010
Posts: 20
Poder: 0
Rowerto Va por buen camino
Muchisimas gracias jachguate, ha sido una aclaracion diafana y cristalina.
Como cada tabsheet solo tiene un control (que es la stringgrid) lo unico que pongo es:

Código Delphi [-]
stri := Tstringgrid(pagecontrol1.Pages[z].Controls[0]);

y va todo como un tiro.

La verdad, que se me cayo la cara de vergüenza al ver lo simple y facil que era. Yo me estaba rompiendo los cuernos con Controls, Parents y este tipo de cosas... por lo que solo puedo repetir : GRACIAS POR LA AYUDA!!!!
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


La franja horaria es GMT +2. Ahora son las 13:16:08.


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