Example #1
0
 public void SaveToStream(Stream aStream)
 {
     HC._SaveFileFormatAndVersion(aStream);  // 文件格式和版本
     _DeleteUnUsedStyle();
     FStyle.SaveToStream(aStream);
     FData.SaveToStream(aStream);
 }
Example #2
0
        public virtual void SaveToStream(Stream aStream, bool aQuick = false, HashSet <SectionArea> aAreas = null)
        {
            HC._SaveFileFormatAndVersion(aStream);  // 文件格式和版本
            DoSaveStreamBefor(aStream);

            HashSet <SectionArea> vArea = aAreas;

            if (vArea == null)
            {
                vArea = new HashSet <SectionArea>();
                vArea.Add(SectionArea.saHeader);
                vArea.Add(SectionArea.saFooter);
                vArea.Add(SectionArea.saPage);
            }

            if (!aQuick)
            {
                DeleteUnUsedStyle(FStyle, FSections, vArea);
            }

            FStyle.SaveToStream(aStream);
            // 节数量
            byte vByte = (byte)FSections.Count;

            aStream.WriteByte(vByte);
            // 各节数据
            for (int i = 0; i <= FSections.Count - 1; i++)
            {
                FSections[i].SaveToStream(aStream, vArea);
            }

            DoSaveStreamAfter(aStream);
        }
Example #3
0
        protected void SaveItemToStreamAlone(HCCustomItem aItem, Stream aStream)
        {
            HC._SaveFileFormatAndVersion(aStream);
            aItem.SaveToStream(aStream);
            if (aItem.StyleNo > HCStyle.Null)
            {
                Style.TextStyles[aItem.StyleNo].SaveToStream(aStream);
            }

            Style.ParaStyles[aItem.ParaNo].SaveToStream(aStream);
        }
Example #4
0
        public void SaveDomainToStream(Stream aStream, int aDomainItemNo)
        {
            int vGroupBeg = -1;
            int vGroupEnd = GetDomainAnother(aDomainItemNo);

            if (vGroupEnd > aDomainItemNo)
            {
                vGroupBeg = aDomainItemNo;
            }
            else
            {
                vGroupBeg = vGroupEnd;
                vGroupEnd = aDomainItemNo;
            }

            HC._SaveFileFormatAndVersion(aStream);
            this.Style.SaveToStream(aStream);
            SaveItemToStream(aStream, vGroupBeg + 1, 0, vGroupEnd - 1, GetItemOffsetAfter(vGroupEnd - 1));
        }
Example #5
0
 public void SaveItemToStreamAlone(Stream aStream, HCCustomItem aItem)
 {
     HC._SaveFileFormatAndVersion(aStream);
     Style.SaveToStream(aStream);
     aItem.SaveToStream(aStream);
 }
Example #6
0
        protected void Copy()
        {
            if (FData.SelectExists())
            {
                MemoryStream vStream = new MemoryStream();
                try
                {
                    HC._SaveFileFormatAndVersion(vStream);  // 保存文件格式和版本
                    _DeleteUnUsedStyle();

                    FStyle.SaveToStream(vStream);
                    FData.GetTopLevelData().SaveSelectToStream(vStream);

                    byte[] vBuffer = new byte[0];
                    IntPtr vMemExt = (IntPtr)Kernel.GlobalAlloc(Kernel.GMEM_MOVEABLE | Kernel.GMEM_DDESHARE, (int)vStream.Length);
                    try
                    {
                        if (vMemExt == IntPtr.Zero)
                        {
                            throw new Exception(HC.HCS_EXCEPTION_MEMORYLESS);
                        }
                        IntPtr vPtr = (IntPtr)Kernel.GlobalLock(vMemExt);
                        try
                        {
                            vStream.Position = 0;
                            vBuffer          = vStream.ToArray();
                            System.Runtime.InteropServices.Marshal.Copy(vBuffer, 0, vPtr, vBuffer.Length);
                        }
                        finally
                        {
                            Kernel.GlobalUnlock(vMemExt);
                        }
                    }
                    catch
                    {
                        Kernel.GlobalFree(vMemExt);
                        return;
                    }

                    vBuffer = System.Text.Encoding.Unicode.GetBytes(FData.GetTopLevelData().SaveSelectToText());
                    IntPtr vMem = (IntPtr)Kernel.GlobalAlloc(Kernel.GMEM_MOVEABLE | Kernel.GMEM_DDESHARE, vBuffer.Length + 1);
                    try
                    {
                        if (vMem == IntPtr.Zero)
                        {
                            throw new Exception(HC.HCS_EXCEPTION_MEMORYLESS);
                        }

                        IntPtr vPtr = (IntPtr)Kernel.GlobalLock(vMem);
                        try
                        {
                            System.Runtime.InteropServices.Marshal.Copy(vBuffer, 0, vPtr, vBuffer.Length);
                        }
                        finally
                        {
                            Kernel.GlobalUnlock(vMem);
                        }
                    }
                    catch
                    {
                        Kernel.GlobalFree(vMem);
                        return;
                    }

                    User.OpenClipboard(IntPtr.Zero);
                    try
                    {
                        User.EmptyClipboard();
                        User.SetClipboardData(FHCExtFormat.Id, vMemExt);
                        User.SetClipboardData(User.CF_TEXT, vMem);  // 文本格式
                    }
                    finally
                    {
                        User.CloseClipboard();
                    }
                }
                finally
                {
                    vStream.Close();
                    vStream.Dispose();
                }
            }
        }
Example #7
0
 protected void DataSaveLiteStream(Stream stream, HCProcedure proc)
 {
     HC._SaveFileFormatAndVersion(stream);
     FStyle.SaveToStream(stream);
     proc();
 }