線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3902
推到 Plurk!
推到 Facebook!

在FastReport中調用Delphi變數

答題得分者是:pedro
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-26 14:35:00 IP:119.127.xxx.xxx 未訂閱
大家好!

請問在FastReport中怎樣調用Delphi主程式中的變數?

比如說我在Delphi程式中宣告一個變數 bt := False,

然後我在FastReport在要依據 bt = False or True來顯示欄位內容.

可是直接用 if bt then 會提示 'bt識別字未宣告',

請問如何是好!謝謝!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-26 15:13:34 IP:60.248.xxx.xxx 未訂閱
在Memo1的Text設成[bt]

[code delphi]
procedure TForm1.frxReport1GetValue(const VarName: String;
var Value: Variant);
var
bt:boolean;
rstr:string;
begin
if bt then
rstr:='aaaaaa'
else
rstr:='bbbbb';
if VarName='bt' then
Value:=bt;
end;

[/code]
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-26 17:22:23 IP:119.127.xxx.xxx 未訂閱
Pedro:

您好!
首先謝謝你的回覆!
我在FastReport中不是要顯示bt的內容,
而是在某個frxMemoView的事件中需要以Delphi中的bt變數來判斷以決定該frxMemoView的顯示的不同.
所以我就在frxMemoView的AfterData事件中來判斷.
代碼如下:
if bt then
Memo1.Color := clRed
else
Memo1.Color := clNone ;
但這樣就顯示報表時就會提示bt識別字未宣告.
請繼續關注,謝謝!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-26 18:01:30 IP:60.248.xxx.xxx 未訂閱

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
bt:boolean;
mo:TFrxMemoView;
begin
mo:=frxReport1.FindObject('Memo1') as TfrxMemoView;
mo.Text:='xxxx';
if bt then
mo.Color:=clSkyBlue
else
mo.Color:=clWindow;
end;
[/code]
chris681016
中階會員


發表:69
回覆:122
積分:98
註冊:2006-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-26 18:07:48 IP:211.75.xxx.xxx 訂閱
我是寫在frxReport1BeforePrint事件
procedure Tfreport_400.frxReport1BeforePrint(Sender: TfrxReportComponent);
var qty_d,amt_d:currency;
kind,a:string;
begin
inherited;
if Sender is TfrxMasterData then
BEGIN
kind:=trim(R_DS.fieldbyname('kind').asstring);
TfrxGradientView(frxReport1.FindObject('Gradient3')).BEGINCOLOR:=clWhite;
TfrxGradientView(frxReport1.FindObject('Gradient3')).endCOLOR:=clSkyBlue;

if kind='1' then TfrxMemoView(frxReport1.FindObject('memo16')).memo.text:='進';
if kind='A' then TfrxMemoView(frxReport1.FindObject('memo16')).memo.text:='銷';
if (kind='B') OR (kind='2') then
begin
IF KIND='B' then TfrxMemoView(frxReport1.FindObject('memo16')).memo.text:='進退';
IF KIND='2' then TfrxMemoView(frxReport1.FindObject('memo16')).memo.text:='銷退';
TfrxGradientView(frxReport1.FindObject('Gradient3')).BEGINCOLOR:=clWhite;
TfrxGradientView(frxReport1.FindObject('Gradient3')).endCOLOR:=$008080FF;
end;
end;
end;
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-02-27 10:50:54 IP:119.127.xxx.xxx 未訂閱
謝謝兩位的回覆!

兩位的回覆都是在Delphi主程式中寫的代碼,而不是在FastReport程式區寫代碼.
是不是FastRoprt程式區不能用Delphi主程式中的變數或函數或副程式?
我想要知道這個問題,謝謝!
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-02-27 11:29:26 IP:60.248.xxx.xxx 未訂閱
是不行的,在delphi的變數及fastreport的變數,彼此是不認得的
利用上述去達到你要的需求(我常這樣用沒什麼問題)
或利用下述去做(剛才才試出來,沒大量驗證過)

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
bt:boolean;
begin
bt:=True;
frxReport1.script.Variables['bt']:=bt;
// frxReport1.Variables.AddVariable('bt','boolean',false);
frxReport1.ShowReport();
end;
...
procedure Memo1OnBeforePrint(Sender: TfrxComponent);
begin
if bt then
Memo1.Color:=clYellow
else
Memo1.Color:=clRed;
end;
[/code]
編輯記錄
pedro 重新編輯於 2009-02-27 11:30:36, 註解 無‧
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-02-27 14:02:21 IP:119.127.xxx.xxx 未訂閱
非常謝謝兩位,我明白了~~
Victor4022
中階會員


發表:0
回覆:76
積分:90
註冊:2011-02-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-02-20 20:25:14 IP:122.126.xxx.xxx 訂閱

refrence : http://www.fast-report.com/pbc_download/fs_en.pdf

Fastreport 4 可以呼叫外部自己寫的程式:
Step1. 在自己的程式內使用TfrxReport.AddFunction
Step2. 在自己的程式內實作TfrxReport.OnUserFunction
Step3. 在.fr3 的程式區就可以正常使用程式內export出來的sub function

同上步驟, AddVariable也能滿足您的需求, 不知道是否有解答您的問題?
系統時間:2024-04-26 22:33:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!