PDA

Ver la Versión Completa : Como cambiar una propiedad del Rave en tiempo de ejecucion


ach_666
03-05-2006, 18:00:35
Hola a tod@s, quiero saber si puedo variar una propiedad de un componente de mi Rave Report, a traves del codigo de mi programa en Delphi.

Es decir, a través de mi aplicación y segun sea el resultado de mi consulta para el Rave, poder cambiar el color de relleno (FillColor) de un rectangulo de mi reporte.

Gracias de antemano por si me podeis ayudar

Un saludo

fredo
03-05-2006, 20:47:46
hola es realmente ataoso hacerlo, pero se puede.....en rl rave no tienes que hacer nada.....solo en delphi....supongo que estas usando un RBDatasetConnection..., buen este tiene una propiedad onGetRow...
ahi declara las siguientes variables



var MyPage: TRavePage;
MyText1,MyText2{tantas como necesites cambiar}: TRaveText;
Square1,Square2{tantos como necesites cambiar}:TRaveRectangle

Begin
if {tu condicion}
then
Begin
with RvLetterCovert.ProjMan do
Begin
MyPage := FindRaveComponent('RCoverLetter.MainPage',nil) as TRavePage;
MyText1 := FindRaveComponent('DataText1',MyPage) as TRaveText; {nombre de tus componentes dentro del rave}
Square1:= FindRaveComponent('Square1',MyPage) as TRaveRectangle;
if {condicion}
then
begin
MyText1.Font.Style:=[fsBold,fsItalic]
Square1.FillColor:=clWhite;
end
else
begin
MyText1.Font.Style:=[];
Square1.FillColor:=$00E4E4E4;
end;

{por ultimo, esto es muy importante, pasale valor a las columnas a manito... ya que te asume directamente que euieres conservar los campos....}
// ejemplo

With Connection do
begin
WriteIntData('',LettersXCourierLETTER_REF.AsInteger);
WriteIntData('',LettersXCourierCORRELATIVO.asInteger);
WriteFloatData('',LettersXCourierREF.asFloat);
WriteStrData('',LettersXCourierTEXT.AsString);
WriteStrData('',LettersXCourierCOURIER_.AsString);
WriteStrData('',LettersXCourierYOUR_REF.AsString);
{deben ir en el orden que estan definidos en el field editor... y con el tipo correspondiente.....}
end;

end;
end;
end;
;


eso es todo.... saludos

estas son las uniodades que necesitas para que no te cabesees tanto....

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

ach_666
05-05-2006, 09:49:01
Hola gracias por el codigo pero....


No entiendo que es el RvLetterCovert.ProjMan

Además noo consigo ver el codigo completo y la ultima parte (Connection) tampoco lo entiendo mucho, aunque no he llegado a poder comprobar esa parte.

Un saludo y gracias de todas formas

fredo
05-05-2006, 14:33:21
RvLetterCovert es un componente TRVProyect, en mi ejemplo se llama asi, ProjMan es una propiedad, FindRaveComponent(<nombre reporte.pagina>,nulo)
el resto es facil de deducir....:D
saludos.

ach_666
05-05-2006, 18:59:41
¡¡¡¡¡¡¡¡¡ Lo conseguí !!!!!!!!!!!

Muchas Gracias

Esto se podría rematar si me pudieras decir conque Write...Data('',campo) imprimo una Fecha no lo consigo de ninguna forma.

No obstante muchas gracias.

fredo
05-05-2006, 19:59:41
por sia caso WriteDateTimeData();:D

ach_666
06-05-2006, 13:58:54
Perfecto funcionó.

Ahora en otro reporte tengo un problema, pq en mi query genero un campo datediff(Fecha1,Fecha2) as dias y luego al hacer el writeIntData me da un error diciendome que no se corresponde con el data que se tiene que escribir.

El problema es que no se como considera el valor dias, desde luego no como entero.

Un saludo y gracias

ach_666
06-05-2006, 18:53:03
POR FIN LO CONSEGUI.

El problema estaba que lo considera un int64 con lo cual la funcion para escribir una diferencia entre dos fechas era WriteInt64Data(..).

Gracias por todo Fredo, y gracias a TinkerBell que resolvio esto ultimo.

Un saludo