Esempio n. 1
0
 public void InsertControl(Control control, int position, uint dwUser)
 {
     if (control == null)
     {
         return;
     }
     ILockBytes bytes;
     IStorage storage;
     IOleClientSite site;
     Guid guid = Marshal.GenerateGuidForType(control.GetType());
     NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out bytes);
     NativeMethods.StgCreateDocfileOnILockBytes(bytes, 0x1012, 0, out storage);
     IRichEditOle.GetClientSite(out site);
     REOBJECT lpreobject = new REOBJECT();
     lpreobject.posistion = position;
     lpreobject.clsid = guid;
     lpreobject.pstg = storage;
     lpreobject.poleobj = Marshal.GetIUnknownForObject(control);
     lpreobject.polesite = site;
     lpreobject.dvAspect = 1;
     lpreobject.dwFlags = 2;
     lpreobject.dwUser = dwUser;
     IRichEditOle.InsertObject(lpreobject);
     Marshal.ReleaseComObject(bytes);
     Marshal.ReleaseComObject(site);
     Marshal.ReleaseComObject(storage);
 }
Esempio n. 2
0
            public void InsertImageDataObject(ImageDataObject ido, int position)
            {
                if (ido == null)
                {
                    return;
                }

                ILockBytes pLockBytes;
                int        sc = CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

                IStorage pStorage;

                sc = StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE
                                                                     | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage);

                IOleClientSite pOleClientSite;

                IRichEditOle.GetClientSite(out pOleClientSite);

                Guid guid = Marshal.GenerateGuidForType(ido.GetType());

                Guid IID_IOleObject  = new Guid("{00000112-0000-0000-C000-000000000046}");
                Guid IID_IDataObject = new Guid("{0000010e-0000-0000-C000-000000000046}");
                Guid IID_IUnknown    = new Guid("{00000000-0000-0000-C000-000000000046}");

                object pOleObject;

                int hr = OleCreateStaticFromData(ido, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_FORMAT,
                                                 ref ido._Formatetc, pOleClientSite, pStorage, out pOleObject);

                if (pOleObject == null)
                {
                    return;
                }
                OleSetContainedObject(pOleObject, true);

                REOBJECT reoObject = new REOBJECT();

                reoObject.cp = position;

                reoObject.clsid    = guid;
                reoObject.pstg     = pStorage;
                reoObject.poleobj  = Marshal.GetIUnknownForObject(pOleObject);
                reoObject.polesite = pOleClientSite;
                reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT);
                reoObject.dwFlags  = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE);
                reoObject.dwUser   = 0;

                this.IRichEditOle.InsertObject(reoObject);

                Marshal.ReleaseComObject(pLockBytes);
                Marshal.ReleaseComObject(pOleClientSite);
                Marshal.ReleaseComObject(pStorage);
                Marshal.ReleaseComObject(pOleObject);
            }
Esempio n. 3
0
 public List<REOBJECT> GetAllREOBJECT()
 {
     List<REOBJECT> list = new List<REOBJECT>();
     int objectCount = this.IRichEditOle.GetObjectCount();
     for (int i = 0; i < objectCount; i++)
     {
         REOBJECT lpreobject = new REOBJECT();
         IRichEditOle.GetObject(i, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
         list.Add(lpreobject);
     }
     return list;
 }
Esempio n. 4
0
            public void UpdateObjects()
            {
                int count = IRichEditOle.GetObjectCount();

                for (int i = 0; i < count; i++)
                {
                    REOBJECT reoObject = new REOBJECT();

                    IRichEditOle.GetObject(i, reoObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);

                    if (reoObject.dwUser == 1)
                    {
                        Point     pt   = this.rtf.GetPositionFromCharIndex(reoObject.cp);
                        Rectangle rect = new Rectangle(pt, reoObject.sizel);
                        rtf.Invalidate(rect, false);
                    }
                }
            }
Esempio n. 5
0
        private Size GetSizeFromMillimeter(REOBJECT lpreobject)
        {
            using (Graphics graphics = Graphics.FromHwnd(agileRichTextBox.Handle))
            {
                Point[] pts = new Point[1];
                graphics.PageUnit = GraphicsUnit.Millimeter;

                pts[0] = new Point(
                    lpreobject.sizel.Width / 100,
                    lpreobject.sizel.Height / 100);
                graphics.TransformPoints(
                    CoordinateSpace.Device,
                    CoordinateSpace.Page,
                    pts);
                return new Size(pts[0]);
            }
        }
Esempio n. 6
0
 public void UpdateObjects(REOBJECT reObj)
 {
     Point positionFromCharIndex = agileRichTextBox.GetPositionFromCharIndex(reObj.posistion);
     Size size = GetSizeFromMillimeter(reObj);
     Rectangle rc = new Rectangle(positionFromCharIndex, size);
     agileRichTextBox.Invalidate(rc, false);
 }
Esempio n. 7
0
 public void UpdateObjects(int pos)
 {
     REOBJECT lpreobject = new REOBJECT();
     IRichEditOle.GetObject(
         pos,
         lpreobject,
         GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
     UpdateObjects(lpreobject);
 }
Esempio n. 8
0
 public void UpdateObjects()
 {
     int objectCount = this.IRichEditOle.GetObjectCount();
     for (int i = 0; i < objectCount; i++)
     {
         REOBJECT lpreobject = new REOBJECT();
         IRichEditOle.GetObject(i, lpreobject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
         Point positionFromCharIndex = this.agileRichTextBox.GetPositionFromCharIndex(lpreobject.posistion);
         Rectangle rc = new Rectangle(positionFromCharIndex.X, positionFromCharIndex.Y, 50, 50);
         agileRichTextBox.Invalidate(rc, false);
     }
 }
Esempio n. 9
0
        public REOBJECT InsertOleObject(IOleObject oleObject, int index, int pos)
        {
            if (oleObject == null)
            {
                return null;
            }

            ILockBytes pLockBytes;
            NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

            IStorage pStorage;
            NativeMethods.StgCreateDocfileOnILockBytes(
                pLockBytes,
                (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE),
                0,
                out pStorage);

            IOleClientSite pOleClientSite;
            IRichEditOle.GetClientSite(out pOleClientSite);

            Guid guid = new Guid();

            oleObject.GetUserClassID(ref guid);
            NativeMethods.OleSetContainedObject(oleObject, true);

            REOBJECT reoObject = new REOBJECT();

            reoObject.posistion = pos;
            reoObject.clsid = guid;
            reoObject.pstg = pStorage;
            reoObject.poleobj = Marshal.GetIUnknownForObject(oleObject);
            reoObject.polesite = pOleClientSite;
            reoObject.dvAspect = (uint)DVASPECT.DVASPECT_CONTENT;
            reoObject.dwFlags = (uint)REOOBJECTFLAGS.REO_BELOWBASELINE;
            reoObject.dwUser = (uint)index;

            IRichEditOle.InsertObject(reoObject);

            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);

            return reoObject;
        }
        public void InsertOleObject(IOleObject oleObject)
        {
            if (oleObject == null)
                return;

            //-----------------------
            ILockBytes pLockBytes;
            CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

            IStorage pStorage;
            StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage);

            IOleClientSite pOleClientSite;
            this.IRichEditOle.GetClientSite(out pOleClientSite);
            //-----------------------

            //-----------------------
            Guid guid = new Guid();

            oleObject.GetUserClassID(ref guid);
            //-----------------------

            //-----------------------
            OleSetContainedObject(oleObject, true);

            REOBJECT reoObject = new REOBJECT();

            reoObject.cp = this._richEdit.TextLength;

            reoObject.clsid = guid;
            reoObject.pstg = pStorage;
            reoObject.poleobj = Marshal.GetIUnknownForObject(oleObject);
            reoObject.polesite = pOleClientSite;
            reoObject.dvAspect = (uint)DVASPECT.DVASPECT_CONTENT;
            reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE);

            this.IRichEditOle.InsertObject(reoObject);
            //-----------------------

            //-----------------------
            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);
            //-----------------------
        }
        public void InsertMyDataObject(DataObject dobj)
        {
            if (dobj == null)
                return;

            //-----------------------
            ILockBytes pLockBytes;
            int sc = CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

            IStorage pStorage;
            sc = StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage);

            IOleClientSite pOleClientSite;
            this.IRichEditOle.GetClientSite(out pOleClientSite);
            //-----------------------

            Guid guid = Marshal.GenerateGuidForType(dobj.GetType());

            Guid IID_IOleObject = new Guid("{00000112-0000-0000-C000-000000000046}");
            Guid IID_IDataObject = new Guid("{0000010e-0000-0000-C000-000000000046}");
            Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");

            object pOleObject;

            int hr = OleCreateStaticFromData(dobj, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_FORMAT, ref dobj.mpFormatetc, pOleClientSite, pStorage, out pOleObject);

            if (pOleObject == null)
                return;
            //-----------------------


            //-----------------------
            OleSetContainedObject(pOleObject, true);

            REOBJECT reoObject = new REOBJECT();

            reoObject.cp = this._richEdit.TextLength;

            reoObject.clsid = guid;
            reoObject.pstg = pStorage;
            reoObject.poleobj = Marshal.GetIUnknownForObject(pOleObject);
            reoObject.polesite = pOleClientSite;
            reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT);
            reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE);
            reoObject.dwUser = 0;

            this.IRichEditOle.InsertObject(reoObject);
            //-----------------------

            //-----------------------
            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);
            Marshal.ReleaseComObject(pOleObject);
            //-----------------------
        }
        public bool InsertImageFromFile(string strFilename)
        {
            //-----------------------
            ILockBytes pLockBytes;
            CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

            IStorage pStorage;
            StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage);

            IOleClientSite pOleClientSite;
            this.IRichEditOle.GetClientSite(out pOleClientSite);
            //-----------------------


            //-----------------------
            FORMATETC formatEtc = new FORMATETC();

            formatEtc.cfFormat = 0;
            formatEtc.ptd = IntPtr.Zero;
            formatEtc.dwAspect = DVASPECT.DVASPECT_CONTENT;
            formatEtc.lindex = -1;
            formatEtc.tymed = TYMED.TYMED_NULL;

            Guid IID_IOleObject = new Guid("{00000112-0000-0000-C000-000000000046}");
            Guid CLSID_NULL = new Guid("{00000000-0000-0000-0000-000000000000}");

            object pOleObjectOut;

            // I don't sure, but it appears that this function only loads from bitmap
            // You can also try OleCreateFromData, OleLoadPictureIndirect, etc.
            int hr = OleCreateFromFile(ref CLSID_NULL, strFilename, ref IID_IOleObject, (uint)OLERENDER.OLERENDER_DRAW, ref formatEtc, pOleClientSite, pStorage, out pOleObjectOut);

            if (pOleObjectOut == null)
            {
                Marshal.ReleaseComObject(pLockBytes);
                Marshal.ReleaseComObject(pOleClientSite);
                Marshal.ReleaseComObject(pStorage);

                return false;
            }

            IOleObject pOleObject = (IOleObject)pOleObjectOut;
            //-----------------------


            //-----------------------
            Guid guid = new Guid();

            //guid = Marshal.GenerateGuidForType(pOleObject.GetType());
            pOleObject.GetUserClassID(ref guid);
            //-----------------------

            //-----------------------
            OleSetContainedObject(pOleObject, true);

            REOBJECT reoObject = new REOBJECT();

            reoObject.cp = this._richEdit.TextLength;

            reoObject.clsid = guid;
            reoObject.pstg = pStorage;
            reoObject.poleobj = Marshal.GetIUnknownForObject(pOleObject);
            reoObject.polesite = pOleClientSite;
            reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT);
            reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE);
            reoObject.dwUser = 0;

            this.IRichEditOle.InsertObject(reoObject);
            //-----------------------

            //-----------------------
            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);
            Marshal.ReleaseComObject(pOleObject);
            //-----------------------

            return true;
        }
        public void InsertControl(Control control)
        {
            if (control == null)
                return;

            Guid guid = Marshal.GenerateGuidForType(control.GetType());

            //-----------------------
            ILockBytes pLockBytes;
            CreateILockBytesOnHGlobal(IntPtr.Zero, true, out pLockBytes);

            IStorage pStorage;
            StgCreateDocfileOnILockBytes(pLockBytes, (uint)(STGM.STGM_SHARE_EXCLUSIVE | STGM.STGM_CREATE | STGM.STGM_READWRITE), 0, out pStorage);

            IOleClientSite pOleClientSite;
            this.IRichEditOle.GetClientSite(out pOleClientSite);
            //-----------------------

            //-----------------------
            REOBJECT reoObject = new REOBJECT();

            reoObject.cp = this._richEdit.TextLength;

            reoObject.clsid = guid;
            reoObject.pstg = pStorage;
            reoObject.poleobj = Marshal.GetIUnknownForObject(control);
            reoObject.polesite = pOleClientSite;
            reoObject.dvAspect = (uint)(DVASPECT.DVASPECT_CONTENT);
            reoObject.dwFlags = (uint)(REOOBJECTFLAGS.REO_BELOWBASELINE | REOOBJECTFLAGS.REO_RESIZABLE);
            reoObject.dwUser = 1;

            this.IRichEditOle.InsertObject(reoObject);
            //-----------------------

            //-----------------------
            Marshal.ReleaseComObject(pLockBytes);
            Marshal.ReleaseComObject(pOleClientSite);
            Marshal.ReleaseComObject(pStorage);
            //-----------------------
        }
 public REOBJECT GetSelectedObject()
 {
     REOBJECT obj = new REOBJECT();
     this.IRichEditOle.GetObject(-1, obj, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
     return obj;
 }
 public REOBJECT GetObjectByIndex(int objIndex)
 {
     try
     {
         REOBJECT obj = new REOBJECT();
         this.IRichEditOle.GetObject(objIndex, obj, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);
         return obj;
     }
     catch (Exception) // it seems that invalid index was specified
     {
         return null;
     }
 }
Esempio n. 16
0
 public bool InsertImageFromFile(string strFilename, int position)
 {
     ILockBytes bytes;
     IStorage storage;
     IOleClientSite site;
     object obj2;
     NativeMethods.CreateILockBytesOnHGlobal(IntPtr.Zero, true, out bytes);
     NativeMethods.StgCreateDocfileOnILockBytes(bytes, 0x1012, 0, out storage);
     IRichEditOle.GetClientSite(out site);
     FORMATETC pFormatEtc = new FORMATETC();
     pFormatEtc.cfFormat = (CLIPFORMAT)0;
     pFormatEtc.ptd = IntPtr.Zero;
     pFormatEtc.dwAspect = DVASPECT.DVASPECT_CONTENT;
     pFormatEtc.lindex = -1;
     pFormatEtc.tymed = TYMED.TYMED_NULL;
     Guid riid = new Guid("{00000112-0000-0000-C000-000000000046}");
     Guid rclsid = new Guid("{00000000-0000-0000-0000-000000000000}");
     NativeMethods.OleCreateFromFile(ref rclsid, strFilename, ref riid, 1, ref pFormatEtc, site, storage, out obj2);
     if (obj2 == null)
     {
         Marshal.ReleaseComObject(bytes);
         Marshal.ReleaseComObject(site);
         Marshal.ReleaseComObject(storage);
         return false;
     }
     IOleObject pUnk = (IOleObject)obj2;
     Guid pClsid = new Guid();
     pUnk.GetUserClassID(ref pClsid);
     NativeMethods.OleSetContainedObject(pUnk, true);
     REOBJECT lpreobject = new REOBJECT();
     lpreobject.posistion = position;
     lpreobject.clsid = pClsid;
     lpreobject.pstg = storage;
     lpreobject.poleobj = Marshal.GetIUnknownForObject(pUnk);
     lpreobject.polesite = site;
     lpreobject.dvAspect = 1;
     lpreobject.dwFlags = 2;
     lpreobject.dwUser = 0;
     IRichEditOle.InsertObject(lpreobject);
     Marshal.ReleaseComObject(bytes);
     Marshal.ReleaseComObject(site);
     Marshal.ReleaseComObject(storage);
     Marshal.ReleaseComObject(pUnk);
     return true;
 }
        public void UpdateObjects()
        {
            int k = this.IRichEditOle.GetObjectCount();

            if (k == 0) return;

            for (int i = 0; i < k; i++)
            {
                REOBJECT reoObject = new REOBJECT();

                this.IRichEditOle.GetObject(i, reoObject, GETOBJECTOPTIONS.REO_GETOBJ_ALL_INTERFACES);

                if (reoObject.dwUser == 1)
                {
                    Point pt = this._richEdit.GetPositionFromCharIndex(reoObject.cp);
                    Rectangle rect = new Rectangle(pt, reoObject.sizel);

                    this._richEdit.Invalidate(rect, false); // repaint
                }
            }
        }