procedure TfrPage.NewColumn(Band: TfrBand); var b: TfrBand; tmpXAdjust: integer; //MK2004-03-28 由于XAdjust 可能在 ShowBand(Bands[btColumnHeader]); 后被改,用 tmpXAdjust 暂存之,多列时错位问题解决 begin if CurColumn < ColCount - 1 then begin ShowBand(Bands[btColumnFooter]); Inc(CurColumn); Inc(XAdjust, ColWidth + ColGap); tmpXAdjust := XAdjust; CurY := LastStaticColumnY; ShowBand(Bands[btColumnHeader]); XAdjust := tmpXAdjust; end else NewPage; b := Bands[btGroupHeader]; if b <> nil then while (b <> nil) and (b <> Band) do begin b.DisableInit := True; if (b.Flags and flBandRepeatHeader) <> 0 then if (b.Typ <> btGroupHeader) or not DisableRepeatHeader then ShowBand(b); b.DisableInit := False; b := b.Next; end; if Band.Typ in [btMasterData, btDetailData, btSubDetailData] then if (Band.HeaderBand <> nil) and ((Band.HeaderBand.Flags and flBandRepeatHeader) <> 0) then ShowBand(Band.HeaderBand); end;
试试。
将 源代码注释成如下procedure TfrPage.DrawPageFooters; //var // sadj : integer; begin CurColumn := 0; // sadj:=XAdjust; XAdjust := LeftMargin; if (PageNo <> 0) or ((Bands[btPageFooter].Flags and flBandOnFirstPage) <> 0) then while PageNo < MasterReport.EMFPages.Count do begin if not (Append and WasPF) then begin if (CurReport <> nil) and Assigned(CurReport.FOnEndPage) then CurReport.FOnEndPage(PageNo); if (MasterReport <> CurReport) and (MasterReport <> nil) and Assigned(MasterReport.FOnEndPage) then MasterReport.FOnEndPage(PageNo); ShowBand(Bands[btPageFooter]); end; Inc(PageNo); end; PageNo := MasterReport.EMFPages.Count; // XAdjust:=sadj; end;
//多列时错位问题解决
procedure TfrPage.NewColumn(Band: TfrBand);
var
b: TfrBand;
tmpXAdjust: integer; //MK2004-03-28 由于XAdjust 可能在 ShowBand(Bands[btColumnHeader]); 后被改,用 tmpXAdjust 暂存之,多列时错位问题解决
begin
if CurColumn < ColCount - 1 then
begin
ShowBand(Bands[btColumnFooter]);
Inc(CurColumn);
Inc(XAdjust, ColWidth + ColGap);
tmpXAdjust := XAdjust;
CurY := LastStaticColumnY;
ShowBand(Bands[btColumnHeader]);
XAdjust := tmpXAdjust;
end
else
NewPage;
b := Bands[btGroupHeader];
if b <> nil then
while (b <> nil) and (b <> Band) do
begin
b.DisableInit := True;
if (b.Flags and flBandRepeatHeader) <> 0 then
if (b.Typ <> btGroupHeader) or not DisableRepeatHeader then
ShowBand(b);
b.DisableInit := False;
b := b.Next;
end;
if Band.Typ in [btMasterData, btDetailData, btSubDetailData] then
if (Band.HeaderBand <> nil) and
((Band.HeaderBand.Flags and flBandRepeatHeader) <> 0) then
ShowBand(Band.HeaderBand);
end;
试试。
//var
// sadj : integer;
begin
CurColumn := 0;
// sadj:=XAdjust;
XAdjust := LeftMargin;
if (PageNo <> 0) or ((Bands[btPageFooter].Flags and flBandOnFirstPage) <> 0) then
while PageNo < MasterReport.EMFPages.Count do
begin
if not (Append and WasPF) then
begin
if (CurReport <> nil) and Assigned(CurReport.FOnEndPage) then
CurReport.FOnEndPage(PageNo);
if (MasterReport <> CurReport) and (MasterReport <> nil) and
Assigned(MasterReport.FOnEndPage) then
MasterReport.FOnEndPage(PageNo);
ShowBand(Bands[btPageFooter]);
end;
Inc(PageNo);
end;
PageNo := MasterReport.EMFPages.Count;
// XAdjust:=sadj;
end;