PDA

Ver la Versión Completa : Modificacion de informe Rave


PTW
07-05-2004, 09:58:48
¿Se puede desde Delphi, acceder a los componentes que forman un informe de Rave? ¿Puedo modificar,por ejemplo, la imagen a cargar en un Bitmap component desde Delphi?

Gydba
07-05-2004, 13:43:14
De hecho se manejan desde Delphi, pero calculo que tu pregunta se orienta al objeto en modo ejecución.
Si es así no tengo idea con el rave pero calculo que debe ser posible, desde freereport u otros similares si se puede, incluso rediseñar el informe.

Julià T.
08-05-2004, 04:36:05
En la página tips (http://www.nevrona.com/rave/tips.shtml) de nevrona pudes encontrar ejemplos y ayudas, concretamente la que busca es
http://www.nevrona.com/rave/tips/rvtip15.html

PTW
11-05-2004, 12:42:29
He probado el ejemplo que viene en la pagina de nevrona

http://www.nevrona.com/rave/tips/rvtip15.html

de un ejemplo de como acceder a los componentes de Rave desde Delphi, pero a mi no me funciona. Me da un error en tiempo de ejecucion "EAccessViolation....."

¿Como puedo modificar el contenido de una imagen de Rave, desde Delphi?

Muchas gracias

Julià T.
11-05-2004, 22:40:03
del código en cuestión:

uses
RVClass, RVProj, RVCsStd;

var
MyPage: TRavePage;
MyText: TRaveText;

begin
RaveProject1.Open;
With RaveProject1.ProjMan do begin
MyPage := FindRaveComponent('Report5.Page2',nil) as TRavePage;
MyText := FindRaveComponent('Text3',MyPage) as TRaveText;
MyText.Text := 'Some Text';
MyText.Color := clGreen;
end; { with }
RaveProject1.ExecuteReport('Report5');
RaveProject1.Close;
end;
deberás tenre en cuenta:
asignar el RaveProject1 a un fichero con reportes
debe existir un reporte 'Report5'
debe existir una página 'Page2' en el reporte anterior
debe existir un campo de texto 'Text3' en la página anterior

PTW
12-05-2004, 11:53:10
Si, tuve en cuenta todas esas cosas y me sigue saliendo el mismo error

En mi caso. tengo un reporte que se llama "InformeVentaEsc.rav" que contiene una sola pagina.

Por lo tanto mi codigo que da de la siguiente manera

begin
RvProject1.Open;
With RvProject1.ProjMan do begin
MyPage := FindRaveComponent('ImpresionVentaEsc.Page1',nil) as
TRavePage;
MyText := FindRaveComponent('Text3',MyPage) as TRaveText;
MyText.Text := 'Some Text';
MyText.Color := clGreen;
end; { with }
RvProject1.ExecuteReport('ImpresionVentaEsc');
RvProject1.Close;
end;
He creado un Text component al que le he puesto como nombre Text3, pero no me funciona.

¿Fallo en algo?

He visto que, en Rave, cada componente posee unos Eventos OnBeforePrint, OnAfterPrint. OnBeforeReport, OnAfterReport. En el codigo de uno de estos eventos he intentado modificar el valor de una propiedad de un componente Bitmap:

"Bitmap1.image.loadfromfile('c:\datos\foto\foto1.bmp');

pero, al compilarlo, me dice que no sabe lo que es "image".

Alguien me echa un cable??

PTW
12-05-2004, 12:00:17
Tambien lo he intentado mediante
Bitmap1.image:='c:\datos\foto\foto1.bmp';
y me sigue fallando. ¿Como se accede a las propiedades de los componentes en Rave? ¿Igual que en Delphi (NombreObjeto.Propiedad)?


Mi gran problema es que quiero modificar el contenido de una foto de un informe en tiempo de ejecucion. Tras ver que no doy con la tecla para conseguirlo, estoy pensando en intentarlo mediante FastReport ¿Es tan complicado tambien con FastReport?

Salu2

Julià T.
12-05-2004, 21:02:06
prueba el siguiente código, con lo que podras ver donde falla


begin
RvProject1.Open;
With RvProject1.ProjMan do
begin
MyPage := FindRaveComponent('ImpresionVentaEsc.Page1',nil) as TRavePage;
if MyPage <>nil then
begin
MyText := FindRaveComponent('Text3',MyPage) as TRaveText;
if MyText<>nil then
begin
MyText.Text := 'Some Text';
MyText.Color := clGreen;
end
else Showmessage('no esxite el campo de texto Text3');
end
else Showmessage('no esxite el report ImpresionVentaEsc o la página Page1');

end; { with }
try
RvProject1.ExecuteReport('ImpresionVentaEsc');
except
Showmessage('no esxite el report ImpresionVentaEsc');
end;
RvProject1.Close;
end;



El componente bitmap del rave tiene una propiedad que se llama FileLink donde puedes utilizar el nombre del fichero 'C:\...'

PTW
13-05-2004, 12:03:46
El mensaje que sale es que no existe "ImpresionVentaEsc o Page1", osea, k el valor de MyPage=NIL

He revisado que exista el nombre del fichero (por si ,por descuido, estaba mal escrito), y esta correcto. Esta ubicado en la misma carpeta donde esta mi aplicacion en Delphi

He visto que el componente Page1, esta dentro de un Report1. he hecho un:

with RVProject1.Projman do
MyReport := FindRaveComponents('ImpresionVentaEsc.Report1,nil) as TRaveReport
if Myreport<>nil then
.....
.....
else showMessage('No existe Report1)
y me dice que "No existe Report1"

¿donde puede estar fallando?

Te agradezco enormemente el interes que estas poniendo en intentar ayuudarme. Muchas gracias

javiermorales
13-05-2004, 12:49:16
Prueba a poner tu reporte en c:\

PTW
13-05-2004, 13:03:52
Bueno, al fin y despues de mucho pelearme, he logrado que arranque. Os muestor el codigo, para las dudas

var
MyPage:TRavePage;
MyText:TRaVeText;
MyReport:TRaveReport;
MyProject:TRaveProjectManager;
MyBitMap:TRaveJPEGImage;
begin
RVProject1.Open;
MyProject := RVProject1.Projman;
if MyProject<>nil then
begin
MyReport:=RVProject1.Projman.FindRaveCOmponent('Report1',nil) as TRaveReport;
if MyReport<>nil then
begin
MyPage:= RVProject1.Projman.FindRaveComponent('Page1',MyReport) As
TRavePage;
if MyPage<>nil then
begin
MyBitMap := RVProject1.Projman.FindRaveComponent('Foto',MyPage) As
TRaveJPEGImage;
if MyBitMap<>nil then
begin
MyBitMap.image.LoadFromFile('c:\cancelada\datos\fotos\tina.jpg');
RVProject1.Execute;
RVProject1.Close;
end
else Showmessage('no existe Text')
end
else Showmessage('no existe Pagina')
end
else Showmessage('no existe Reporte')
end
else Showmessage('no existe Projecto')
end;
end;

Creo que el fallo era que si ponia "ImpresionVentaEsc.Page1" decia que no lo encontraba. En cambio si ponia "page1" no daba problemas.

Quizas al estar definido en la propiedad ProjectFile del componente RVProject el informe ImpresionVenta Esc.rav, ya no hace falta ponerlo en el procedimiento FindRaveComponent

Muchas gracias a todos por vuestra ayuda (y en especial a Juliá T.)

PTW
13-05-2004, 14:20:52
RVProject1.Open;
MyProject := RVProject1.Projman;
if MyProject<>nil then begin
MyReport:=RVProject1.Projman.FindRaveCOmponent('Report1',nil) as TRaveReport;
if MyReport<>nil then begin
MyPage:= RVProject1.Projman.FindRaveComponent('Page1',MyReport) As TRavePage;
if MyPage<>nil then begin
MyBitMap := RVProject1.Projman.FindRaveComponent('Foto',MyPage) As TRaveJPEGImage;
if MyBitMap<>nil then begin
MyBitMap.image.LoadFromFile('c:\datos\fotos\foto.jpg');
RVProject1.Execute;
RVProject1.Close;
end
end
end
end

Julià T.
13-05-2004, 22:07:04
Hola PWT:

Ahora que funciona y ya saber por que, tan solo te hace falta que prestes más atención al texto que te contestan (como en la repuesta número 5), que utilizes los tags "code" o "delphi" y que cierres el report si no lo necesitas, tal como indica el codigo siguiente:


RVProject1.Open;
MyProject := RVProject1.Projman;
if MyProject<>nil then begin
MyReport:=RVProject1.Projman.FindRaveCOmponent('Report1',nil) as TRaveReport;
if MyReport<>nil then begin
MyPage:= RVProject1.Projman.FindRaveComponent('Page1',MyReport) As TRavePage;
if MyPage<>nil then begin
MyBitMap := RVProject1.Projman.FindRaveComponent('Foto',MyPage) As TRaveJPEGImage;
if MyBitMap<>nil then begin
MyBitMap.image.LoadFromFile('c:\datos\fotos\foto.jpg');
RVProject1.Execute;
end
end
end
end
RVProject1.Close;

Alexander
12-06-2007, 14:46:48
Hola a todos,

He tratado de cambiar las propiedades de los componentes del reporte pero no he podido, He visto los ejemplos que estos hilos muestran, pero no me funciona tampoco ya que no reconoce TRaveJPEGImage, debo instalar algun componente adicional?.

Básicamente lo que quiero es cambiar la posicion de un rectangulo y si es visible o no, he podido cambiar el texto sin pasarle parámetros:


RvProject.Open;
MyPage := RvProject.Projman.FindRaveComponent('Report1.Page1',nil) as TRavePage;
MyText := RvProject.ProjMan.FindRaveComponent('TextT1',MyPage) as TRaveText;
MyText.Text := 'Se puede cambiar el texto';
RvProject.Execute;


Como puedo cambiar las propiedades del Rectangulo?

Gracias.

Alexander

Alexander
12-06-2007, 14:55:49
Ya lo conseguí!!!!!, debía poner estas unidades para que me tomara la Clase TRaveRectangle que era la que no me tomaba.

Muchas gracias.

Uses

RpDefine, RpCon, RpConDS, RpBase, RpFiler, RpRave,
RpRender, RpRenderRTF, OleServer, Word97, RpRenderPDF, RpSystem,RVClass, RVProj, RVCsStd,RVCsDraw

apolo771
31-10-2007, 21:47:48
yo necesito practicamente lo mismo y me ha funcionado asi

RVProject1.Open;
MyProject := RVProject1.Projman;
if MyProject<>nil then begin
MyReport:=RVProject1.Projman.FindRaveCOmponent('Report1',nil) as TRaveReport;
if MyReport<>nil then begin
MyPage:= RVProject1.Projman.FindRaveComponent('Mainpage',MyReport) As TRavePage;
if MyPage<>nil then begin
MyBitMap := RVProject1.Projman.FindRaveComponent('Foto',Mypage) As TRaveBitMap;
if MyBitMap<>nil then begin
try
MyBitMap.FileLink:=(trim(IBCarnetQueryFoto.Value));
Except
end;
RVProject1.Execute;
end;
end
end
end ;
RVProject1.Close;

pero yo estoy imprimiendo Carnetts y cada carnet lleva una foto diferente para cada usuario...y el bitmap lo cargo por medio de un campo en la tabla de tipo String que es donde tengo almacenada la direccion exacta de la foto....

pero resulta que si coloco este codigo en el boton de previsualizar el informe entonces todos los carnets tomaran la primera foto nada mas.... el bitmap lo tengo en una databand que me permite se repita x cantidaddes de vecesel carnet dependiendo de la cantidad de registros.... si la foto estuviera incrustadad en la tabla no tendria problema por que simplemente asociaria el bitmap con el campo de foto.... pero dado que el campo foto es de tipo string para cargar la foto por direccion no puedo hacer eso....

intente colocar ese codigo en el RvSystem en el evento OnNewPage y si me cambia la foto pero al cambiar la pagina me coloca a todas la foto del primer registro de esa pagina.....pero todas las de esa pagina quedan iguales.... hay algun evento en el que al ir registro por registro cuando esta cargando el reporte coloque el codigo y funcione??

espero no incomode que escribi muxo :D es que quiero darme a entender bien y entiendan mi caso.... alguien me puede hechar una mano??

apolo771
31-10-2007, 22:29:43
tengo como 1 mes peliando con este codigo..... y hoy coloque la duda en este tema y enseguida lo resolvi XDcoloque el mismo codigoMyProject := RVProject1.Projman; if MyProjectnil then begin MyReport:=RVProject1.Projman.FindRaveCOmponent('Report1',nil) as TRaveReport; if MyReportnil then begin MyPage:= RVProject1.Projman.FindRaveComponent('Mainpage',MyReport) As TRavePage; if MyPagenil then begin MyBitMap := RVProject1.Projman.FindRaveComponent('Foto',Mypage) As TRaveBitMap; if MyBitMapnil then begin try MyBitMap.FileLink:=(trim(IBCarnetQueryFoto.Value)); Except end; end; end end end ;en el RVDataConnection1 en el evento OnValidateRow y listo.... solucionado..

MaSSaKKre
13-03-2008, 17:19:05
muchas gracias apolo771 (http://clubdelphi.com/foros/member.php?u=23086) yo tenia el mismo problema que tu, solo me faltaba poner mi codigo en OnValidateRow... muchas gracias por ese tip!