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
strClave := FormatDateTime('yyyymmdd', FECHA_GARITA);
with ZQuery do begin
SQL.Clear;
SQL.Add( 'SELECT * ' );
SQL.Add( ' FROM ' + strTabla );
SQL.Add( ' WHERE clave="' + strClave + '"' );
Open;
if not IsEmpty then begin
for numHora:=0 to 24 do begin
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
if( ESBFloatEdit_T_SECO<>nil ) then begin
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;
Close;
end;
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