mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 22:45:39 +02:00
158 lines
6.1 KiB
ObjectPascal
158 lines
6.1 KiB
ObjectPascal
Unit RichOLE;
|
|
|
|
{*
|
|
* RICHOLE.H
|
|
*
|
|
* Purpose:
|
|
* OLE Extensions to the Rich Text Editor
|
|
*
|
|
* Copyright (c) 1985-1996, Microsoft Corporation
|
|
*}
|
|
|
|
{WEAKPACKAGEUNIT}
|
|
{$MINENUMSIZE 4}
|
|
|
|
interface
|
|
|
|
uses Windows, ActiveX, Richedit,ComCtrls,ComObj,OleCtnrs;
|
|
|
|
// Structure passed to GetObject and InsertObject
|
|
type
|
|
TREOBJECT = packed record
|
|
cbStruct: DWORD; // Size of structure
|
|
cp: longint; // Character position of object
|
|
clsid: TCLSID; // Class ID of object
|
|
oleobj: IOleObject; // OLE object interface
|
|
stg: IStorage; // Associated storage interface
|
|
olesite: IOLEClientSite; // Associated client site interface
|
|
sizel: TSize; // Size of object (may be 0,0)
|
|
dvaspect: DWORD; // Display aspect to use
|
|
dwFlags: DWORD; // Object status flags
|
|
dwUser: DWORD; // Dword for user's use
|
|
end;
|
|
|
|
const
|
|
// Flags to specify which interfaces should be returned in the structure above
|
|
REO_GETOBJ_NO_INTERFACES = $00000000;
|
|
REO_GETOBJ_POLEOBJ = $00000001;
|
|
REO_GETOBJ_PSTG = $00000002;
|
|
REO_GETOBJ_POLESITE = $00000004;
|
|
REO_GETOBJ_ALL_INTERFACES = $00000007;
|
|
|
|
// Place object at selection
|
|
REO_CP_SELECTION = $FFFFFFFF;
|
|
|
|
// Use character position to specify object instead of index
|
|
REO_IOB_SELECTION = $FFFFFFFF;
|
|
REO_IOB_USE_CP = $FFFFFFFE;
|
|
|
|
// Object flags
|
|
REO_NULL = $00000000; // No flags
|
|
REO_READWRITEMASK = $0000003F; // Mask out RO bits
|
|
REO_DONTNEEDPALETTE = $00000020; // Object doesn't need palette
|
|
REO_BLANK = $00000010; // Object is blank
|
|
REO_DYNAMICSIZE = $00000008; // Object defines size always
|
|
REO_INVERTEDSELECT = $00000004; // Object drawn all inverted if sel
|
|
REO_BELOWBASELINE = $00000002; // Object sits below the baseline
|
|
REO_RESIZABLE = $00000001; // Object may be resized
|
|
REO_LINK = $80000000; // Object is a link (RO)
|
|
REO_STATIC = $40000000; // Object is static (RO)
|
|
REO_SELECTED = $08000000; // Object selected (RO)
|
|
REO_OPEN = $04000000; // Object open in its server (RO)
|
|
REO_INPLACEACTIVE = $02000000; // Object in place active (RO)
|
|
REO_HILITED = $01000000; // Object is to be hilited (RO)
|
|
REO_LINKAVAILABLE = $00800000; // Link believed available (RO)
|
|
REO_GETMETAFILE = $00400000; // Object requires metafile (RO)
|
|
|
|
// flags for IRichEditOle::GetClipboardData(),
|
|
// IRichEditOleCallback::GetClipboardData() and
|
|
// IRichEditOleCallback::QueryAcceptData()
|
|
RECO_PASTE = $00000000; // paste from clipboard
|
|
RECO_DROP = $00000001; // drop
|
|
RECO_COPY = $00000002; // copy to the clipboard
|
|
RECO_CUT = $00000003; // cut to the clipboard
|
|
RECO_DRAG = $00000004; // drag
|
|
|
|
{*
|
|
* IRichEditOle
|
|
*
|
|
* Purpose:
|
|
* Interface used by the client of RichEdit to perform OLE-related
|
|
* operations.
|
|
*
|
|
* //$ REVIEW:
|
|
* The methods herein may just want to be regular Windows messages.
|
|
*}
|
|
|
|
type
|
|
IRichEditOle = interface(IUnknown)
|
|
['{00020D00-0000-0000-C000-000000000046}']
|
|
function GetClientSite(out lplpolesite: IOLECLIENTSITE): HResult; stdcall;
|
|
function GetObjectCount: longint; stdcall;
|
|
function GetLinkCount: longint; stdcall;
|
|
function GetObject(iob: longint; out reobject: TREOBJECT; dwFlags: DWORD): HRESULT; stdcall;
|
|
function InsertObject(const reobject: TREOBJECT): HResult; stdcall;
|
|
function ConvertObject(iob: longint; const clsidNew: TCLSID;
|
|
lpStrUserTypeNew: POleStr): HRESULT; stdcall;
|
|
function ActivateAs(const clsid, clsidAs: TCLSID): HRESULT; stdcall;
|
|
function SetHostNames(lpstrContainerApp, lpstrContainerObj: POleStr): HRESULT; stdcall;
|
|
function SetLinkAvailable(iob: longint; fAvailable: BOOL): HRESULT; stdcall;
|
|
function SetDvaspect(iob: longint; dvaspect: DWORD): HRESULT; stdcall;
|
|
function HandsOffStorage(iob: longint): HRESULT; stdcall;
|
|
function SaveCompleted(iob: longint; stg: IStorage): HRESULT; stdcall;
|
|
function InPlaceDeactivate: HRESULT; stdcall;
|
|
function ContextSensitiveHelp(fEnterMode: BOOL): HRESULT; stdcall;
|
|
function GetClipboardData(const chrg: TCharRange; reco: DWORD;
|
|
out dataobj: IDataObject): HRESULT; stdcall;
|
|
function ImportDataObject(dataobj: IDataObject; cf: TClipFormat;
|
|
hMetaPict: HGLOBAL): HRESULT; stdcall;
|
|
end;
|
|
|
|
{*
|
|
* IRichEditOleCallback
|
|
*
|
|
* Purpose:
|
|
* Interface used by the RichEdit to get OLE-related stuff from the
|
|
* application using RichEdit.
|
|
*}
|
|
IRichEditOleCallback = interface(IUnknown)
|
|
['{00020D03-0000-0000-C000-000000000046}']
|
|
function GetNewStorage(out stg: IStorage): HRESULT; stdcall;
|
|
function GetInPlaceContext(out Frame: IOleInPlaceFrame;
|
|
out Doc: IOleInPlaceUIWindow; var FrameInfo: TOleInPlaceFrameInfo): HRESULT; stdcall;
|
|
function ShowContainerUI(fShow: BOOL): HRESULT; stdcall;
|
|
function QueryInsertObject(const clsid: TCLSID; stg: IStorage; cp: longint): HRESULT; stdcall;
|
|
function DeleteObject(oleobj: IOLEObject): HRESULT; stdcall;
|
|
function QueryAcceptData(dataobj: IDataObject; var cfFormat: TClipFormat;
|
|
reco: DWORD; fReally: BOOL; hMetaPict: HGLOBAL): HRESULT; stdcall;
|
|
function ContextSensitiveHelp(fEnterMode: BOOL): HRESULT; stdcall;
|
|
function GetClipboardData(const chrg: TCharRange; reco: DWORD;
|
|
out dataobj: IDataObject): HRESULT; stdcall;
|
|
function GetDragDropEffect(fDrag: BOOL; grfKeyState: DWORD;
|
|
var dwEffect: DWORD): HRESULT; stdcall;
|
|
function GetContextMenu(seltype: Word; oleobj: IOleObject;
|
|
const chrg: TCharRange; var menu: HMENU): HRESULT; stdcall;
|
|
end;
|
|
|
|
|
|
|
|
function RichEdit_SetOleCallback(RichEdit: HWnd; OleInterface: IRichEditOleCallback): BOOL;
|
|
function RichEdit_GetOleInterface(RichEdit: HWnd; out OleInterface: IRichEditOle): BOOL;
|
|
|
|
implementation
|
|
|
|
function RichEdit_SetOleCallback(RichEdit: HWnd; OleInterface: IRichEditOleCallback): BOOL;
|
|
begin
|
|
Result:= BOOL(SendMessage(RichEdit, EM_SETOLECALLBACK, 0, longint(OleInterface)));
|
|
end;
|
|
|
|
function RichEdit_GetOleInterface(RichEdit: HWnd; out OleInterface: IRichEditOle): BOOL;
|
|
begin
|
|
Result:= BOOL(SendMessage(RichEdit, EM_GETOLEINTERFACE, 0, longint(@OleInterface)));
|
|
end;
|
|
|
|
|
|
|
|
end.
|
|
|