Hola nuevamente amigos,
Les planteo lo que deseo realizar:
Tengo un método para realizar tareas de modificación de reportes (fastReport) que están en distintos contenedores ya sean formularios o módulos de datos, dichos contenedores son creados en ejecución y la intensión es que estos contenedores solo estén creados no que sean visibles, lo único visible sera el diseñador de fastReport para modificar el reporte en ejecución.
les muestro aquí el código realizado
Código Delphi
[-]procedure TMDConfigReportes.ModificarReporte(ClassCReport: TComponentClass;
NombreReporte: string);
var
Rep:TFrxReport;
RutaRep:string;
begin
with ClassCReport.Create(Self) do
begin
try
Rep:=TFrxReport(FindComponent(NombreReporte));
RutaRep:=ExtractFilePath(GetModuleName(HInstance))+Rep.EngineOptions.TempDir;
if FileExists(RutaRep) then
Rep.LoadFromFile(RutaRep)
else
raise Exception.Create('No se encontro el reporte en el directorio '+RutaRep);
Rep.DesignReport(True);
finally
Free;
end;
end;
end;
En el caso de los Módulos de datos no hay inconvenientes ya que no son visibles, pero los formularios se visualizan una vez creados.
una solución seria asignar la propiedad visible de los formularios a false y luego en el método show del formulario ponerlo a true, pero esto me trae otras consecuencias para algunos detalles de visualización, ademas tendría que modificar la clase base para que todos los formularios que hereden realicen el mismo comportamiento.
y la idea que tengo es, aunque no se implementarla sospecho que con RTTI puedo hacer algo como sigue para asignar la propiedad visible de la clase de formulario a false solo para acceder a los componentes de reportes, pero me falta el detalle mas importante
Código Delphi
[-]if ClassCReport.InheritsFrom(TForm) then
begin
end;
....
//luego se crearía el objeto del formulario o modulo de datos para acceder a los reportes y evitaría el efecto de que se muestre si es un formulario aunque sea por segundos, porque ya con la instancia si puedo acceder a la propiedad visible pero el efecto anterior no es el deseado.
Saludos,