protected void FormatPrepare(int AFirstDrawItemNo, int ALastItemNo = -1) { if (FFormatCount != 0) { return; } FormatInit(); if ((AFirstDrawItemNo > 0) && (!DrawItems[AFirstDrawItemNo].LineFirst)) { throw new Exception("行中格式化必需从行首开始,否则会影响分散的计算!"); } //vFirstDrawItemNo := Items[AStartItemNo].FirstDItemNo; int vLastItemNo = -1, vFmtTopOffset = -1; if (ALastItemNo < 0) { vLastItemNo = DrawItems[AFirstDrawItemNo].ItemNo; } else { vLastItemNo = ALastItemNo; } int vLastDrawItemNo = GetItemLastDrawItemNo(vLastItemNo); DrawItems.MarkFormatDelete(AFirstDrawItemNo, vLastDrawItemNo); if (AFirstDrawItemNo > 0) { FFormatStartTop = DrawItems[AFirstDrawItemNo - 1].Rect.Bottom; vFmtTopOffset = DrawItems[AFirstDrawItemNo].Rect.Top - FFormatStartTop; } else { FFormatStartTop = 0; vFmtTopOffset = 0; } for (int i = AFirstDrawItemNo + 1; i <= vLastDrawItemNo; i++) { if (DrawItems[i].LineFirst) { vFmtTopOffset = vFmtTopOffset + DrawItems[i].Rect.Top - DrawItems[i - 1].Rect.Bottom; } } if (vFmtTopOffset != 0) { FFormatEndBottom = -1; } else { FFormatEndBottom = DrawItems[vLastDrawItemNo].Rect.Bottom - vFmtTopOffset; } }
public virtual void ReFormat() { if (FFormatCount == 0) { DrawItems.Clear(); InitializeField(); DrawItems.MarkFormatDelete(0, DrawItems.Count - 1); FormatInit(); FormatRange(0, Items.Count - 1); FFormatHeightChange = true; } if ((SelectInfo.StartItemNo >= 0) && (SelectInfo.StartItemNo < Items.Count)) { ReSetSelectAndCaret(SelectInfo.StartItemNo, SelectInfo.StartItemOffset); // 防止清空后格式化完成后没有选中起始访问出错 } else { ReSetSelectAndCaret(0, 0); } }