我用FastReport设计了一张报表,里面大概有十多个memo,都只设置了适当的打印格式,内容在打印前才动态设置。
    我在procedure Tform1.Report1GetValue(const ParName: String; var ParValue: Variant);里面使用if parname='Memo1' then Parvalue:='123';这种方工不能实现。
    又尝试report1.showpreparereport前加入以下类似语句
Report1.findobject('Memo1').memo.text :='123';运行时报错:
"Access violation at address XXXXXXXX in module 'XXXXXX.exe'.Read of address XXXXXX"
请问各位大侠我该怎么做才对呢?

解决方案 »

  1.   

    我还想问一下,如何把Form1.edit1.text的字符串写进FastReport中的Memo1中去?
      

  2.   

    Q1:
    函数procedure Report1GetValue(const ParName: String; var ParValue: Variant);中
    参数ParName指的是变量参数名,而不是控件名称。
    你在报表的Memo1控件里面输入文字[Memo1],用你的方法,预览出来就是'123'了。
    fastreport中,用[]括起来的叫做变量。也就是会作为ParName传给TfrReport.GetValue函数。Q2:
    //首先你要在你想显示Form1.edit1.Text的Memo里设置一个变量,例如[MyName]
    procedure Report1GetValue(const ParName: String; var ParValue: Variant);
    begin
      if CompareText(ParName,'MyName') = 0 then
        ParValue := Form1.edit1.Text;
    end;
      

  3.   

    with FrmFrpreview do
    begin
      frReport1.LoadFromFile(ExtractFilePath(Application.ExeName)+ 'WaterNesting.frf');
      frReport1.FindObject('MVChargeDate').Memo.Text      := FormatDateTime('yyyy-mm-dd',Now);
            frReport1.FindObject('MVUnitName').Memo.Text     := gUnitName;
            frReport1.FindObject('MVUserName').Memo.Text         := UserName;
            frReport1.FindObject('MVUserId').Memo.Text       := UserId;
            frReport1.FindObject('MVUserAddress').Memo.Text  := Address;
            frReport1.FindObject('MVOperatorId').Memo.Text     := gOpID;
            frReport1.FindObject('MVBigRMB').Memo.Text       := ToBigRMB(gPlanSum);
            frDBDataSet1.DataSet := frmDataModule1.ADOQuery1;
            frReport1.Dataset := frDBDataSet1;
            frReport1.Preview := frPreview1;
            frReport1.ShowReport;
          end;