1. 程式人生 > >DELPHI版塊RAVE報表上解決的問題(zz)

DELPHI版塊RAVE報表上解決的問題(zz)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

 

我在DELPHI版塊RAVE報表上解決的問題較多,而且發現提出的問題都有很大的相似性(本來提交了幾個FAQ,但不知何時才能通過稽核),所以就先整理一下自己的一點經驗,希望能帶給大家一點幫助,如果你覺得沒什麼用大可不必看.:)
以下的程式在XP+D6+Rave5.1下除錯通過,
問題1:動態的設定報表中的內容
   uses
     RVClass, RVProj, RVCsStd; 
   var
     MyPage: TRavePage;
     MyText: TRaveText; 
   begin
     RaveProject1.Open;
     With RaveProject1.ProjMan do begin
       MyPage := FindRaveComponent('Report1.Page1',nil) as TRavePage; //查詢PAGE
       MyText := FindRaveComponent('Text1',MyPage) as TRaveText; //查詢TEXT
       MyText.Text := 'Boland Delphi'; //設定報表中文字內容
       MyText.Color := clGreen; //設定顏色
     end; { with }
     RaveProject1.ExecuteReport('Report1');
     RaveProject1.Close;
   end;

問題2:儲存報表為HTML或PDF格式(對於PDF格式不支援中文)
   rvproject1.projectfile :='E:/delphi/rave/files/test.rav';
   rvproject1.Open;
   rvproject1.SelectReport('report1',true);//選擇要列印的報表
   RvSystem1.DoNativeOutput:=false;
   RvSystem1.DefaultDest:= rdFile;//儲存成檔案
   RvSystem1.RenderObject:=RvRenderHTML1;//儲存成HTML格式 或RPRenderPDF1;
   RvSystem1.OutputFileName:='files/test.html'; //存放的路徑
   RvSystem1.SystemSetups:=RvSystem1.SystemSetups-[ssAllowSetup];
   try
      rvproject1.Execute;
   except
      ShowMessage('生成報表檔案錯誤!');
   end;
   對於只有一頁報表那是沒有問題的,但對於多頁在D6下和D7有所不同.D6下可以生成許多頁,但D7下卻
   不行,不知為什麼?D6下的RAVE版本是5.1,
  
問題3: IntraWeb和Rave的無縫連線
       我的思路就是先把報表儲存成HTML或PDF格式,然後再用IE呼叫
      const
          AIPOptions: string = 'toolbar=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,location=no,directories=no,width=1000,height=700';
      var
          aipurl :string;
      rvproject1.Open;
   rvproject1.SelectReport('report1',true);//選擇要列印的報表
   RvSystem1.DoNativeOutput:=false;
   RvSystem1.DefaultDest:= rdFile;//儲存成檔案
   RvSystem1.RenderObject:=RvRenderHTML1;//儲存成HTML格式
   RvSystem1.OutputFileName:='files/test.html'; //存放的路徑
   RvSystem1.SystemSetups:=RvSystem1.SystemSetups-[ssAllowSetup];
   try
      rvproject1.Execute;//生成報表
      AIPURL := WebApplication.URLBase + '/files/' + 'test.html';  //IE開啟第一頁報表
         AddToInitProc('NewWindow("' + AIPURL + '", "Agenda", "' + AIPOptions+'");');
   except
      webapplication.ShowMessage('生成報表檔案錯誤!');
   end; 

 問題4: 讓終端使用者動態的修改報表格式.
        with RvProject1 do
    begin
       DLLFile :='D:/Rave5/Redist/RaveSolo.dll'; //如果不指定此檔案則執行時會報出錯
       ProjectFile :='E:/delphi/rave/files/test.rav'; //指定RAV檔案
       LoadDesigner :=true;
       If Design then begin
            If MessageDlg(Trans('Save changes to project ') +
                                ProjectFile + '?',
                                mtConfirmation,
                                [mbYes,mbNo,mbCancel],0) = mrYes then
            begin
              Save;//儲存
            end; { if }
       end; { if }
    end;{with}
       此程式在D6+Rave5.1下除錯通過.在D7下就用Rave.dll


問題5: 設計時通過程式動態向報表增加一個TEXT
        uses
        RVClass, RVProj, RVCsStd,RvCsRpt;
       
  var
    MyBand: TRaveBand;
    MyRegion: TRaveRegion;
    MyPage: TRavePage;
    MyText,mytext1: TRaveText;
  begin
    RvProject1.Open;
    With RvProject1.ProjMan do begin
        MyPage := FindRaveComponent('Report1.Page1',nil) as TRavePage;
        MyRegion:= FindRaveComponent('Region1',MyPage) as TRaveRegion;
        MyBand := FindRaveComponent('Band1',MyRegion) as TRaveBand;
        MyText:=TRaveText.Create(Myband);
        MyText.Parent:=Mypage;
        MyText.Name:=GetUniqueName('Text125',MyPage,false);
        MyText.Top:=0.2;
        MyText.Left:=0.7;
        MyText.Width:=200;
        MyText.Height:=200;
        MyText.Text:='Delphi';       
        MyText.Font.Size :=20;//設定字型的屬性
        MyText.Font.Color :=ClRed;
        MyText.Font.Name :='隸書';
        AddComponent(MyText);
  
    end; { with }
    RvProject1.ExecuteReport('Report1');
    RvProject1.Close;
  
 問題6:在報表中插入日期或頁數
      在RAVE設計時增加一個DATATEXT控制元件,其DATAFIELD屬性有相關的設定
      Report Variables中有CurrentPage當前頁,TotalPages總頁數,DateShort短日期,DateLong長日期,
      TimeLong 長時間
     
 問題7:通過引數向報表傳值,和問題1有點相同
      With RaveProject1 do begin
      Open;
      SetParam('ParamName','ParamValue');
      ExecuteReport('Report1');
      Close;
    end; { with }
   
  
問題8:去掉列印預覽時出現的Output Options對話方塊
        RvSystem.SystemSetups中的ssAllowSetup 設為False
      
問題9:ndr格式轉化為pdf
    var
    NDRStream: TMemoryStream;
  begin
    NDRStream := TMemoryStream.Create;
    try
      NDRStream.LoadFromFile('files/test.ndr');
      RvRenderPDF1.PrintRender(NDRStream, 'files/test.pdf');
    finally
      NDRStream.Free;
    end; { tryf }
    ShowMessage('NDR Converted');
  end;    
  
問題10: 分欄顯示(snaking columns)
    name1     name6
    name2     name7
    name3     name8
    name4    
    name5     
    窗體新增以下控制元件Rvsystem1,table1,DataSource1 
    procedure TForm1.Button1Click(Sender: TObject);
  begin
    ReportSystem1.Execute;
  end;
  
  procedure TForm1.ReportSystem1Print(Sender: TObject);
  begin
    With (Sender as TBaseReport),Table1 do begin
      SetFont('Times New Roman', 20);
      Bold := True;
      Underline := True;
      Home;
      PrintCenter('NAME LISTING', PageWidth / 2.0);
      SectionTop := 1.0;
      MarginBottom := 0.75;
      Home;
      While not Table1.EOF do begin
        SetColumns(2,0.5);
        {OnNewColumn will be called after each call to SetColumns and on each
         new column after that}
  
        While (ColumnLinesLeft > 0) AND (NOT Table1.EOF) do begin
          If FieldByName('NAME').AsString <> '' then begin
            Println(FieldByName('NAME').AsString);
          end; {if}
          Table1.Next;
        end; {while}
  
        If not Table1.EOF then begin
          NewPage;
        end; {if}
      end; {while}
  
    end; { with }
  end;
  
  procedure TForm1.ReportSystem1BeforePrint(Sender: TObject);
  begin
    Table1.First;
  end;
  
  procedure TForm1.ReportSystem1NewColumn(Sender: TObject);
  begin
    With Sender as TBaseReport do begin
      SetFont('Times New Roman', 14);
      Bold := True;
      UnderLine := True;
      AdjustLine;
      Println(' NAME');
      SetFont('Arial',12);
      AdjustLine;
    end; {with}
  end;
  
  procedure TForm1.ReportSystem1PrintFooter(Sender: TObject);
  begin
    With  Sender as TBaseReport do begin
      MarginBottom := 0.5;
      PrintFooter('Page ' + Macro(midCurrentPage)
       + ' of ' + Macro(midTotalPages), pjCenter);
      MarginBottom := 0.75;
    end; {with}
  end;

問題11:通過rave面板中的textfiler把table中的內容直接列印到文字
       在窗體上增加table,textfiler,button;
  procedure TForm1.Button1Click(Sender: TObject);
  begin
   TextFiler1.FileName :='e:/rave/program/txtprint/tmp.txt';
    TextFiler1.Execute;
  end;
  
  procedure TForm1.TextFiler1Print(Sender: TObject);  
  var
    DoHeader: boolean;  
  begin
    With Sender as TBaseReport,Table1 do begin
      ClearTabs;
      SetTab(0.5,pjLeft,3.0,0,BOXLINENONE,0);
      SetTab(NA,pjLeft,3.0,0,BOXLINENONE,0);
      SetTab(NA,pjLeft,1.5,0,BOXLINENONE,0);
      First;
      DoHeader := true;
      While not EOF do begin
        If LinesLeft <= 0 then begin
          NewPage;
          DoHeader := true;
        end; { if }
        If DoHeader then begin
          PrintCenter('Customer Listing',PageWidth / 2.0);
          NewLine;
          NewLine;
          PrintTab('name');
          PrintTab('sex');
          PrintTab('age');
          NewLine;
          DoHeader := false;
        end; { if }
        PrintTab(FieldByName('name').AsString);
        PrintTab(FieldByName('sex').AsString);
        PrintTab(FieldByName('age').AsString);
        NewLine;
        Next;
      end; { while }
    end; { with }
  end;
  
問題12:設計好的Rave報表檔案如何打包到EXE檔案中
    在rvproject的屬性中有一個storerav,你只要load .rav檔案即可

問題13:格式化字串
    對於從資料來源取出的欄位如何格式化如price 在表中12345.25現要顯示為$12,345.2500
       只需在設計時修改Data View Dictionary->dataview1->dataviewprice中的displayFormat為
        $#,####,###.0000;

問題14:常常要USES到的單元   
  RvCsStd :TRaveText,TRaveMemo,TRaveSection,TRaveSection,TRaveMetaFile,
         TRaveFontMaster,TRavePageNumInit
              
RvClass:TRaveComponent,TRaveControl, TRaveContainerControl,
        TRaveContainerComponent,TRaveProjectItem,TRavePage        
           
RvCsData:TRaveDataText,TRaveDataMemo,TRaveCalcText,
 TRaveDataMirrorSection,TRaveDataCycle,    TRaveCalcOp,TRaveCalcTotal,TRaveCalcController    
   
RvCsBars: TRavePostNetBarCode,TRaveI2of5BarCode,TRaveCode39BarCode,TRaveCode128BarCode,TRaveUPCBarCode,TRaveEANBarCode         

RvCsDraw: TRaveLine,TRaveHLine,TRaveVLine,TRaveRectangle,
            TRaveSquare,TRaveEllipse, TRaveCircle      
    
RvDataField: TRaveStringField,TRaveIntegerField,
     TRaveBooleanField,TRaveFloatField,TRaveCurrencyField,TRaveBCDField,
     TRaveDateField,TRaveTimeField,TRaveDateTimeField,TRaveBlobField,
     TRaveMemoField,TRaveGraphicField,TRaveInt64Field
    
RvDatabase: TRaveDatabase


RvDirectDataView: TRaveDataView
                  TRaveDriverDataView
                 
RvProj:TRaveReport,TRaveProjectManager

RvSecurity:TRaveSimpleSecurity,TRaveLookupSecurity


RvCsRpt:TRaveRegion,TRaveBand,TRaveDataBand,TRaveIterateBand,
TRaveBandStyle,TRaveDataCycle,
  
 部分資料來源於RAVE開發人員指南 ravedevguide5
 新聞組News.Nevrona.com
 RAVE的官方主頁 www.nevrona.com/rave


問題16:列印JPEG
法一:在RAVE上增加JPEG控制元件
 Bitmap components can only display bitmaps, not jpegs.  You'll need the jpeg
add-on that's available from the Nevrona web site,
http://www.nevrona.com/rave/addons.shtml.

  Installation instructions for TRaveJPEGImage
--------------------------------------------

1: Extract the files in this archive in your Rave main directory
(normally d:/RAVE5).  Make sure to expand with directories so that the source
will be placed in it's own directory.

2: Copy the NDCsJPEG.PAS file into the appropriate directory for the version
of Delphi or C++Builder that you are using (for Delphi 6.0 it would normally
be d:/RAVE5/D6).

3: Start Rave, go to the preferences dialog (Edit|Preferences), select the
Packages tab and add the D:/RAVE5/ND_JPEG.BPL package file to the list of
installed package and click OK.

法二,程式中控制,具體參照//www.nevrona.com/rave/tips/rvtip31.html

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述