Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Modificacion de informe Rave (https://www.clubdelphi.com/foros/showthread.php?t=9981)

PTW 07-05-2004 09:58:48

Modificacion de informe Rave
 
¿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 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:
Código Delphi [-]
    
  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:
  1. asignar el RaveProject1 a un fichero con reportes
  2. debe existir un reporte 'Report5'
  3. debe existir una página 'Page2' en el reporte anterior
  4. 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

Código Delphi [-]
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:

Código Delphi [-]
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

Rave cambiar propiedades de componentes.
 
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:

Código Delphi [-]
   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 he conseguido
 
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

ayuda
 
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

Listo... -.-
 
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

gracias apolo
 
muchas gracias apolo771 yo tenia el mismo problema que tu, solo me faltaba poner mi codigo en OnValidateRow... muchas gracias por ese tip!


La franja horaria es GMT +2. Ahora son las 07:51:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi