RUS  ENG 

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

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

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

как это сделать на vb.net или c# ?????
Плагин на c#
 
[QUOTE]Дмитрий Озеров написал:
[URL=/forums/?PAGE_NAME=profile_view&UID=2014]Александр[/URL],
1. Пользовательское окно может быть плавающим или модальным. Плавающее окно (может например докироваться), как окна браузера БД, "Свойства", "Рабочее место" и проч. создаются либо с помощью плагина-элемента ActiveX, либо вручную в коде плагина через Zulu.CreateControlBar и IControlBar.EmbedControl
2. Формы WinForms рекомендую использовать только модально, иначе немодальные (плавающие) формы нормально без обработчика сообщений, реализованного в WinForms, в чужеродном процессе работать не будут.
3. Сообщение, которое Вы привели, касается невозможности непосредственной отладки dll (что верно), причём здесь "не собирается, ругается на ошибки dll" ??[/QUOTE]
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.[CODE]
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;[/CODE]
получить набор значений
 
[QUOTE]Дмитрий Озеров написал:
ExecSQL[/QUOTE]
пишу так [B]SQL[/B][B] := Layer.ExecSQL('select sys fr om auto wh[/B][B]ere name='+name,''); result:=SQL.Dataset; [/B]и выдает ошибку, что я делаю не правильно?
Изменено: Александр - 27.02.2019 08:44:01
получить набор значений
 
[CODE]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));
[/CODE]

Пытаюсь вернуть набор записей, но не текущего активного запроса, а выполнив 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#
 
[QUOTE]Дмитрий Озеров написал:
[URL=/forums/?PAGE_NAME=profile_view&UID=2014]Александр[/URL], если уже есть опыт создания того же самого на Delphi, то я бы рекомендовал использовать её (C# требует мне кажется большей квалификации), либо повторить всё то же самое, но на C#. Zulu.CreateControlBar предоставляет бОльшую гибкость, но и требует бОльшего понимания.[/QUOTE]
а у вас нет видео урока по созданию плагина на с# хотя бы самого элементарного, или хотя бы текстовой инструкции...
Плагин на c#
 
[QUOTE]Дмитрий Озеров написал:
[URL=/forums/?PAGE_NAME=profile_view&UID=2014]Александр[/URL],
1. Пользовательское окно может быть плавающим или модальным. Плавающее окно (может например докироваться), как окна браузера БД, "Свойства", "Рабочее место" и проч. создаются либо с помощью плагина-элемента ActiveX, либо вручную в коде плагина через Zulu.CreateControlBar и IControlBar.EmbedControl
2. Формы WinForms рекомендую использовать только модально, иначе немодальные (плавающие) формы нормально без обработчика сообщений, реализованного в WinForms, в чужеродном процессе работать не будут.
3. Сообщение, которое Вы привели, касается невозможности непосредственной отладки dll (что верно), причём здесь "не собирается, ругается на ошибки dll[/QUOTE]
извините за глупые вопросы, мне не хватает еще знаний,  на делфи мы делали плагин так:  создали юзер интерфейс, сделали ветку в реестре, зарегистрировали ее и запускали через пункт меню зулу модули......в си шарпе я так понимаю нужно сделать ClassLibrary покдлючить через ссылки dll от zulu library и потом уже как вы выше написали создавать интерфейс через Zulu.CreateControlBar ????
Плагин на c#
 
[QUOTE]Дмитрий Озеров написал:
[URL=/forums/?PAGE_NAME=profile_view&UID=2014]Александр[/URL], на C# есть возможность создания UserControl, который будет действовать как ActiveX Control:
[URL=https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/]https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/[/URL]
и др. с  [URL=https://www.google.com/search?q=c%23+activex+control]https://www.google.com/search?q=c%23+activex+control[/URL] [/QUOTE]
я так и делал создал клаас библиотеки, проверил его через эксплоер да работает...но вопрос как мне создать пользовательское окно, например с различными кнопками, чтобы когда когда запускаешь модуль из зулу открывалось окно winforms  с к различными кнопками....если в с# в ClassLibary добавить winforms то она уже не собирается, ругается на ошибки dll  [QUOTE]

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

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

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

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

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

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