因为照片是jpg格式,且保存在文件夹中而不是保存在数据库中,数据库中只保存文件路径。怎么实现在报表预览时动态载入照片?
FastReport能不能实现?如果不能,有没有其它能实现的报表控制?
我用的是Delphi6.
FastReport能不能实现?如果不能,有没有其它能实现的报表控制?
我用的是Delphi6.
解决方案 »
- 急,请教一个关于窗口showmodal后的问题。
- 为什么要关闭两次才能将数据库里的数据删除?
- 菜鸟提问:程序打包发布问题(sql server 2000+bde+多层) 使用installshield express
- 有没有办法用命令将richedit的scrollbar自动向下滚动?
- 哈哈,想给分,都不会给。。。
- ----关于SQL登录服务密码是如何加密的!---
- 请教一个菜鸟的问题:字符的ANCII码范围
- LI = [0..4,11..19,20,31..36,41]
- 一个关于SQL的问题
- ======= 关于WindowProc
- 怎样把一段指令或者一个pe文件(exe,dll)加载到内存运行?upx,aspack之类的怎么做的?
- 用delphi打开excel时候,如何让excel的保存按钮和文件->保存功能失效?
var FRName,JpgPath:string;
t1:TfrPictureView;
begin
FRName:='c:\myfr.frf';
JpgPath:='c:\1.jpg';//你可以把数据库中保存的文件路径赋值给JpgPath frReport1.LoadFromFile(FRName); t1:=TfrPictureView(frReport1.FindObject('Picture1'));//这两句实现动态载入照片,Picture1是你报表中显示照片的frPictureView控件名字。
if t1<>nil then t1.Picture.LoadFromFile(JpgPath); frReport1.ShowReport;
end;
按上述代码得到的结果是,所有照片都一样!
主要是要在适当的时候载入照片。我原来是在报表的OnProgress事件中载入照片的,但这时的报表还算是模板,故预览时就会被固定为一个照片。现在把载入照片的代码放到报表的OnBefore事件中执行,显示结果就正确了,因为这时报表已经不是模板,而是预览后的报表!
完整的代码如下:unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, FR_Class, jpeg, ExtCtrls, DBCtrls, DB, FR_DSet,
FR_DBSet, ADODB;type
TForm1 = class(TForm)
Image1: TImage;
frReport1: TfrReport;
Button1: TButton;
Button2: TButton;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
frDBDataSet1: TfrDBDataSet;
ADOTable1EmpNo: TStringField;
ADOTable1EmpName: TStringField;
ADOTable1Photo: TBlobField;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure frReport1BeforePrint(Memo: TStringList; View: TfrView);
private
{ Private declarations }
PV:TfrPictureView;
procedure LoadPhoto;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
var
i:Integer;
begin
with ADOTable1 do
begin
First;
for i:=0 to RecordCount - 1 do
begin
LoadPhoto;
Next;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
PV:=(frReport1.FindObject('Picture1') as TfrPictureView);
frReport1.ShowReport;
end;procedure TForm1.LoadPhoto;
var
S,FileName:String;
begin
S:= trim(ADOTable1.FieldByName('EmpNo').AsString);
FileName:='C:\Documents and Settings\Administrator\My Documents\My Pictures\'
+ S +'.jpg';
if FileExists(FileName) then
begin
PV.Picture.LoadFromFile(FileName);
end;
end;procedure TForm1.frReport1BeforePrint(Memo: TStringList; View: TfrView);
begin
LoadPhoto;
end;end.
另:TfrPictureView可以设置数据库字段的,只不过不是通过双击设置,而是在属性对话框中设置,按F11显示FastReport的属性对话框。