Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-12-2007
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Localizar controles creados en runtime

Hola a tod@s
Recurro al foro por aquello de que 2000 ojos ven más que dos (miopes por cierto)

Tengo un form con la siguiente estructura:
Código Delphi [-]
Form
  |
  | ( controles creados en tiempo de diseño )
  |
  + Panel_DATOS_00
  |      |
  |      + Panel_HORA_00
  |      + ESBFloatEdit_T_SECO_00
  |      + ESBFloatEdit_T_HUMEDO_00
  |      + ESBPosEdit_HUMEDAD_00
  |
  | ( controles creados en tiempo de ejecución, del 01 al 24 )
  |
  + Panel_DATOS_01
  |      |
  |      + Panel_HORA_01
  |      + ESBFloatEdit_T_SECO_01
  |      + ESBFloatEdit_T_HUMEDO_01
  |      + ESBPosEdit_HUMEDAD_01
  |
  + Panel_DATOS_02
  |      |
  |      + Panel_HORA_02
  |      + ESBFloatEdit_T_SECO_02
  |      + ESBFloatEdit_T_HUMEDO_02
  |      + ESBPosEdit_HUMEDAD_02
 ...
  |
  + Panel_DATOS_24
         |
         + Panel_HORA_24
         + ESBFloatEdit_T_SECO_24
         + ESBFloatEdit_T_HUMEDO_24
         + ESBPosEdit_HUMEDAD_24
Los controles "cero-cero" los creo en diseño, y los controles "cero-uno" a "dos-cuatro" en tiempo de ejecución, exactamente en el evento OnCreate del form.

Bien, hasta aquí no hay problema.
El problema se presenta cuando quiero rellenar los controles desde los datos almacenados en una tabla, para ello tengo la siguiente función:
Código Delphi [-]

procedure TForm_Garita.MYSQL_PasarDatosAControles;
const
  strTabla = 'partes_garita';
var
  Panel_DATOS           : TPanel;
  ESBFloatEdit_T_SECO   : TESBFloatEdit;
  ESBFloatEdit_T_HUMEDO : TESBFloatEdit;
  ESBPosEdit_HUMEDAD    : TESBPosEdit;
  numHora  : integer;
  strHora  : string;
  strClave : string;
begin
{ preparar la clave del registro buscado }
  strClave := FormatDateTime('yyyymmdd', FECHA_GARITA);
  with ZQuery do begin
     { viene preparada de Form_Main }
       SQL.Clear;
       SQL.Add( 'SELECT * ' );
       SQL.Add( '  FROM ' + strTabla );
       SQL.Add( ' WHERE clave="' + strClave + '"' );
     { abrir la tabla activa }
       Open;
       if not IsEmpty then begin
        { el registro existe }
          for numHora:=0 to 24 do begin
            { para cada hora, buscar los controles }
              strHora               := IntToCadena( numHora, 2 );
              Panel_DATOS           := FindComponent('Panel_DATOS_'          +strHora) as TPanel;
              ESBFloatEdit_T_SECO   := FindComponent('ESBFloatEdit_T_SECO_'  +strHora) as TESBFloatEdit;
              ESBFloatEdit_T_HUMEDO := FindComponent('ESBFloatEdit_T_HUMEDO_'+strHora) as TESBFloatEdit;
              ESBPosEdit_HUMEDAD    := FindComponent('ESBPosEdit_HUMEDAD_'   +strHora) as TESBPosEdit;
              if( Panel_DATOS<>nil ) then begin
                { el contenedor existe y se encuentra }
                  if( ESBFloatEdit_T_SECO<>nil ) then begin
                    { el control existe y se encuentra, rellenarlo }
                      ESBFloatEdit_T_SECO.AsFloat         := FieldByName( 'TS_'+strHora ).AsFloat;
                      ESBFloatEdit_T_SECO.BlankWhenZero   := FieldByName( 'TS_'+strHora ).IsNull;
                      ESBFloatEdit_T_HUMEDO.AsFloat       := FieldByName( 'TH_'+strHora ).AsFloat;
                      ESBFloatEdit_T_HUMEDO.BlankWhenZero := FieldByName( 'TH_'+strHora ).IsNull;
                      ESBPosEdit_HUMEDAD.AsInteger        := FieldByName( 'HU_'+strHora ).AsInteger;
                      ESBPosEdit_HUMEDAD.BlankWhenZero    := FieldByName( 'HU_'+strHora ).IsNull;
                  end;
              end;
          end;
       end;
     { cerrar la tabla activa }
       Close;
  end; { del with Query do }
{}
end;
no se porqué no me localiza los controles creados y aparecen en blanco.

He probado a anteponer a FindComponent el nombre del form, self, o el contenedor (Panel_DATOS) y lo máximo que he conseguido ha sido que me cargue los controles creados en diseño, el resto siguen en "el limbo"

Para verificar los nombres, he añadido el evento OnMouseMove para que muestre los nombres de los controles y lo hace perfectamente
Código Delphi [-]
procedure TForm_Garita.TODOS_OnMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if( Sender is TPanel )
      then Form_Comun.Panel_SUPERIOR.Caption := TPanel(Sender).Name
      else if( Sender is TESBFloatEdit )
               then Form_Comun.Panel_SUPERIOR.Caption := TESBFloatEdit(Sender).Name
               else if( Sender is TESBPosEdit )
                        then Form_Comun.Panel_SUPERIOR.Caption := TESBPosEdit(Sender).Name
                        else Form_Comun.Panel_SUPERIOR.Caption := '*** DESCONOCIDO***';
end;
¿alguna idea?

Gracias de antemano
salvica
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Localizar un registro alcides Varios 4 13-04-2007 20:17:27
Mover y agregar controles en RunTime JXJ Varios 2 05-05-2005 02:16:04
tRABAJO CON CONTROLES CREADOS EN EJECUCION bustio OOP 4 08-02-2005 17:52:23
Eliminar controles en runtime Sick boy OOP 2 15-12-2004 10:08:34
Campos creados dinámicamente vs creados estáticamente Jose_Pérez Conexión con bases de datos 2 14-04-2004 11:34:03


La franja horaria es GMT +2. Ahora son las 03:47:56.


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