richview表格夸页的修改(源码)

mac2022-06-30  22

主要是修改SclRVIew单元的CalculatePageCount函数增加变量

vPageStartTableItemOffs: array of Integer; 存放夸页时,上一页已经绘制掉的东西

 vHasDrawOffs: Integer;    //表格跨页时,前页剩余的高度  vCanOffsLines: Integer;   //剩余高度能显示多少行内容

 

procedure calculateTablePageCount(NumberingNote : Boolean);

        if not isRowSpan then        begin          GetRowHeight(StartRow, CRowTop, vRowHeight);          //+ 如果当前行都大于页面 看看减去上一页画掉的部分后还大不大          if (vRowHeight> pHeight) and (Result > 0) then            vRowHeight:= vRowHeight- vPageStartTableItemOffs[Result - 1];          //+

。。。。。。            if isFirstItem then            begin              //+ 如果当前页连当前行都放不下,下一页还要从当前行的内容显示起              if vRowHeight > pHeight then                NextRow := StartRow;              //+              PageEndTableItem[Result] := srvCurItem.ItemNo;              PageEndTableRow[Result] := StartRow;              PageStartTableRow[Result + 1] := NextRow;              if (NextRow > -1) then                PageStartTableItem[Result + 1] := srvCurItem.ItemNo;            end。。。。。            if isFirstItem then            begin              if StartRow = PageStartTableRow[Result] then              begin                vBottomOfPage := srvCurItem.MinTop +                  Math.min(CRowTop - srvCurItem.MinTop + vRowHeight, pHeight);                //+                if vRowHeight > pHeight then                begin                  vHasDrawOffs := srvCurItem.MinTop + pHeight - vBottomOfPage; //距底部剩余的空间                  vCanOffsLines := vHasDrawOffs div 16;                        //剩余空间能放下几行                  if vCanOffsLines > 0 then                  begin                    vHasDrawOffs := vCanOffsLines * 16;                    vBottomOfPage := vBottomOfPage + vHasDrawOffs;                  end;                  vPageStartTableItemOffs[Result] := vBottomOfPage - srvCurItem.MinTop + vPageStartTableItemOffs[Result - 1];                end;                //+              end。。。。。。            else            begin              GetRowHeight(PriorRow, CRowTop, vRowHeight); //如果从第三行换到下一页,重新取第二行的相关信息做本页使用              vBottomOfPage := srvCurItem.MinTop +                Math.min(vCRowTop + vRowHeight - srvCurItem.MinTop, pHeight);              //+              vHasDrawOffs := srvCurItem.MinTop + pHeight - vBottomOfPage; //距底部剩余的空间              vCanOffsLines := vHasDrawOffs div 16;                        //剩余空间能放下几行              if vCanOffsLines > 0 then              begin                vHasDrawOffs := vCanOffsLines * 16;                vBottomOfPage := vBottomOfPage + vHasDrawOffs;                vPageStartTableItemOffs[Result] := vHasDrawOffs;              end;              //+            end;

  //+  SetLength(vPageStartTableItemOffs, 100);  for vHdId := Low(vPageStartTableItemOffs) to High(vPageStartTableItemOffs) do    vPageStartTableItemOffs[vHdId] := 0;  vPageStartTableItemOffs[0] := 0;  //+  while (srvCurItem.DrawItemNo <= viDrawLinesCount) do  //循环 每一个line计算高度并计算页数  begin    isCanNextDrawItem := TRUE;。。。。。。。    if isFirstItem and (PageStartTableItem[Result] > -1) and //第一个item是上页跨过来的表格      (PageStartTableRow[Result] > 0) then    begin      srvCurItem.Top := srvCurItem.Top + vTableItem.Cells[PageStartTableRow[Result], 0].Top;

      //+加上已经在上一页夸页处理时绘制掉的部分做为新的起始位置      srvCurItem.Top := srvCurItem.Top + vPageStartTableItemOffs[Result - 1];      //+

转载于:https://www.cnblogs.com/coloregg/archive/2013/05/06/3063072.html

相关资源:RichView Demo
最新回复(0)