关于FASTREPORT文本框大小的问题 |
答題得分者是:zxy666666
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
主要目的:不让他人在没有软件源程序的情况下直接通过修改FR3文件来修改打印标题。(注:票据打印标题为防他人盗版使用)
构思:在FR3中的标题(memo)中,写变量,就是这个MEMO中的文字是通过变量指定的,而变量是写在软件源程序中的,如果直接在FR3文件中删除或修改文字将导致打印无法进行。缺点:别人将momo调到最小而不删除,然后再写一个MEMO就同样好修改了。对策:限制别人调整MEMO大小。在源程序中要检查MEMO的大小,如大小不对不进行打印,或者直接在源程序中指定MEMO的大小。不知道这样对打印的效率会不会有大影响,如果没有大影响的话就这么做可行吗?检查或指定MEMO大小的代码如何写?谢谢!
------
我的编程起步于ktop,我将永远支持ktop |
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
Hi,ntjrr, 检查指定MEMO的代码如下,在fr的BeforePrint事件中:
〔Code〕
procedure TForm1.frReport1BeforePrint(Memo: TStringList; View: TfrView);
begin
if (view.name='Memo1') then
if (Tfrmemoview(view).Prop['Height']<>'22') or
(Tfrmemoview(view).Prop['Width']<>'94') or
(Tfrmemoview(view).Prop['Visible']<>'True') then
begin
//show出错误信息
abort;
end;
end;
〔/Code〕
因我使用的是FR2.5,与FR3会有一点不同,你自己再改一改。 唵嘛呢呗咪吽
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
在FR3中该事件是这样写的:
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent );
我把(Memo: TStringList; View: TfrView);加在后面,或者直接替代,都会在这一行上提示错误,另一种构思行不行的:就是指定大小多少,VISIBLE为TRUE,(其实指定的和设计的是一样),而不去检查,哪种效率高? 發表人 - ntjrr 於 2005/08/08 17:56:17
------
我的编程起步于ktop,我将永远支持ktop |
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
Hi,ntjrr,如你所言,
在FR3中该事件是这样写的:
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent ); 我想应该可以这样做的:
if (Tfrxview(Sender).Prop['Height']<>'22') 你说的这两种方式都能达到目的。
如果要说效率,究竟是赋值句快,还是判断句快。我想是应该是赋值句。
我曾经试过在Show出报表之前设定上百个分布三十页报表里的Memo与Picture的属性(大小及Memo等),没感觉速度变慢。 唵嘛呢呗咪吽
|
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
也可以这样写:
{code}
procedure TForm1.Button1Click(Sender: TObject);
var
page:Tfrpage;
begin
frreport1.LoadFromFile('c:\test.frf');
page:=frreport1.Pages[0]; //假设报表在设计状态下只有一页
page.FindObject('Memo1').Prop['Visible']:=true;
page.FindObject('Memo1').Prop['Height']:=22;
//......
frreport1.ShowReport;
end;
{/code} 唵嘛呢呗咪吽
|
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
结合了前辈的指点,又查找了一些相关的资料,最终运行成功的代码如下:
procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent);
var
t:TfrxMemoView;
begin
t := TfrxMemoView(frxReport1.FindObject('Memo17'));
t.memo.text:='一二三四五六七';
t.Visible:=true;
t.Width:=120;
t.Height:=50;
t.Left:=100;
t.Top:=16;
哪位前辈再帮我查看一下代码有无不妥之处,如果没有不合适的,就写在这里抛砖引玉。谢谢!
------
我的编程起步于ktop,我将永远支持ktop |
zxy666666
中階會員 ![]() ![]() ![]() 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
|
zxy666666
中階會員 ![]() ![]() ![]() 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
引言: 结合了前辈的指点,又查找了一些相关的资料,最终运行成功的代码如下:應該沒有問題吧? t := TfrxMemoView(frxReport1.FindObject('Memo17')); 是不是也可以寫成這樣 t := TfrxMemoView(frxReport1.FindComponent('Memo17')); 我覺得你的問題還是直接在打印前用變量指定標題文字,這樣不就很簡單了嗎?procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent); var t:TfrxMemoView; begin t := TfrxMemoView(frxReport1.FindObject('Memo17')); t.memo.text:='一二三四五六七'; t.Visible:=true; t.Width:=120; t.Height:=50; t.Left:=100; t.Top:=16;哪位前辈再帮我查看一下代码有无不妥之处,如果没有不合适的,就写在这里抛砖引玉。谢谢! |
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
引言: 结合了前辈的指点,又查找了一些相关的资料,最终运行成功的代码如下: procedure TForm1.frxReport1BeforePrint(Sender: TfrxReportComponent); var t:TfrxMemoView; begin t := TfrxMemoView(frxReport1.FindObject('Memo17')); t.memo.text:='一二三四五六七'; t.Visible:=true; t.Width:=120; t.Height:=50; t.Left:=100; t.Top:=16; 哪位前辈再帮我查看一下代码有无不妥之处,如果没有不合适的,就写在这里抛砖引玉。谢谢!Hi,ntjrr, 我知道在Fr2.5里,onbeforeprint事件是每画一个元件都会触发一次的,fr3.0是不是这样,你写一句showmessage测试一下好了。如果如我所言是每画一个元件都会触发一次的,则你这段代码也会运行N次,效率极低。所以建议加上判断式来判断是否是Memo17,再运行代码;或者干脆将这段代码写在触发打印的Button的Onlick下就好了。 同时谢谢ntjrr、zxy666666告诉我怎样用代码缩排。 唵嘛呢呗咪吽 |
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
ntjrr
高階會員 ![]() ![]() ![]() ![]() 發表:240 回覆:312 積分:110 註冊:2005-04-24 發送簡訊給我 |
|
xxiaowang
中階會員 ![]() ![]() ![]() 發表:51 回覆:75 積分:55 註冊:2005-01-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |