home *** CD-ROM | disk | FTP | other *** search
/ PC World Plus! (NZ) 2001 June / HDC50.iso / Runimage / Delphi50 / Doc / OLECTRLS.INT < prev    next >
Text File  |  1999-08-11  |  12KB  |  273 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Borland Delphi Visual Component Library         }
  5. {                                                       }
  6. {       Copyright (c) 1996,99 Inprise Corporation       }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit OleCtrls;
  11.  
  12. {$R-,T-,H+,X+}
  13.  
  14. interface
  15.  
  16. uses Windows, Messages, ActiveX, SysUtils, Classes, Controls, Forms,
  17.   Menus, Graphics, ComObj, AxCtrls;
  18.  
  19. type
  20.  
  21.   TOleControl = class;
  22.  
  23.   TEventDispatch = class(TObject, IUnknown, IDispatch)
  24.   protected    
  25.     { IUnknown }
  26.     function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
  27.     function _AddRef: Integer; stdcall;
  28.     function _Release: Integer; stdcall;
  29.     { IDispatch }
  30.     function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
  31.     function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
  32.     function GetIDsOfNames(const IID: TGUID; Names: Pointer;
  33.       NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
  34.     function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
  35.       Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
  36.     property Control: TOleControl;
  37.   public
  38.     constructor Create(Control: TOleControl);
  39.   end;
  40.  
  41.   TOleEnum = ActiveX.TOleEnum;
  42.   {$NODEFINE TOleEnum}
  43.  
  44.   TEnumValue = record
  45.     Value: Longint;
  46.     Ident: string;
  47.   end;
  48.  
  49.   PEnumValueList = ^TEnumValueList;
  50.   TEnumValueList = array[0..32767] of TEnumValue;
  51.  
  52.   TEnumPropDesc = class
  53.   public
  54.     constructor Create(DispID, ValueCount: Integer;
  55.       const TypeInfo: ITypeInfo);
  56.     destructor Destroy; override;
  57.     procedure GetStrings(Proc: TGetStrProc);
  58.     function StringToValue(const S: string): Integer;
  59.     function ValueToString(V: Integer): string;
  60.   end;
  61.  
  62.   PControlData = ^TControlData;
  63.   TControlData = record
  64.     ClassID: TGUID;
  65.     EventIID: TGUID;
  66.     EventCount: Longint;
  67.     EventDispIDs: Pointer;
  68.     LicenseKey: Pointer;
  69.     Flags: DWORD;
  70.     Version: Integer;
  71.     FontCount: Integer;
  72.     FontIDs: PDispIDList;
  73.     PictureCount: Integer;
  74.     PictureIDs: PDispIDList;
  75.     Reserved: Integer;
  76.     InstanceCount: Integer;
  77.     EnumPropDescs: TList;
  78.   end;
  79.  
  80.   PControlData2 = ^TControlData2;
  81.   TControlData2 = record
  82.     ClassID: TGUID;
  83.     EventIID: TGUID;
  84.     EventCount: Longint;
  85.     EventDispIDs: Pointer;
  86.     LicenseKey: Pointer;
  87.     Flags: DWORD;
  88.     Version: Integer;
  89.     FontCount: Integer;
  90.     FontIDs: PDispIDList;
  91.     PictureCount: Integer;
  92.     PictureIDs: PDispIDList;
  93.     Reserved: Integer;
  94.     InstanceCount: Integer;
  95.     EnumPropDescs: TList;
  96.     FirstEventOfs: Cardinal;
  97.   end;
  98.  
  99.   TOleControl = class(TWinControl, IUnknown, IOleClientSite,
  100.     IOleControlSite, IOleInPlaceSite, IOleInPlaceFrame, IDispatch,
  101.     IPropertyNotifySink, ISimpleFrameSite)
  102.   protected
  103.     FEvents: Integer;
  104.     { IUnknown }
  105.     function QueryInterface(const IID: TGUID; out Obj): HResult; override;
  106.     function _AddRef: Integer; stdcall;
  107.     function _Release: Integer; stdcall;
  108.     { IOleClientSite }
  109.     function SaveObject: HResult; stdcall;
  110.     function GetMoniker(dwAssign: Longint; dwWhichMoniker: Longint;
  111.       out mk: IMoniker): HResult; stdcall;
  112.     function GetContainer(out container: IOleContainer): HResult; stdcall;
  113.     function ShowObject: HResult; stdcall;
  114.     function OnShowWindow(fShow: BOOL): HResult; stdcall;
  115.     function RequestNewObjectLayout: HResult; stdcall;
  116.     { IOleControlSite }
  117.     function OnControlInfoChanged: HResult; stdcall;
  118.     function LockInPlaceActive(fLock: BOOL): HResult; stdcall;
  119.     function GetExtendedControl(out disp: IDispatch): HResult; stdcall;
  120.     function TransformCoords(var ptlHimetric: TPoint; var ptfContainer: TPointF;
  121.       flags: Longint): HResult; stdcall;
  122.     function IOleControlSite.TranslateAccelerator = OleControlSite_TranslateAccelerator;
  123.     function OleControlSite_TranslateAccelerator(msg: PMsg;
  124.       grfModifiers: Longint): HResult; stdcall;
  125.     function OnFocus(fGotFocus: BOOL): HResult; stdcall;
  126.     function ShowPropertyFrame: HResult; stdcall;
  127.     { IOleWindow }
  128.     function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall;
  129.     { IOleInPlaceSite }
  130.     function IOleInPlaceSite.GetWindow = OleInPlaceSite_GetWindow;
  131.     function OleInPlaceSite_GetWindow(out wnd: HWnd): HResult; stdcall;
  132.     function CanInPlaceActivate: HResult; stdcall;
  133.     function OnInPlaceActivate: HResult; stdcall;
  134.     function OnUIActivate: HResult; stdcall;
  135.     function GetWindowContext(out frame: IOleInPlaceFrame;
  136.       out doc: IOleInPlaceUIWindow; out rcPosRect: TRect;
  137.       out rcClipRect: TRect; out frameInfo: TOleInPlaceFrameInfo): HResult;
  138.       stdcall;
  139.     function Scroll(scrollExtent: TPoint): HResult; stdcall;
  140.     function OnUIDeactivate(fUndoable: BOOL): HResult; stdcall;
  141.     function OnInPlaceDeactivate: HResult; stdcall;
  142.     function DiscardUndoState: HResult; stdcall;
  143.     function DeactivateAndUndo: HResult; stdcall;
  144.     function OnPosRectChange(const rcPosRect: TRect): HResult; stdcall;
  145.     { IOleInPlaceUIWindow }
  146.     function GetBorder(out rectBorder: TRect): HResult; stdcall;
  147.     function RequestBorderSpace(const borderwidths: TRect): HResult; stdcall;
  148.     function SetBorderSpace(pborderwidths: PRect): HResult; stdcall;
  149.     function SetActiveObject(const activeObject: IOleInPlaceActiveObject;
  150.       pszObjName: POleStr): HResult; stdcall;
  151.     { IOleInPlaceFrame }
  152.     function IOleInPlaceFrame.GetWindow = OleInPlaceFrame_GetWindow;
  153.     function OleInPlaceFrame_GetWindow(out wnd: HWnd): HResult; stdcall;
  154.     function InsertMenus(hmenuShared: HMenu;
  155.       var menuWidths: TOleMenuGroupWidths): HResult; stdcall;
  156.     function SetMenu(hmenuShared: HMenu; holemenu: HMenu;
  157.       hwndActiveObject: HWnd): HResult; stdcall;
  158.     function RemoveMenus(hmenuShared: HMenu): HResult; stdcall;
  159.     function SetStatusText(pszStatusText: POleStr): HResult; stdcall;
  160.     function EnableModeless(fEnable: BOOL): HResult; stdcall;
  161.     function IOleInPlaceFrame.TranslateAccelerator = OleInPlaceFrame_TranslateAccelerator;
  162.     function OleInPlaceFrame_TranslateAccelerator(var msg: TMsg;
  163.       wID: Word): HResult; stdcall;
  164.     { IDispatch }
  165.     function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
  166.     function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
  167.     function GetIDsOfNames(const IID: TGUID; Names: Pointer;
  168.       NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
  169.     function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer;
  170.       Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
  171.     { ISimpleFrameSite }
  172.     function PreMessageFilter(wnd: HWnd; msg, wp, lp: Integer;
  173.       out res: Integer; out Cookie: Longint): HResult; stdcall;
  174.     function PostMessageFilter(wnd: HWnd; msg, wp, lp: Integer;
  175.       out res: Integer; Cookie: Longint): HResult; stdcall;
  176.     { TOleControl }
  177.     procedure CreateWnd; override;
  178.     procedure DefineProperties(Filer: TFiler); override;
  179.     procedure DestroyWindowHandle; override;
  180.     function GetByteProp(Index: Integer): Byte;
  181.     function GetColorProp(Index: Integer): TColor;
  182.     function GetTColorProp(Index: Integer): TColor;
  183.     function GetCompProp(Index: Integer): Comp;
  184.     function GetCurrencyProp(Index: Integer): Currency;
  185.     function GetDoubleProp(Index: Integer): Double;
  186.     function GetIDispatchProp(Index: Integer): IDispatch;
  187.     function GetIntegerProp(Index: Integer): Integer;
  188.     function GetIUnknownProp(Index: Integer): IUnknown;
  189.     function GetWordBoolProp(Index: Integer): WordBool;
  190.     function GetTDateTimeProp(Index: Integer): TDateTime;
  191.     function GetTFontProp(Index: Integer): TFont;
  192.     function GetOleBoolProp(Index: Integer): TOleBool;
  193.     function GetOleDateProp(Index: Integer): TOleDate;
  194.     function GetOleEnumProp(Index: Integer): TOleEnum;
  195.     function GetTOleEnumProp(Index: Integer): TOleEnum;
  196.     function GetOleVariantProp(Index: Integer): OleVariant;
  197.     function GetTPictureProp(Index: Integer): TPicture;
  198.     procedure GetProperty(Index: Integer; var Value: TVarData);
  199.     function GetShortIntProp(Index: Integer): ShortInt;
  200.     function GetSingleProp(Index: Integer): Single;
  201.     function GetSmallintProp(Index: Integer): Smallint;
  202.     function GetStringProp(Index: Integer): string;
  203.     function GetVariantProp(Index: Integer): Variant;
  204.     function GetWideStringProp(Index: Integer): WideString;
  205.     function GetWordProp(Index: Integer): Word;
  206.     procedure InitControlData; virtual; abstract;
  207.     procedure InitControlInterface(const Obj: IUnknown); virtual;
  208.     procedure InvokeMethod(const DispInfo; Result: Pointer);
  209.     function PaletteChanged(Foreground: Boolean): Boolean; override;
  210.     procedure PictureChanged(Sender: TObject);
  211.     procedure SetByteProp(Index: Integer; Value: Byte);
  212.     procedure SetColorProp(Index: Integer; Value: TColor);
  213.     procedure SetTColorProp(Index: Integer; Value: TColor);
  214.     procedure SetCompProp(Index: Integer; const Value: Comp);
  215.     procedure SetCurrencyProp(Index: Integer; const Value: Currency);
  216.     procedure SetDoubleProp(Index: Integer; const Value: Double);
  217.     procedure SetIDispatchProp(Index: Integer; const Value: IDispatch);
  218.     procedure SetIntegerProp(Index: Integer; Value: Integer);
  219.     procedure SetIUnknownProp(Index: Integer; const Value: IUnknown);
  220.     procedure SetName(const Value: TComponentName); override;
  221.     procedure SetWordBoolProp(Index: Integer; Value: WordBool);
  222.     procedure SetTDateTimeProp(Index: Integer; const Value: TDateTime);
  223.     procedure SetTFontProp(Index: Integer; Value: TFont);
  224.     procedure SetOleBoolProp(Index: Integer; Value: TOleBool);
  225.     procedure SetOleDateProp(Index: Integer; const Value: TOleDate);
  226.     procedure SetOleEnumProp(Index: Integer; Value: TOleEnum);
  227.     procedure SetTOleEnumProp(Index: Integer; Value: TOleEnum);
  228.     procedure SetOleVariantProp(Index: Integer; const Value: OleVariant);
  229.     procedure SetParent(AParent: TWinControl); override;
  230.     procedure SetTPictureProp(Index: Integer;  Value: TPicture);
  231.     procedure SetProperty(Index: Integer; const Value: TVarData);
  232.     procedure SetShortIntProp(Index: Integer; Value: Shortint);
  233.     procedure SetSingleProp(Index: Integer; const Value: Single);
  234.     procedure SetSmallintProp(Index: Integer; Value: Smallint);
  235.     procedure SetStringProp(Index: Integer; const Value: string);
  236.     procedure SetVariantProp(Index: Integer; const Value: Variant);
  237.     procedure SetWideStringProp(Index: Integer; const Value: WideString);
  238.     procedure SetWordProp(Index: Integer; Value: Word);
  239.     procedure WndProc(var Message: TMessage); override;
  240.     property ControlData: PControlData;
  241.     { IPropertyNotifySink }
  242.     function OnChanged(dispid: TDispID): HResult; virtual; stdcall;
  243.     function OnRequestEdit(dispid: TDispID): HResult; virtual; stdcall;
  244.   public
  245.     constructor Create(AOwner: TComponent); override;
  246.     destructor Destroy; override;
  247.     procedure BrowseProperties;
  248.     procedure DefaultHandler(var Message); override;
  249.     procedure DoObjectVerb(Verb: Integer);
  250.     function GetEnumPropDesc(DispID: Integer): TEnumPropDesc;
  251.     function GetHelpContext(Member: string; var HelpCtx: Integer;
  252.       var HelpFile: string): Boolean;
  253.     procedure GetObjectVerbs(List: TStrings);
  254.     function GetPropDisplayString(DispID: Integer): string;
  255.     procedure GetPropDisplayStrings(DispID: Integer; List: TStrings);
  256.     function IsCustomProperty(DispID: Integer): Boolean;
  257.     function IsPropPageProperty(DispID: Integer): Boolean;
  258.     procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
  259.     procedure SetPropDisplayString(DispID: Integer; const Value: string);
  260.     procedure ShowAboutBox;
  261.     property OleObject: Variant;
  262.     property PerPropBrowsing: IPerPropertyBrowsing;
  263.     property DefaultDispatch: IDispatch;
  264.     property TabStop default True;
  265.   end;
  266.  
  267.   EOleCtrlError = class(Exception);
  268.  
  269. function FontToOleFont(Font: TFont): Variant;
  270. procedure OleFontToFont(const OleFont: Variant; Font: TFont);
  271.  
  272. implementation
  273.