RUS  ENG 

Александр (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Как сделать плагин. Руководство.
 
Цитата
Дмитрий Озеров написал:
Цитата
Александр написал:
"не удалось создать окно модуля, код ошибки 0х80040154, класс не зарегистрирован"
Такая ошибка возможна, если сборка скомпилирована не под платформу x86, а под AnyCPU и запускается на 64-битной ОС.
да, спасибо все заработало....проблема была то что делал regasm.exe и зпапки Framework64....когда сделал regasm.exe из просто папки framework все отлично запустилось.
Как сделать плагин. Руководство.
 
Цитата
Дмитрий Озеров написал:
Цитата
Александр написал:
как это сделать на vb.net или c# ?????
Вот примеры для C#:
https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/
https://code.msdn.microsoft.com/CSActiveX-c3f43e7d
спасибо я эти ссылки уже второй день изучаю =) просто по аналогии как в делфи проверял через подключение к IE...функции из примера срабатывали, а вот сам графический интерфейс(форма пользовательская) не отрисовывалась...отсюда и ступор..но сейчас вы опубликовали исходники для с# и стало более понятно что к чему....и еще вопросик, я ваш пример скомпилировал и зарегистрировал через regasm.exe /codebase никаких рошибок не было, но при попытке запустить плагин из зулу, выдает ошибку "не удалось создать окно модуля, код ошибки 0х80040154, класс не зарегистрирован"
Как сделать плагин. Руководство.
 
Цитата
Должен предоставить пользователю некоторую форму, встроенную в систему Zulu, с которой пользователь будет взаимодействовать. Форма является основной частью функционирования плагина. Тогда плагин можно оформить в виде библиотеки элементов ActiveX, и форма плагина должна быть выполнена в виде элемента ActiveX (OLE Control).

как это сделать на vb.net или c# ?????
Плагин на c#
 
Цитата
Дмитрий Озеров написал:
Александр,
1. Пользовательское окно может быть плавающим или модальным. Плавающее окно (может например докироваться), как окна браузера БД, "Свойства", "Рабочее место" и проч. создаются либо с помощью плагина-элемента ActiveX, либо вручную в коде плагина через Zulu.CreateControlBar и IControlBar.EmbedControl
2. Формы WinForms рекомендую использовать только модально, иначе немодальные (плавающие) формы нормально без обработчика сообщений, реализованного в WinForms, в чужеродном процессе работать не будут.
3. Сообщение, которое Вы привели, касается невозможности непосредственной отладки dll (что верно), причём здесь "не собирается, ругается на ошибки dll" ??
1. в делфи и в vb6.0 есть возможность создавать activeX control(OCX), но в visual studio 2017 в c# и в vb.net ( и в более ранних версиях) такой возможности нет, можно только создать dll с пользовательским элементом управления. Если создать такую dll с пользовательским элементом управления, сделать сборку видимой для COM и зарегистрировать через regasm и подключить для проверки в IExplorer <OBJECT id="testActiveX" classid="clsid:bd9789e0-143e-42ec-8857-9553d9a39c22" codebase="testActiveX.cab"></OBJECT> то ничего не происходит, форма не отображается. если в этой DLL писать функции и вызывать их в IExplorer через JS то они срабатывают.

Собственно вопрос как создаются плагины с пользовательским интерфейсом как без помощи ОСХ ??? или нужно создавать DLL в котором описывать уже функции и методы, и уже в это DLL через CreateControlBar рисовать окно плагина(но как это делать без графического редактора пользовательского интерфейса, не в ручную же описывать где должны быть кнопки и поля ввода)? не могли бы вы дать примера кода как это реализовывается на vb.net как пример, а на не бейсике 6 версии..на дворе как бы идет 2019 год,.......
Изменено: Александр - 27.02.2019 11:17:42
получить набор значений
 
Ошибка несоответствия типов [dcc32 Error] Unit1.pas(747): E2010 Incompatible types: 'IZbDataset' and 'IDispatch'
в строке ds:=Result.DataSet;

Не понимаю, почему типы разные, ведь и то и то по идее набор записей DataSet.
Код
var
    Document: IDocument;
    Map: IMapDoc;
    Layer: ILayer;
    db: IZbDatabase;
    Result: IZSqlResult;
    ds: IZbDataset;

begin

BaseName := Layer.BaseName;

db := CoZbDatabase.Create;
db.Open(BaseName);

Result := Layer.ExecSQL('sel ect sys fr om auto where name='+name,'');

ds:=Result.DataSet;
получить набор значений
 
Цитата
Дмитрий Озеров написал:
ExecSQL
пишу так SQL := Layer.ExecSQL('select sys fr om auto where name='+name,''); result:=SQL.Dataset; и выдает ошибку, что я делаю не правильно?
Изменено: Александр - 27.02.2019 08:44:01
получить набор значений
 
Код
procedure TTest.Timer1Timer(Sender: TObject);
var
    Document: IDocument;
    Map: IMapDoc;
    Layer: ILayer;
    Coord1, Coord2 : crs;
    Pt: IZPoint;
    db: IZbDatabase;
    Result: IZSqlResult;
    BaseName, S, V: string;
    ds: IZbDataset;
    dd: IZbQueries;
    i: integer;
    Index,sysid :integer;
    speed, name : string;
    IndexVar : OleVariant;
    DBCoordX, DBCoordY : double;
    Result1 :wordbool;

begin
Document := FConnector.Zulu.ActiveDocument;
Map := IMapDoc(Document.NativeDoc);
Index := Map.Layers.GetIndexByName('zulu://srv5:6473/***/Auto/auto.zl');
IndexVar := Index;

Map.Layers.Activate(IndexVar);
Layer := Map.Layers.Active;

Coord1 := Layer.GetCRS;
Coord2 := CoCRS.Create;

Coord2.InitByCode('EPSG:4326');

BaseName := Layer.BaseName;

db := CoZbDatabase.Create;
//db.Open(BaseName);


ADOQuery1.Close;
ADOQuery1.Sql.Clear;
ADOQuery1.Sql.Add('SEL ECT * FR OM poisk ORDER BY ID DESC LIMIT 15');
ADOQuery1.Active := true;
ADOQuery1.First;

    DBCoordX := ADOQuery1.Fields[3].Value;
    DBCoordY := ADOQuery1.Fields[4].Value;
    speed:=ADOQuery1.Fields[5].Value;
    name:=ADOQuery1.Fields[2].Value;
    ShowMessage(name);

    sysid:=0;

    //Result := Layer.ExecSQL('sel ect sys fr om auto wh ere name='+name,'');
    //ds:=db.OpenSQL(BaseName,'sel ect sys fr om auto wh ere name='+name);
    ds:=db.OpenSQL(db.SelectAll,'select sys fr om auto');

    ShowMessage('1');
    ShowMessage('Строк '+ inttostr(ds.FieldCount));


Пытаюсь вернуть набор записей, но не текущего активного запроса, а выполнив OpenSQL, но не пойму что "скормить" в первый параметр, который согласно описания хоть и не является обязательным но Delphi ругается, если его не указать.
ds:=db.OpenSQL(db.SelectAll,'select sys fr om auto');
Плагин на c#
 
и можно ли через пункт меню модули -> создать -> java script написать модуль, который будет брать данные из внешней базы данных(mysql) и отрисовывать обьекты на карте используя setInterval() допустим каждые 5 минут?
Изменено: Александр - 26.02.2019 11:29:35
Плагин на c#
 
Цитата
Дмитрий Озеров написал:
Александр, если уже есть опыт создания того же самого на Delphi, то я бы рекомендовал использовать её (C# требует мне кажется большей квалификации), либо повторить всё то же самое, но на C#. Zulu.CreateControlBar предоставляет бОльшую гибкость, но и требует бОльшего понимания.
а у вас нет видео урока по созданию плагина на с# хотя бы самого элементарного, или хотя бы текстовой инструкции...
Плагин на c#
 
Цитата
Дмитрий Озеров написал:
Александр,
1. Пользовательское окно может быть плавающим или модальным. Плавающее окно (может например докироваться), как окна браузера БД, "Свойства", "Рабочее место" и проч. создаются либо с помощью плагина-элемента ActiveX, либо вручную в коде плагина через Zulu.CreateControlBar и IControlBar.EmbedControl
2. Формы WinForms рекомендую использовать только модально, иначе немодальные (плавающие) формы нормально без обработчика сообщений, реализованного в WinForms, в чужеродном процессе работать не будут.
3. Сообщение, которое Вы привели, касается невозможности непосредственной отладки dll (что верно), причём здесь "не собирается, ругается на ошибки dll
извините за глупые вопросы, мне не хватает еще знаний, на делфи мы делали плагин так: создали юзер интерфейс, сделали ветку в реестре, зарегистрировали ее и запускали через пункт меню зулу модули......в си шарпе я так понимаю нужно сделать ClassLibrary покдлючить через ссылки dll от zulu library и потом уже как вы выше написали создавать интерфейс через Zulu.CreateControlBar ????
Плагин на c#
 
Цитата
Дмитрий Озеров написал:
Александр, на C# есть возможность создания UserControl, который будет действовать как ActiveX Control:
https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/
и др. с https://www.google.com/search?q=c%23+activex+control
я так и делал создал клаас библиотеки, проверил его через эксплоер да работает...но вопрос как мне создать пользовательское окно, например с различными кнопками, чтобы когда когда запускаешь модуль из зулу открывалось окно winforms с к различными кнопками....если в с# в ClassLibary добавить winforms то она уже не собирается, ругается на ошибки dll
Цитата

Проект, создающий библиотеку классов, не может быть

непосредственно запущен.

для отладки данного проекта добавьте к решению проект

создающий приложение и ссылающийся на эту библиотеку и

сделайте его запускаемым.

Плагин на c#
 
cgf
Цитата
Дмитрий Озеров написал:
В текущей версии ZuluGIS 8.0 появилась возможность для использовать файл манифеста для описания плагина вместо реестра.
(см. https://www.politerm.com/zuludoc/zuluax/index.html#plugin_info.html спасибо большое. буду изучать
спасибо большое, буду изучать
Плагин на c#
 
Также интресует как сделать? как на с# создать dll activex понятно, но как сделать юзеринтерфейс и внедрить его в зулу не понятно, на делфи создается ocx, на с# не понятно как делать. если создать винформу то она компилится как exe ....
Страницы: 1