FastReport报表加载图片后,图片的位置如何定位?

nimeide1234567890 2021-04-04 09:51:50
图片如何按照程序里给的位置定位?
程序里是这样给图片定位的:
TfrxPictureView(frxReport1.FindObject('Picture1')).Top:=StrToInt(Edit_top.Text);
但是不管用,都是因为Memo1控件的StrechMode属性设置了smMaxHeight,导致图片要么显示在上面,要么显示在下面。

图片是放在Footer1控件里的,但是Footer1放了一个Memo1控件,这个Memo1控件的StrechMode属性设置了smMaxHeight,意思是当Memo1里的内容很多的时候Memo1的高度会随着内容自动升高,Picture1控件也在Footer1里,而且Picture1控件放在Memo1上面的,那么问题来了,Picture1控件最后要么就显示在Memo1的上面,要么显示在Memo1的下面,怎么调整都不可以显示在Memo1的中间任何位置,我测试了下,如果把Memo1的StrechMode属性设置smDontStretch就可以达到,但是StrechMode属性必须设置smMaxHeight,
现在图片要显示在Footer1的任何位置,也就是图片要显示在Memo1的任何位置上,怎么办?


红色框是Memo1控件,蓝色框是Picture1控件



...全文
2359 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
nimeide1234567890 2021-04-06
  • 打赏
  • 举报
回复
牛逼,牛逼,方法二搞定了 现在可以随心所欲的控制图片的位置了 牛逼,牛逼 不服不行 牛逼,牛逼,太牛逼了
tanqth 2021-04-06
  • 打赏
  • 举报
回复
问题原因找到了。 解决方法,在给Memo1赋值后,重新给Memo1一个正确的高度,之后你的图片就可以正常定位了。 方式一: 例如在预览前增加一条代码

TfrxPictureView(frxReport1.FindObject('memo1')).Height:=TfrxMemoView(TfrxPictureView(frxReport1.FindObject('memo1'))).CalcHeight;
frxReport1.ShowReport();
因为我memo1是固定的内容,这样是可行的。如果是动态的数据可能不应该这样,你可以试试方式二 方式二: 在报表编辑里,找到memo1,填写控件对应的AfterData代码如下:

procedure Memo1OnAfterData(Sender: TfrxComponent);
begin
  memo1.height:= memo1.CalcHeight;  
end;
原则就是在给Picture1指定TOP前,给memo1的高度修改为CalcHeight就可以了。
wwsygsxgg 2021-04-06
  • 打赏
  • 举报
回复
看不懂帮顶
she2de 2021-04-06
  • 打赏
  • 举报
回复
不错,很实用,谢谢!
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
TfrxPictureView(frxReport1.FindObject('Picture1')).Top:=StrToInt(Edit_top.Text);
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
我的意思是要程序里控制图片的位置
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
TfrxPictureView(frxReport1.FindObject('Picture2')).Top:=41.5; TfrxPictureView(frxReport1.FindObject('Picture2')).Top:=41.6; 我输入41.5和41.6,两个结果显示章子间隔太大,41.5章子还在制表这行文字上面,输入41.6就下去了很多,和上面的图一样,间隔太大,还是不行
tanqth 2021-04-05
  • 打赏
  • 举报
回复
引用 15 楼 luojianfeng 的回复:
TfrxPictureView(frxReport1.FindObject('Picture1')).Top:=41.5; 程序里这样写是报错的
我的可以。
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
TfrxPictureView(frxReport1.FindObject('Picture1')).Top:=41.5; 程序里这样写是报错的
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
我的目的都是想从程序里控制定位图片的位置
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
报表里输入41.5是可以,但是我要从程序里传这个值过去就不行,程序里只能传整数,你说怎么办
tanqth 2021-04-05
  • 打赏
  • 举报
回复
引用 11 楼 luojianfeng 的回复:
程序里输入41和42,章子显示的位置间距太大,想在它们之间显示是不行的,总不能输入41.5
兄台啊,41.5根本就不是问题啊。41.52都可以的。 我用0.52都行,位置与0.51的都会有区别的。
nimeide1234567890 2021-04-05
  • 打赏
  • 举报
回复
程序里输入41和42,章子显示的位置间距太大,想在它们之间显示是不行的,总不能输入41.5
nimeide1234567890 2021-04-04
  • 打赏
  • 举报
回复
Footer换成PageFooter也不行
nimeide1234567890 2021-04-04
  • 打赏
  • 举报
回复
Memo放到Footer外面也不行
tanqth 2021-04-04
  • 打赏
  • 举报
回复
引用 2 楼 luojianfeng 的回复:
我也知道有影响,但是没有解决办法,你有解决办法吗?
把Memo放到Footer外面试试,只把后面两行(盖章)那些字放Footer里。 还有,我记得Footer应该是每页都会打印的哦。与你这个应该不符的,你的应该是只需要尾页打印才对。
tanqth 2021-04-04
  • 打赏
  • 举报
回复
这样的设计,预览出来是一样的效果。
tanqth 2021-04-04
  • 打赏
  • 举报
回复
你试试以下步奏: 1、Memo1控件的StrechMode属性设置为smActualHeight; 2、图片的定位属性如下: 以右下角定位。 3、Footer1的AfterCalcHeight事件内写以下代码:

procedure Footer1OnAfterCalcHeight(Sender: TfrxComponent);
begin
  footer1.height:=memo1.height;                                                                   
end;
这样,当重新设计一下footer1的高度为memo1的高度。然后图片因为是以右下角定位的,也会自动改变位置的。 我的设计: 预览效果:
nimeide1234567890 2021-04-04
  • 打赏
  • 举报
回复
我也知道有影响,但是没有解决办法,你有解决办法吗?
tanqth 2021-04-04
  • 打赏
  • 举报
回复
首先来说,通常Footer(页脚)都只是一个固定高度的,例如显示一些页码、LOGO等,不适合做其他的。 所以,你放了一个可以自动增高的Memo,当Memo高度大于Foolter时,就可能会有问题了。 我记得Picture可以固定位置的,而且不会被其他控件影响。
加载更多回复(1)

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧