?? untactreport.~pas
字號:
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]);
end;
if bHasSummary and lstSummary[i] then
with TQRExpr(bandSummary.Controls[idxSummary]) do begin
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -