⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untactreport.pas.bak

📁 飞思科技的书不错
💻 BAK
📖 第 1 页 / 共 5 页
字号:
  for i := 0 to bandDetail.ControlCount - 1 do
    if bandDetail.Controls[i] is TQRExpr then begin
      strTemp := TQRExpr(bandDetail.Controls[i]).Expression;
      StripFieldName(strTemp);
      lstFieldNames.Add(strTemp);
    end;
  if lstFieldNames.Count = 0 then begin
    lstFieldNames.Free;
    Exit;
  end;

  posPre := -1;
  idxName := -1;
  idxNextField := -1;
  for i := 0 to bandDetail.ControlCount - 1 do
    if bandDetail.Controls[i] is TQRShape then
      with TQRShape(bandDetail.Controls[i]) do
        if Shape <> qrsVertLine then
          Continue
        else if posPre < 0 then
          posPre := 0
        else begin
          posCur := Size.Left;
          Inc(idxName);
          FindIndex(m_strlstFieldNames, lstFieldNames.Strings[idxName], idxNextField);
          if idxNextField = -1 then
            Break;
          m_dlstFieldWidths[idxNextField] := posCur - posPre;
          posPre := posCur;
        end;
  lstFieldNames.Free;
end;

procedure TActReport.ParamsFromReport;
begin
  if not m_bReportReady then
    Exit;
  GlobalParamsFromReport;
  FieldParamsFromReport;
end;

procedure TActReport.GlobalParamsFromForm;
var
  tmpInt: Integer;
begin
  GetEditValueByName(m_grpGlobalContainer, 'edtPaperWidth',
                     m_nPageWidth);
  GetEditValueByName(m_grpGlobalContainer, 'edtPaperHeight',
                     m_nPageHeight);
  GetComboValueByName(m_grpGlobalContainer, 'cmbPageOrientation',
                      tmpInt);
  m_oriPage := TPrinterOrientation(tmpInt);
  GetEditValueByName(m_grpGlobalContainer, 'edtPageHorMargin',
                     m_dPageHorMargin);
  GetEditValueByName(m_grpGlobalContainer, 'edtPageVertMargin',
                     m_dPageVertMargin);
  GetComboValueByName(m_grpGlobalContainer, 'cmbReportAlign',
                      tmpInt);
  m_alnReport := TAlign(tmpInt);
  GetCheckValueByName(m_grpGlobalContainer, 'chkFrameLine',
                      m_bHasFrameLine);
  GetCheckValueByName(m_grpGlobalContainer, 'chkSummary',
                      m_bHasSummary);
  GetEditValueByName(m_grpGlobalContainer, 'edtTitle',
                     m_strTitle);
  GetEditValueByName(m_grpGlobalContainer, 'edtTitleHeight',
                     m_dTitleHeight);
  GetRadioValueByName(m_grpGlobalContainer, 'grpHeaderAlign',
                      tmpInt);
  m_alnHeader := TAlign(tmpInt);
  GetEditValueByName(m_grpGlobalContainer, 'edtHeaderHeight',
                     m_dHeaderHeight);
  GetEditValueByName(m_grpGlobalContainer, 'edtDetailHeight',
                     m_dDetailHeight);
  GetEditValueByName(m_grpGlobalContainer, 'edtDetailMargin',
                     m_dDetailMargin);
end;

procedure TActReport.FieldParamsFromForm;
var
  i: Integer;
  tempStr: string;
  tmpInt: Integer;
begin
  for i := 0 to m_nFieldCount - 1 do begin
    GetCheckValue(m_chklstDisplay, i, m_blstDisplay[i]);
    GetEditValue(m_edtlstWidths, i, m_dlstFieldWidths[i]);
    GetEditValue(m_edtlstDispNames, i, tempStr);
    m_strlstDispNames.Strings[i] := tempStr;
    GetComboValue(m_cmblstAlign, i, tmpInt);
    m_alnlstFields[i] := TAlign(tmpInt);
    GetCheckValue(m_chklstSummary, i, m_blstSummary[i]);
  end;
end;

procedure TActReport.ParamsFromForm;
begin
  if not m_bPrepared then
    Exit;
  GlobalParamsFromForm;
  FieldParamsFromForm;
end;

procedure TActReport.GlobalParamsToForm;
begin
  SetEditValueByName(m_grpGlobalContainer, 'edtPaperWidth',
                     m_nPageWidth);
  SetEditValueByName(m_grpGlobalContainer, 'edtPaperHeight',
                     m_nPageHeight);
  SetComboValueByName(m_grpGlobalContainer, 'cmbPageOrientation',
                      Integer(m_oriPage));
  SetEditValueByName(m_grpGlobalContainer, 'edtPageHorMargin',
                     m_dPageHorMargin);
  SetEditValueByName(m_grpGlobalContainer, 'edtPageVertMargin',
                     m_dPageVertMargin);
  SetComboValueByName(m_grpGlobalContainer, 'cmbReportAlign',
                      Integer(m_alnReport));
  SetCheckValueByName(m_grpGlobalContainer, 'chkFrameLine',
                      m_bHasFrameLine);
  SetCheckValueByName(m_grpGlobalContainer, 'chkSummary',
                      m_bHasSummary);
  SetEditValueByName(m_grpGlobalContainer, 'edtTitle',
                     m_strTitle);
  SetEditValueByName(m_grpGlobalContainer, 'edtTitleHeight',
                     m_dTitleHeight);
  SetRadioValueByName(m_grpGlobalContainer, 'grpHeaderAlign',
                      Integer(m_alnHeader));
  SetEditValueByName(m_grpGlobalContainer, 'edtHeaderHeight',
                     m_dHeaderHeight);
  SetEditValueByName(m_grpGlobalContainer, 'edtDetailHeight',
                     m_dDetailHeight);
  SetEditValueByName(m_grpGlobalContainer, 'edtDetailMargin',
                     m_dDetailMargin);
  btnTitleFont.Font.Assign(m_fntTitle);
  btnHeaderFont.Font.Assign(m_fntHeader);
  btnDetailFont.Font.Assign(m_fntDetail);
end;

procedure TActReport.FieldParamsToForm;
var
  i: Integer;
begin
  for i := 0 to m_nFieldCount - 1 do begin
    SetCheckValue(m_chklstDisplay, i, m_blstDisplay[i]);
    SetEditValue(m_edtlstFieldNames, i, m_strlstFieldNames.Strings[i]);
    SetEditValue(m_edtlstWidths, i, m_dlstFieldWidths[i]);
    SetEditValue(m_edtlstDispNames, i, m_strlstDispNames.Strings[i]);
    SetComboValue(m_cmblstAlign, i, Integer(m_alnlstFields[i]));
    SetCheckValue(m_chklstSummary, i, m_blstSummary[i]);
  end;
end;

procedure TActReport.ParamsToForm;
begin
  if not m_bPrepared then
    Exit;
  GlobalParamsToForm;
  FieldParamsToForm;
end;

procedure TActReport.GlobalParamsFromFile(stream: TFileStream);
begin
  stream.Read(m_nPageWidth, SizeOf(m_nPageWidth));
  stream.Read(m_nPageHeight, SizeOf(m_nPageHeight));
  stream.Read(m_oriPage, SizeOf(m_oriPage));
  stream.Read(m_dPageHorMargin, SizeOf(m_dPageHorMargin));
  stream.Read(m_dPageVertMargin, SizeOf(m_dPageVertMargin));
  stream.Read(m_alnReport, SizeOf(m_alnReport));
  stream.Read(m_bHasFrameLine, SizeOf(m_bHasFrameLine));
  stream.Read(m_bHasSummary, SizeOf(m_bHasFrameLine));
  ReadString(stream, m_strTitle);
  stream.Read(m_dTitleHeight, SizeOf(m_dTitleHeight));
  ReadFont(stream, m_fntTitle);
  stream.Read(m_alnHeader, SizeOf(m_alnHeader));
  stream.Read(m_dHeaderHeight, SizeOf(m_dHeaderHeight));
  ReadFont(stream, m_fntHeader);
  stream.Read(m_dDetailHeight, SizeOf(m_dDetailHeight));
  stream.Read(m_dDetailMargin, SizeOf(m_dDetailMargin));
  ReadFont(stream, m_fntDetail);
end;

procedure TActReport.FieldParamsFromFile(stream: TFileStream);
var
  i: Integer;
  cntFieldsInFile: Integer;
  cntFieldsRead: Integer;
  tempStr: string;
begin
  stream.Read(cntFieldsInFile, SizeOf(cntFieldsInFile));
  cntFieldsRead := Min(cntFieldsInFile, m_nFieldCount);
  for i := 0 to cntFieldsRead - 1 do begin
    stream.Read(m_blstDisplay[i], SizeOf(m_blstDisplay[i]));
    stream.Read(m_dlstFieldWidths[i], SizeOf(m_dlstFieldWidths[i]));
    ReadString(stream, tempStr);
    m_strlstDispNames[i] := tempStr;
    stream.Read(m_alnlstFields[i], SizeOf(m_alnlstFields[i]));
    stream.Read(m_blstSummary[i], SizeOf(m_blstSummary[i]));
  end;
  for i := cntFieldsRead to m_nFieldCount - 1 do begin
    m_blstDisplay[i] := True;
    m_dlstFieldWidths[i] := c_band_width;
    m_strlstDispNames.Add(m_dstActive.FieldDefs[i].Name);
    m_alnlstFields[i] := a_left;
    m_blstSummary[i] := False;
  end;
end;

procedure TActReport.ParamsFromFile(strFileName: string);
var
  stream: TFileStream;
  strFileHeader: string;
begin
  if not m_bPrepared then
    Exit;
  try
    stream := TFileStream.Create(strFileName, fmOpenRead);
  except
    // ShowMessage('file load error : ' + strFileName);
    Exit
  end;

  ReadString(stream, strFileHeader);
  if strFileHeader = c_file_id then begin
    GlobalParamsFromFile(stream);
    FieldParamsFromFile(stream);
  end;
  stream.Destroy;
end;

procedure TActReport.GlobalParamsToFile(stream: TFileStream);
begin
  stream.Write(m_nPageWidth, SizeOf(m_nPageWidth));
  stream.Write(m_nPageHeight, SizeOf(m_nPageHeight));
  stream.Write(m_oriPage, SizeOf(m_oriPage));
  stream.Write(m_dPageHorMargin, SizeOf(m_dPageHorMargin));
  stream.Write(m_dPageVertMargin, SizeOf(m_dPageVertMargin));
  stream.Write(m_alnReport, SizeOf(m_alnReport));
  stream.Write(m_bHasFrameLine, SizeOf(m_bHasFrameLine));
  stream.Write(m_bHasSummary, SizeOf(m_bHasFrameLine));
  WriteString(stream, m_strTitle);
  stream.Write(m_dTitleHeight, SizeOf(m_dTitleHeight));
  WriteFont(stream, m_fntTitle);
  stream.Write(m_alnHeader, SizeOf(m_alnHeader));
  stream.Write(m_dHeaderHeight, SizeOf(m_dHeaderHeight));
  WriteFont(stream, m_fntHeader);
  stream.Write(m_dDetailHeight, SizeOf(m_dDetailHeight));
  stream.Write(m_dDetailMargin, SizeOf(m_dDetailMargin));
  WriteFont(stream, m_fntDetail);
end;

procedure TActReport.FieldParamsToFile(stream: TFileStream);
var
  i: Integer;
begin
  stream.Write(m_nFieldCount, SizeOf(m_nFieldCount));
  for i := 0 to m_nFieldCount - 1 do begin
    stream.Write(m_blstDisplay[i], SizeOf(m_blstDisplay[i]));
    stream.Write(m_dlstFieldWidths[i], SizeOf(m_dlstFieldWidths[i]));
    WriteString(stream, m_strlstDispNames[i]);
    stream.Write(m_alnlstFields[i], SizeOf(m_alnlstFields[i]));
    stream.Write(m_blstSummary[i], SizeOf(m_blstSummary[i]));
  end;
end;

procedure TActReport.ParamsToFile(strFileName: string);
var
  stream: TFileStream;
begin
  if not m_bPrepared then
    Exit;
  try
    stream := TFileStream.Create(strFileName, fmCreate);
  except
    ShowMessage('file save error : ' + strFileName);
    Exit;
  end;

  WriteString(stream, c_file_id);
  GlobalParamsToFile(stream);
  FieldParamsToFile(stream);
  stream.Destroy;
end;

function TActReport.BuildRep(strTitle: String;
                             bHasFrameLine: Boolean;
                             bHasSummary: Boolean;
                             nPageWidth, nPageHeight: Integer;
                             oriPage: TPrinterOrientation;
                             alnHeader: TAlign;
                             dHeightTitle, dHeightHeader, dHeightDetail: Currency;
                             dDetailMargin: Currency;
                             nSegbarWidth: Integer;
                             dPageHorMargin, dPageVertMargin: Currency;
                             fntTitle, fntHeader, fntDetail: TFont;
                             dftPageWidth, dftPageHeight: Integer;
                             dftWidth, dftHeight, dftMargin: Currency;
                             dftPageHorMargin, dftPageVertMargin: Currency;
                             lstIdxs: TIndexList;
                             lstDispNames: TStringList;
                             lstWidths: TCurrencyList;
                             lstAlign: TAlignList;
                             lstSummary: TBooleanList;
                             alnReport: TAlign)
                             : Boolean;
var
  i: Integer;
  tmpSize: TQRPrintableSize;

  upFields, initupFields: Integer;
  tmpStr: string;
  lstFieldNames: TStringList;

  posx: Currency;
  idxSummary: Integer;
  bandTitle, bandHeader, bandDetail, bandSummary: TQRCustomBand;

  sizeReportPos: TQRPrintableSize;
begin
  Result := False;
  ResetRep;
  // if dataset not prepared, return false
  if not m_bPrepared then
    Exit;

  upFields := High(lstIdxs);
  DefaultIfZero(nPageWidth, dftPageWidth);
  DefaultIfZero(nPageHeight, dftPageHeight);
  DefaultIfZero(dHeightTitle, dftHeight);
  DefaultIfZero(dHeightHeader, dftHeight);
  DefaultIfZero(dHeightDetail, dftHeight);
  DefaultIfZero(dDetailMargin, dftMargin);
  for i := 0 to upFields do
    DefaultIfZero(lstWidths[i], dftWidth);
  DefaultIfZero(dPageHorMargin, dftPageHorMargin);
  DefaultIfZero(dPageVertMargin, dftPageVertMargin);

  m_strTitle := strTitle;
  m_bHasFrameLine := bHasFrameLine;
  m_bHasSummary := bHasSummary;
  lstFieldNames := TStringList.Create;
  for i := 0 to upFields do
    lstFieldNames.Add(m_dstActive.FieldDefs[lstIdxs[i]].Name);
  // create the report
  QRCreateList(m_rptActive, nil, m_dstActive,
               strTitle, lstFieldNames);

  with m_rptActive.Page do begin
    PaperSize := Custom;
    Width := nPageWidth;
    Length := nPageHeight;
    Orientation := oriPage;
  end;

  with m_rptActive.Bands do begin
    HasPageHeader := False;
    HasPageFooter := False;
    bandTitle := TitleBand;
    bandHeader := ColumnHeaderBand;
    bandDetail := DetailBand;
    HasSummary := bHasSummary;
    bandSummary := SummaryBand;

    bandTitle.Size.Height := dHeightTitle;
    bandHeader.Size.Height := dHeightHeader;
    bandHeader.Height := bandHeader.Height + nSegbarWidth;
    bandDetail.Size.Height := dHeightDetail;
    if bHasSummary then begin
      bandSummary.Size.Width := bandDetail.Size.Width;
      bandSummary.Size.Height := bandDetail.Size.Height;
      bandSummary.Height := bandSummary.Height + nSegbarWidth;
    end;
  end;

  TQRLabel(bandTitle.Controls[0]).ParentFont := True;
  bandTitle.Font.Assign(fntTitle);
  bandHeader.Font.Assign(fntHeader);
  bandDetail.Font.Assign(fntDetail);
  if bHasSummary then
    bandSummary.Font.Assign(fntDetail);

  // delete created fields
  // because QuickReport does not create the fields with the
  //  correct order!
  initupFields := bandHeader.ControlCount - 1;
  for i := 0 to initupFields do begin
    bandHeader.Controls[0].Free;
    bandDetail.Controls[0].Free;
  end;

  // create the fields
  for i := 0 to upFields do begin
    with TQRLabel.Create(bandHeader) do begin
      Parent := bandHeader;
      AutoSize := True;
      Caption := lstDispNames[i];
    end;
    with TQRExpr.Create(bandDetail) do begin
      Parent := bandDetail;
      AutoSize := True;
      tmpStr := lstFieldNames.Strings[i];
      StripFieldName(tmpStr, False);
      Expression := tmpStr;
    end;
  end;

  // create the summary items here
  if bHasSummary then
    for i := 0 to upFields do
      if lstSummary[i] then
        with TQRExpr.Create(bandSummary) do begin
          Parent := bandSummary;
          AutoSize := True;
          Expression := 'Sum(' + lstFieldNames[i] + ')';
        end;
  lstFieldNames.Free;

  // set the items' pos
  posx := 0;
  idxSummary := 0;
  for i := 0 to upFields do begin
    with TQRLabel(bandHeader.Controls[i]) do begin
      AutoSize := False;
      tmpSize := Size;
      SetPosition(tmpSize, posx, lstWidths[i], dHeightHeader,
                  alnHeader, dDetailMargin);
      Size := tmpSize;
      Alignment := CustomToStandardAlign(alnHeader);
    end;
    with TQRExpr(bandDetail.Controls[i]) do begin
      AutoSize := False;
      tmpSize := Size;
      SetPosition(tmpSize, posx, lstWidths[i], dHeightDetail,
                  lstAlign[i], dDetailMargin);
      Size := tmpSize;
      Alignment := CustomToStandardAlign(lstAlign[i]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -