翻譯|使用教程|編輯:李顯亮|2020-05-18 11:17:29.860|閱讀 730 次
概述: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@fc6vip.cn