RUS  ENG 

custombrowseobject и custombrowsemethod

Страницы: 1
RSS
custombrowseobject и custombrowsemethod
 
Я правильно понимаю, что эти теги позволяют вызвать свой плагин прямо из окна семантической информации, а потом занести полученную плагином информацию в соответствующие поля (или поле?).
 
Не буквально плагин, а любой COM-объект, поддерживающий дуальный интерфейс или IDispatch.
custombrowseobject - указывает ProgID этого объекта, а custombrowsemethod - собственно метод его интерфейса, который нужно вызвать.
Формат метода определенный:
HRESULT OnCustomBrowse( [in] long hWnd, [in] long * lpRect,
[in] IDispatch *Db, [in] IDispatch *Form, [in] long nRow, [in] VARIANT CustomParams);
 
Что передается в lpRect и nRow?
 
В метод передаются следующие параметры:
hWnd - дескриптор окна браузера (HWND)
lpRect - указатель на RECT, содержащий screen-координаты прямоугольника области браузера. Может использоваться для позиционирования всплывающих окон.
Db - объект IZbDatabase - база данных, загруженная в браузер.
Form - объект IZbStdBrowseForm, описывающий форму, отображаемую в браузере. Через него можно читать и менять значения в строках браузера.
nRow - номер поля, для которого вызван данный внешний обработчик. В гриде пользователь нажал на кнопку многоточие именно в этой строке.
CustomParams - зарезервировано.
 
Здесь: www.politerm.com.ru/download/zulu/samples/vc/zbcustombrowse.rar выложен пример внешнего обработчика на Visual C++ 6.0.
 
С базой и формой общается нормально, но форма модуля не показывается.
От
var Document: IDocument;
begin
Document := FConnector.Zulu.ActiveDocument;

вылетает ошибка.
Значит с картой соедениться не получиться?
 
Если Вы о примере выше, то это не плагин Zulu, а просто COM-объект, являющийся внешним обработчиком браузера. Откуда на руках у Вас берется FConnector ? Он наверняка nil ?
 
Метод указанный в custombrowsemethod я вставил в плагин Zulu. Идея состояла в том, чтобы можно было в браузер вставлять автоматически некоторые данные об выделенных объектах на карте, чтобы не заносить их в ручную.
 
объект custombrowseobject не загружается как плагин Zulu. Это может быть произвольный объект. Следовательно, ConnectZuluPlugin не вызывается и FConnector у Вас не присваивается нужным объектом.
Однако, можно сделать следующее: в описании плагина в Реестре добавьте DWORD-параметр AutoRun со значением 1. Это позволит плагину автоматически загружаться при запуске Zulu. В теле метода ConnectZuluPlugin сохраните или FConnector или свойство Zulu где нибудь в глобальной переменной, чтобы к нему был доступ из других объектов в вашем модуле.
Теперь, custombrowseobject либо оставьте тем же (при клике в браузере создастся еще один экземпляр вашего объекта), либо реализуйте в другом объекте. Но теперь в обработке custombrowsemethod у вас есть возможность иметь доступ к Zulu через глобальную переменную.
Не забудьте освободить ссылки на объекты Zulu в методе DesconnectZuluPlugin.
 
ключ реестра следующий:
[HKEY_LOCAL_MACHINE\SOFTWARE\Zulu\Plug-Ins\MyPlugIn]
@="Мой плагин"
"AutoRun"=dword:00000001
 
Сработало. Как бы еще спрятать пустое окно плагина?
 
А плагин выполнен в виде ActiveX-контрола (TActiveForm)? Если да, то в нашем случае его лучше сделать в виде COM-объекта (ActiveX Object), а форму уже показывать модально при реализации custombrowsemethod.
 
Попытался сделать плагин в виде COM-объекта:
---
uses
Windows, ActiveX, Classes, ComObj, ITest_f_TLB, StdVcl, Zulu_TLB, ZuluLib_TLB, ZB_TLB,
Dialogs;
type
TTest_f = class(TTypedComObject, ITest_f)
protected
function ConnectZuluPlugin(const Conn: IUnknown): Integer; safecall;
procedure DisconnectZuluPlugin; safecall;
procedure Method1; safecall;
{Declare ITest_f methods here}
end;
---

В Zulu:
"Невозможно подключить модуль Test. Объект-сервер недоступен (ошибка 0x80040154)"
 
Класс TTest_f должен быть зерегистрирован в Реестре, проверьте в другой тестовой программе, что объект с таким CLSID действительно создается. Проверьте, что ProgID(CLSID) этого объекта правильно указан в регистрации плагина.
Ошибка 0x80040154 означает "Class not registered".
 
Не планируется ли добавить возможность загрузки custombrowseobject, как полноценного плагина с вызовом ConnectZuluPlugin? В c# метод
Цитата:
в описании плагина в Реестре добавьте DWORD-параметр AutoRun со значением 1. Это позволит плагину автоматически загружаться при запуске Zulu. В теле метода ConnectZuluPlugin сохраните или FConnector или свойство Zulu где нибудь в глобальной переменной, чтобы к нему был доступ из других объектов в вашем модуле.
работать не хочет. Видимо при вызове custombrowseobject создается новый экземпляр класса и FConnector = null
Цитата:

private Zulu.IPluginConnector FConnector;

public void utch(int hWnd, ref int lpRect, object Db, object Form, int nRow, object CustomParams)
{
zulb = (ZB.IZbDatabase)Db;
zulf = (ZB.IZbStdBrowseForm)Form;
zulf.SetFieldValue(nRow, "1111");
if (FConnector == null)
{
MessageBox.Show("Плагин не запущен");
}
else
{
MessageBox.Show("Плагин запущен");
}
}

 
Aksut, нет, custombrowseobject - простой COM-объект. Плагин и так можно загрузить без всякого custombrowseobject. Действительно, при вызове custombrowseobject всегда создается новый COM-объект. Проблема в Вашем коде, т.к. FConnector насколько я понимаю - член экземпляра класса, а вовсе не глобальная переменная, о которой я говорил, описывая как из разных экземпляров класса обратиться к одному коннектору.
В любом случае, сейчас в системе появились события, позволяющие обрабатывать custombrowseobject прямо из плагина. См. https://www.politerm.com/zuludoc/zuluax/Zulu_evBrowserCustomBrowse.htm
 
Цитата:
См. https://www.politerm.com/zuludoc/zuluax/Zulu_evBrowserCustomBrowse.htm</i><hr size="1" noshade>
На этой страницы с объекта IZbStdBrowseParam идет ссылка на страницу IZbBrowser Interface (https://www.politerm.com/zuludoc/zuluax/IZbBrowser_cls.htm).
 
Можно ли в браузере данных длинные числа 16-18 цифр отображать не в экспоненциальном формате?
 
сейчас нет.
 
Цитата:
На этой страницы с объекта IZbStdBrowseParam идет ссылка на страницу IZbBrowser Interface (https://www.politerm.com/zuludoc/zuluax/IZbBrowser_cls.htm).
Правильная ссылка https://www.politerm.com/zuludoc/zuluax/IZbStdBrowseParam_cls.htm
Спасибо за сообщение, мы подправим.
Страницы: 1