Ver Mensaje Individual
  #1  
Antiguo 28-10-2018
juniorSoft juniorSoft is offline
Miembro
 
Registrado: abr 2005
Posts: 178
Reputación: 20
juniorSoft Va por buen camino
Cómo modificar las propiedades de una clase en Runtime antes de ser instanciada

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
      //cambiar la propiedad visible a la clase del formulario
  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,

Última edición por Casimiro Notevi fecha: 28-10-2018 a las 14:28:25.
Responder Con Cita