fasrreport,程序非法操作(200分)

  • 主题发起人 主题发起人 wangfei1234567
  • 开始时间 开始时间
W

wangfei1234567

Unregistered / Unconfirmed
GUEST, unregistred user!
我用fastreport做打印报表,但是程序只能在我的机子上运行,在别人的计算机上总是非
法操作,请教各位大虾,该怎么办?谢谢!
 
你把你写的输出代码贴上来!!
 
你试试只添加控件和设计报表试试,不要添加任何代码.
然后拿到其它机器上试试,如果没有什么问题.
//你再把你的输出代码贴上来看看.
//或者你去下载一个用fastreport做报表的软件也在你所有的
机器上都试试,看别人做的有没有问题.
可以到delphi.mychangshu.com,www.playicq.com看有没有.
 
你用什么版本,我的2.44很正常啊, 我装2.45时经常遇到小问题.
 
我用的是2.45的版本
我的代码是 frreport1.LoadFromFile('report/hzb.frf');
if frreport1.PrepareReport then
begin
frreport1.ShowPreparedReport;
我把打印的那部分去掉,程序在其他机子都可以运行的
 
我真希望你的系统不是2000,
如果你是在DLL里使用,
你就中奖了
 
fastreport,reportmachine
都有这种问题
 
onlyonekgx你好!
我用的正是2000,别人的机子也有2000,也有98的,但我不是在 DLL中使用的,如果是这样的话
应该怎么解决呢?谢谢
 
那应该怎么办呢?
 
FastReport,ReportMachine,
我都用过,后来就是因为在主程序退出时会出现非法操作(在中DLL使用),
我就放弃了,还是使用QR!我问过ReportMachine
的作者,他自己也说不清原因,
不过我试了不在DLL中使用ReportMachine,好象没有问题!(注:FastReport与
ReportMachine其实是一样的东西)

 
之前我一直用QR的,可是发现换行问题很烦,所以就改用FASTREPORT了,没想到问题还是很多
,主要是我做的东西过两天就要了,时间可能要来不及,请问您,您用QR的时候,您解决了
换行问题了吗?
 
当然解决了
 
换行函数:
function TfrmTechReport.AdjustReport(QRBand:TQRBand;txt:TQRDBText;var blnDetailFlag:Boolean;
QRShape:TQRShape;intPos:integer;var Value:string):string;
var
strValue,strTmp:string;
i,intValue,intTmp,intCount:integer;
begin
strValue:=Trim(value);
intValue:=Length(strValue);
intTmp:=1;
intCount:=0;
strTmp:='';
if intValue>intPos then
begin

while intTmp<=intValuedo
begin
if ByteType(strValue,intPos+intTmp-1)=mbLeadByte then
//双字符中间
begin
strTmp:=strTmp+Copy(strValue,intTmp,intPos-1)+#10#13;
intTmp:=intTmp+intPos-1;
intCount:=intCount+1;
end
else
begin
strTmp:=strTmp+Copy(strValue,intTmp,intPos)+#10#13;
intTmp:=intTmp+intPos;
intCount:=intCount+1;
end
end;

Result:=strTmp;
txt.top:=5;
txt.Height:=14*intCount;
if blnDetailFlag then
exit;
QRBand.Height:=14*(intCount+1);
QRShape.Top:=QRBand.Height-4;
//横线
for I:=0 to QRBand.ControlCount-1do
begin
if QRBand.Controls is TQRShape then
if TQRShape(QRBand.Controls).Shape=qrsVertLine then
begin
TQRShape(QRBand.Controls).Height:=QRBand.Height;

TQRShape(QRBand.Controls).Top:=0;
end;
end;

blnDetailFlag:=true;
end
else
begin
Result:=strValue;
txt.top:=5;
txt.Height:=14;
if blnDetailFlag then
exit;
QRBand.Height:=24;
QRShape.Top:=QRBand.Height-4;
for I:=0 to QRBand.ControlCount-1do
begin
if QRBand.Controls is TQRShape then
if TQRShape(QRBand.Controls).Shape=qrsVertLine then
begin
TQRShape(QRBand.Controls).Height:=QRBand.Height;
TQRShape(QRBand.Controls).Top:=0;
end;
end;
end;
end;
 
那请教一下,您是怎么解决的?我实在没办法了
 
参数意义:
QRBand:TQRBand;
调用函数的QRDBText所在的QRBAND
txt:TQRDBText;
调用函数的QRDBText
var blnDetailFlag:Boolean;
此参数是考虑多个字段的换行问题定义一个布尔变量,
在QRBand 的BeforPrint 事件里让此变量的值为false
QRShape:TQRShape;
此参数为报表中的横线
intPos:integer;
换行的位置
var Value:string: QRDBText 的 Value
调用:
procedure TfrmTechReport.QRBand3BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
blnMat:=false;
end;

procedure TfrmTechReport.QRDBText1Print(sender: TObject;
var Value: String);
begin
value:=AdjustReport(QRBand3,QRDBText1,blnMat,QRShape13,13,Value);
end;
 
我试试看
 
我已经说过很多次了,这个错误并不是ReportMachine,FastReport的原因,可能是在dll放mdi child的方法
的原因,也可能是delphi的一个bug.
你可以试试这个例子,里面只是动态创建并显示一个Form,多点几次就出错:
http://rmachine.y365.com/download/dllmdi.zip
 
后退
顶部