翻譯|使用教程|編輯:李顯亮|2020-05-18 11:17:29.860|閱讀 745 次
概述:FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文檔創建VCL庫。本文是關于它的一個實例:將JSON格式的股票報價生成了一份報告。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
報表生成器FastReport VCL是用于在您的軟件中集成商務智能的現代解決方案。它提供了可視化模板設計器,可以訪問最受歡迎的數據源,報告引擎,預覽,將過濾器導出為30多種格式,并可以部署到云,Web,電子郵件和打印中。
近日,FastReport VCL升級到v6.6版,在此版本中,所有面板隱藏在“Data Tree”數據樹,添加了新的線性條形碼類型:Pharmacode,改進了預覽窗口中的搜索,感興趣的朋友可點擊下方按鈕下載最新版。
您可以點擊此處,下載本文教程完整的演示Demo。
根據文檔要求,為了獲得股票報價,需要使用GET請求“歷史記錄”
 
 
創建一個應用程序并將組件添加到表單中:
frxReport1: TfrxReport; JSON_DS: TfrxUserDataSet; ButtonConnectToJSON: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; ComboBoxName: TComboBox; ComboBoxResolution: TComboBox; DateTimePickerFrom: TDateTimePicker; Label4: TLabel; DateTimePickerTo: TDateTimePicker; ButtonShowReport: TButton; Image1: TImage; Label5: TLabel; StatusBar1: TStatusBar; ButtonDesign: TButton; frxDesigner1: TfrxDesigner; frxChartObject1: TfrxChartObject; frxPDFExport1: TfrxPDFExport;
 
 
將項目添加到ComboBoxName和ComboBoxResolution
ComboBoxName.Items := 'GAZP SBER BRENT MOEX ROSN YNDX RUAL'; ComboBoxResolution.Items := '1 5 15 30 45 60 120 180 240 D W M';
添加全局變量
var tHTTP: TfrxTransportHTTP; frxJSON: TfrxJSON; Res: String; Symbol,Resolution,FromCandlesHistory,ToCandlesHistory : String; frxJSONArrayT,frxJSONArrayC,frxJSONArrayO, frxJSONArrayH,frxJSONArrayL,frxJSONArrayV: TfrxJSONArray; S: TStringStream;
在ButtonConnectToJSON按鈕的Click事件中,編寫以下代碼:
procedure TFormJSON.ButtonConnectToJSONClick(Sender: TObject);
begin
 frxReport1.LoadFromFile('ChartJSON.fr3');
 JSON_DS.RangeEnd := reCount;
 Symbol := ComboBoxName.Items[ComboBoxName.ItemIndex];
 Resolution := ComboBoxResolution.Items[ComboBoxResolution.ItemIndex];
 FromCandlesHistory := DateTimeToUnix(DateTimePickerFrom.DateTime).ToString;
 ToCandlesHistory := DateTimeToUnix(DateTimePickerTo.DateTime).ToString;
 
//Creating a TfrxTransportHTTP Object for a GET Request over HTTPS
 
 tHTTP := TfrxTransportHTTP.Create(nil);
 try
 
//We form a GET request string and get a response in JSON format
 
 Res := tHTTP.Get('//api.bcs.ru/udfdatafeed/v1/history?symbol='
 +Symbol+
 '&resolution='+Resolution +
 '&from='+ FromCandlesHistory+
 '&to='+ToCandlesHistory);
 
// if JSON is received incorrectly, then load it from the file and display a message in StatusBarr
 
 if (Res = '') or (pos('"s":"ok"',Res) = 0) then
 begin
 StatusBar1.SimpleText := 'Error loading JSON';
 S := TStringStream.Create('', TEncoding.UTF8);
 try
 S.LoadFromFile('JSON/'+Symbol+'.json');
 finally
 Res:= S.DataString;
 FreeAndNil(S);
 end;
 StatusBar1.SimpleText := 'Successful JSON loading from file '+Symbol+'.json';
 end
 else
 begin
 StatusBar1.SimpleText := 'Successful JSON('+Symbol+') loading';
 end;
 
// We load the received JSON from the Res line into the frxJSON object: TfrxJSON
 
 frxJSON := TfrxJSON.Create(Res);
 try
 if frxJSON.IsValid then
 begin
 StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Valid';
 
// Read arrays
 
 if frxJSON.IsNameExists('t') then
 frxJSONArrayT := TfrxJSONArray.Create(frxJSON.ObjectByName('t'));
 frxJSONArrayC := TfrxJSONArray.Create(frxJSON.ObjectByName('c'));
 frxJSONArrayO := TfrxJSONArray.Create(frxJSON.ObjectByName('o'));
 frxJSONArrayH := TfrxJSONArray.Create(frxJSON.ObjectByName('h'));
 frxJSONArrayL := TfrxJSONArray.Create(frxJSON.ObjectByName('l'));
 frxJSONArrayV := TfrxJSONArray.Create(frxJSON.ObjectByName('v'));
// Prepare JSON_DS by clearing and adding fields
 JSON_DS.Fields.Clear;
 JSON_DS.Fields.Add('Ticker');
 JSON_DS.Fields.Add('Date');
 JSON_DS.Fields.Add('Time');
 JSON_DS.Fields.Add('Open');
 JSON_DS.Fields.Add('Close');
 JSON_DS.Fields.Add('High');
 JSON_DS.Fields.Add('Low');
 JSON_DS.Fields.Add('Vol');
 JSON_DS.RangeEndCount := frxJSONArrayT.Count;
 end
 else StatusBar1.SimpleText :=StatusBar1.SimpleText +' /JSON is Invalid';
 finally
 end;
 finally
 end;
end;
要通過JSON_DS組件TfrxUserDataSet從數組frxJSONArrayT,frxJSONArrayC,frxJSONArrayO,frxJSONArrayH,frxJSONArrayL,frxJSONArrayV生成報告時獲取數據,需要使用OnGetValue事件:
procedure TFormJSON.JSON_DSGetValue(const VarName: string; var Value: Variant); var Item: string; Time : string; begin Item := frxJSONArrayT.GetString(JSON_DS.RecNo); DateTimeToString(Time, 't', UnixToDateTime(StrToInt64(Item))); if VarName = 'Ticker' then begin Value := Symbol; exit; end else if VarName = 'Date' then begin Value := DateToStr(UnixToDateTime(StrToInt64(Item)))+' '+Time; exit; end else if VarName = 'Time' then begin Value := Time; exit; end else if VarName = 'Open' then Item := frxJSONArrayO.GetString(JSON_DS.RecNo) else if VarName = 'Close' then Item := frxJSONArrayC.GetString(JSON_DS.RecNo) else if VarName = 'High' then Item := frxJSONArrayH.GetString(JSON_DS.RecNo) else if VarName = 'Low' then Item := frxJSONArrayL.GetString(JSON_DS.RecNo) else if VarName = 'Vol' then Item := frxJSONArrayV.GetString(JSON_DS.RecNo); Value := Item; end;
接下來,在報表設計器中創建一個模板,將其命名為ChartJSON.fr3并將JSON_DS連接到它。
 
 
要顯示圖表,請使用TeeChart Pro VCL軟件包中的Candle系列,并連接到JSON_DS。
 
 
接下來,為其余按鈕添加Click事件處理程序:
procedure TFormJSON.ButtonDesignClick(Sender: TObject); begin if (Res = '') then ButtonConnectToJSON.Click; frxReport1.DesignReport(); end; procedure TFormJSON.ButtonShowReportClick(Sender: TObject); begin if (Res = '') then ButtonConnectToJSON.Click; frxReport1.ShowReport(); end;
我們還為ComboBoxName,DateTimePickerFrom和DateTimePickerTo添加了Change事件處理程序:
procedure TFormJSON.ComboBoxNameChange(Sender: TObject); begin ButtonConnectToJSON.Click; end; procedure TFormJSON.DateTimePickerFromChange(Sender: TObject); begin ButtonConnectToJSON.Click; end; procedure TFormJSON.DateTimePickerToChange(Sender: TObject); begin ButtonConnectToJSON.Click; end;
同樣,在關閉應用程序時,請不要忘記釋放已使用對象的內存。
procedure TFormJSON.FormClose(Sender: TObject; var Action: TCloseAction); begin tHTTP.Free; frxJSON.Free; frxJSONArrayT.Free; frxJSONArrayC.Free; frxJSONArrayO.Free; frxJSONArrayH.Free; frxJSONArrayL.Free; frxJSONArrayV.Free; end;
接下來,運行應用程序。
 
 
在此應用中,您可以選擇所需的股票。
 
 
還可以使用日歷選擇所需的日期范圍。
 
 
當單擊“連接到JSON”,“顯示報告”或“ D”按鈕時,以及更改共享的日期或名稱時,都會發生與JSON的連接,并顯示有關連接狀態的消息。
 
 
當單擊“顯示報告”按鈕時,將生成一個報告并顯示其預覽。
 
 
恭喜,您使用GET請求收到了JSON格式的股票報價,并將JSON連接到FastReport VCL 6并生成了一個報告。
	
 
還想要更多嗎?您可以點擊閱讀【FastReport 報表2019最新資源盤點】,查找需要的教程資源。如果您有任何疑問或需求,請隨時加入FastReport技術交流群(783996712),我們很高興為您提供查詢和咨詢。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn