Exemplo n.º 1
0
        private void FormatRange(int aStartDrawItemNo, int aLastItemNo)
        {
            int         vPrioDrawItemNo = -1, vStartItemNo = -1, vStartOffset = -1;
            HCParaStyle vParaStyle = null;
            POINT       vPos       = new POINT();

            FFormatStartDrawItemNo = aStartDrawItemNo;

            // 获取起始DrawItem的上一个序号及格式化开始位置
            if (aStartDrawItemNo > 0)
            {
                vPrioDrawItemNo = aStartDrawItemNo - 1;  // 上一个最后的DrawItem
                vStartItemNo    = DrawItems[aStartDrawItemNo].ItemNo;
                vStartOffset    = DrawItems[aStartDrawItemNo].CharOffs;
                vParaStyle      = Style.ParaStyles[Items[vStartItemNo].ParaNo];
                if (DrawItems[aStartDrawItemNo].LineFirst)
                {
                    vPos.X = vParaStyle.LeftIndentPix;
                    vPos.Y = DrawItems[vPrioDrawItemNo].Rect.Bottom;
                }
                else
                {
                    vPos.X = DrawItems[vPrioDrawItemNo].Rect.Right;
                    vPos.Y = DrawItems[vPrioDrawItemNo].Rect.Top;
                }
            }
            else  // 是第一个
            {
                vPrioDrawItemNo = -1;
                vStartItemNo    = 0;
                vStartOffset    = 1;
                vParaStyle      = Style.ParaStyles[Items[vStartItemNo].ParaNo];
                vPos.X          = vParaStyle.LeftIndentPix;
                vPos.Y          = 0;
            }

            Style.ApplyTempStyle(HCStyle.Null);
            FormatItemToDrawItems(vStartItemNo, vStartOffset, vParaStyle.LeftIndentPix,
                                  FWidth - vParaStyle.RightIndentPix, FWidth, ref vPos, ref vPrioDrawItemNo);

            for (int i = vStartItemNo + 1; i <= aLastItemNo; i++)  // 格式
            {
                if (Items[i].ParaFirst)
                {
                    vParaStyle = Style.ParaStyles[Items[i].ParaNo];
                    vPos.X     = vParaStyle.LeftIndentPix;
                }

                FormatItemToDrawItems(i, 1, vParaStyle.LeftIndentPix,
                                      FWidth - vParaStyle.RightIndentPix, FWidth, ref vPos, ref vPrioDrawItemNo);
            }

            DrawItems.DeleteFormatMark();
        }