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;
Últimos comentarios