有关fastreport中分页问题 |
答題得分者是:pedro
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
給您提示一下實作思考方向
1.報表裡放置FrxPictureView,連結到DataSet(ClientDataSet)的bmp欄位,欄位型態為TBlobField 2.把Memo的內容依固定長度(報表裡FrxPictureView的Height),用迴圈處理 透過http://www.delphipages.com/tips/thread.cfm?ID=257 這種方式切割存到bmp檔. 3.把上面存的檔檔用append載入到ClientDataSet裡 4.也就是說ClientDataSet已存多筆裁切好的bmp圖像 大概示意的程式碼是這樣(沒經過實測,可能要你自己調校) (以下是採圖像裁切,若採用文字格式,大概思維方式差不多,請自行處理) [code delphi] procedure PrepareReport; const perHeight=500; var bmp,bmp1: TBitmap; i:Integer; btop,bcount:Integer; stream:TMemoryStream; begin bcount:=Memo1.Height div PerHeight; bmp := TBitmap.Create; try if TreeView1.Width>500 then bmp.Width:=500 else bmp.Width := perHeight; bmp.Height := 500; bmp.Canvas.Lock; try Memo1.Perform(WM_PRINT, bmp.Canvas.Handle, PRF_CHILDREN or PRF_CLIENT or PRF_NONCLIENT); finally bmp.Canvas.UnLock; ClientDataSet1.Close; ClientDataSet1.CreateDataSet; for i:=0 to bcount do begin btop:=i*PerHeight; bmp1:=TBitmap.Create; bmp1.Width:=bmp.Width; bmp1.Height:=PerHeight; bmp1.Canvas.CopyRect(Rect(0,0,Memo1.Width,PerHeight),bmp.Canvas,Rect(0,btop,Memo1.Width,btop PerHeight)); stream:=TMemoryStream.Create; bmp1.SaveToStream(stream); ClientDataSet1.Append; TBlobField(ClientDataSet1.FieldByName('bmp')).LoadFromStream(stream); ClientDataSet1.Post; bmp1.Free; stream.Free; end; end; finally bmp.Free; end; [/code]
編輯記錄
pedro 重新編輯於 2008-08-22 17:35:41, 註解 無‧
|
chinyu
高階會員 發表:12 回覆:157 積分:153 註冊:2002-06-14 發送簡訊給我 |
|
like
一般會員 發表:30 回覆:35 積分:18 註冊:2005-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |