Delphi: Diálogos de Rave Reports en español

Etiquetas:

Debido a que la versión de Rave Reports para Delphi no incluye los archivos fuente (PAS), la única manera de tener los diálogos en español es crear uno mismo los forms, y utilizar los eventos OverridePreview, OverrideSetup y OverrideStatus del componente RvSystem para sustituir los diálogos estándar.

He traducido unos diálogos iguales a los originales (faltaría mejorarlos, por que la verdad es que los diálogos estandar dan algo de pena) y los he comprimido en un ZIP para su descarga: RaveReportsEsp.zip

MODO DE USO [...]

1.- Ubicación de los archivos

Es necesario extraer los archivos que contiene el ZIP en la librería de Rave Reports, normalmente situada en la carpeta "RaveReports\Lib", dentro de la carpeta de instalación de Delphi.

Si lo prefieres, es posible extraer el contenido del ZIP en cualquier carpeta y luego añadir la ruta de esta carpeta a la lista de rutas de librerías desde Delphi:

Tools -> Options -> Enviroment Options -> Delphi Options -> Library Win32 -> Library Path

2.- Componentes a utilizar

Al menos es necesario un componente TRvProject ("rvProject1") y otro TRvSystem ("rvSystem1") de la paleta Rave Reports. En la propiedad "Engine" del componente "rvProject1" seleccionamos el componente "rvSystem1", y así quedan relacionados. Para que todo quede totalmente en español, hay que modificar en el componente "rvSystem1" las siguientes propiedades:

rvSystem1.SystemFiler.StatusFormat cambiar a "Generando página %p"
rvSystem1.SystemPrinter.StatusFormat cambiar a "Imprimiendo página %p"
rvSystem1.SystemPrinter.Title cambiar a "Informe" (Título del informe)
rvSystem1.TitlePreview cambiar a "Vista previa de informe"
rvSystem1.TitleSetup cambiar a "Configuración de informe"
rvSystem1.TitleStatus cambiar a "Estado del informe"

3.- Control de eventos

Para que el sistema utilice la versión en español de los diálogos, es necesario añadir a la clausula USES las unidades personalizadas (RavePreview, RaveSetup y RaveStatus). También es necesario controlar los eventos del componente "rvSystem1", así que añadimos el siguiente código en los eventos correspondientes:

procedure TForm1.RvSystem1OverridePreview(ReportSystem: TRvSystem; OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
  case OverrideMode of
    omCreate: begin
      OverrideForm := TFormRavePreview.Create(self);
      OverrideForm.Caption := ReportSystem.TitlePreview;
      OverrideForm.Width := ReportSystem.SystemPreview.FormWidth;
      OverrideForm.Height := ReportSystem.SystemPreview.FormHeight;
      OverrideForm.WindowState := ReportSystem.SystemPreview.FormState;
      (OverrideForm as TFormRavePreview).ReportSystem := ReportSystem;
    end;
    omShow: begin
      ReportSystem.SystemPreview.InitPreview((OverrideForm as TFormRavePreview).RvRenderPreview);
      if Assigned(ReportSystem.OnPreviewSetup) then
      ReportSystem.OnPreviewSetup((OverrideForm as TFormRavePreview).RvRenderPreview);
      (OverrideForm as TFormRavePreview).InputFileName := ReportSystem.SystemFiler.Filename;
      (OverrideForm as TFormRavePreview).InputStream := ReportSystem.SystemFiler.Stream;
      (OverrideForm as TFormRavePreview).InitFromRPSystem;
      if soPreviewModal In ReportSystem.SystemOptions then OverrideForm.ShowModal
      else OverrideForm.Show;
    end;
    omWait: begin
      if not (soPreviewModal in ReportSystem.SystemOptions) then
      begin
        // Espera para cerrar
        repeat
          Sleep(250);
          Application.ProcessMessages;
        until not OverrideForm.Visible;
      end;
    end;
    omFree: begin
      if (ReportSystem.SystemFiler.StreamMode In [smTempFile, smFile]) then
      begin
        (OverrideForm As TFormRavePreview).RvRenderPreview.NDRStream.Free;
        (OverrideForm As TFormRavePreview).RvRenderPreview.NDRStream := Nil;
      end;
      FreeAndNil(OverrideForm);
    end;
  end;
end;

procedure TForm1.RvSystem1OverrideSetup(ReportSystem: TRvSystem; OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
  case OverrideMode of
    omCreate: begin
      OverrideForm := TFormRaveSetup.Create(nil);
      OverrideForm.Caption := RvSystem1.TitleSetup;
      (OverrideForm as TFormRaveSetup).ReportSystem := ReportSystem;
    end;
    omShow: begin
      with OverrideForm as TFormRaveSetup, ReportSystem do
      begin
        PreviewSetup := False;
        Aborted := ShowModal = mrCancel;
      end;
    end;
    omWait: begin
      {No es necesario esperar a causa del showModal}
    end;
    omFree: OverrideForm.Free;
  end;
end;

procedure TForm1.RvSystem1OverrideStatus(ReportSystem: TRvSystem; OverrideMode: TOverrideMode; var OverrideForm: TForm);
begin
  if not(soShowStatus in ReportSystem.SystemOptions) then exit;
  case OverrideMode of
    omCreate: begin
      OverrideForm := TFormRaveStatus.Create(self);
      OverrideForm.Caption := RvSystem1.TitleStatus;
      (OverrideForm as TFormRaveStatus).ReportSystem := ReportSystem;
    end;
    omShow: with OverrideForm as TFormRaveStatus,ReportSystem do
    begin
       BaseReport.StatusLabel := StatusLabel;
       CancelButton.Caption := Trans('Cancelar');
       Show;
    end;
    omWait: with OverrideForm as TFormRaveStatus,ReportSystem do
    begin
       if soWaitForOK in SystemOptions then
       begin
         CancelButton.Caption := Trans('Aceptar');
         CancelButton.ModalResult := mrOk;
         FormClosed := false;
         repeat  Application.ProcessMessages;  until FormClosed;
       end;
    end;
    omFree: FreeAndNil(OverrideForm);
  end;
end;