Подключиться к дереву в плавающей форме

Автор mr. Tim, 27.02.20, 15:27:48

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

mr. Tim

Помогите пожалуйста подключиться к контенту плавающей формы Библиотека пользователей после нажатия кнопки на инструментальной панели.
Пока хватило лишь знаний на нахождение самой формы и взять её имя. Получил объект типа IContent, а дальше вообще не понятно что делать, чтобы взять управление деревом.
vrt_doc.jpg
unit BtnTextFileImpl;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

  ComObj, ActiveX, TextEditorOCX_TLB, StdVcl, Vertical_TLB, Dialogs, SysUtils,

  Windows, TechFormOCX_TLB, Messages, Variants, Classes, Graphics, Controls, Forms,
 StdCtrls, ExtCtrls, TreeModelOCX_TLB, DockableContentProj_TLB, vkernelLib_TLB;

type

  TBtnTextFile = class(TAutoObject, IBtnTextFile, IAction)

  private

    VRT: IApplication_; //Интерфейс доступа к системе Вертикаль
    Dock: IDockableContainer;
    Content: IContent;

  protected

    function Execute(const Sender: IDispatch;

      const Params: WideString): HResult; safecall;

    function implCreate(const Owner: IDispatch): HResult; safecall;

    procedure implDestroy; safecall;

    function implGetHint(const Sender: IDispatch; const Params: WideString;

      var Default: WordBool): WideString; safecall;

    { Protected declarations }

  end;


implementation

uses ComServ;

 
function TBtnTextFile.Execute(const Sender: IDispatch;

  const Params: WideString): HResult;

var

  ReturnData:OleVariant;

begin

  result:=S_OK;

Dock := VRT.DockableContainers[0];
Content := Dock.Content;

ShowMessage('Dock cnt: ' + IntToStr(Dock.Application.DockableContainerCount));
ShowMessage('id: ' + Dock.ID);
ShowMessage('clsid: ' + Dock.ContentCLSID);
ShowMessage('capt: ' + Dock.Caption);

end;

 
function TBtnTextFile.implCreate(const Owner: IDispatch): HResult;

var

  ButtonItem:IButtonItem;

begin

  result:=Owner.QueryInterface(IID_IButtonItem,ButtonItem);

  if Succeeded(result) then

    VRT :=ButtonItem.Application;

  ButtonItem:=nil;

end;

 
procedure TBtnTextFile.implDestroy;
begin

  VRT :=nil;

end;

 
function TBtnTextFile.implGetHint(const Sender: IDispatch;
  const Params: WideString; var Default: WordBool): WideString;

begin

end;


initialization

  TAutoObjectFactory.Create(ComServer, TBtnTextFile, Class_BtnTextFile,
    ciMultiInstance, tmApartment);

end.

mr. Tim

Так же если я например пытаюсь получить модель контента таким образом
model := (Doc.Content as ITechFormX).Model;

получаю ошибку - "Interface not supported".
Пробую различными способами взять контент и поработать с ним(смотрю примеры, но все они работают не с плавающими формами, а с ActiveMDIChild, хотя тип контента у них одинаковы) делаю по аналогии, но всегда получаю ошибку - "Interface not supported".

Может кто-нибудь делал уже проекты для работы с плавающими формами и сможет подсказать как эти ошибки решить?