RUS  ENG 

Ekolog (Все сообщения пользователя)

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

Страницы: 1 2 След.
Как сделать плагин. Руководство.
 
И да, что-то я не нашёл раздела с найденными ошибками в текущей версии программы. Укажите, а пока здесь напишу.
Давно дело было, уже подзабыл точно не скажу, но вот сейчас снова столкнулся с некорректной работой с проекциями.
...
пардон, проверяю
Как сделать плагин. Руководство.
 
GetClosestElementByXY пробовал - линию находит, а точку нет. Попробую ещё раз. С ElemIDByXY экспериментирую.
...
GetClosestElementByXY работает, была не та проекция у слоя точек. Остальные функции похоже тоже из-за этого не работали.
Как сделать плагин. Руководство.
 
Да, благодарю, это то, что надо. Подойдут оба способа. Все глаза проглядел, а этих функций не увидел...
Только получается, что в Layer.ElemIDByXY координаты нужно указывать точно, без допуска? Если бы было что-то вроде радиуса поиска, как в GetClosestElementByXY, такая функция есть? Или ловить контуром.
Как сделать плагин. Руководство.
 
Подскажите, пожалуйста, как можно найти (указать) символ? Пробовал пересечением слоя с контуром - не находит.
Может, напрямую в него мышью тыкать, может, ещё как.
Как сделать плагин. Руководство.
 
Ваш пример с радиокнопками у меня тоже залит чёрным, видимо, в моей системе дело.

Подскажите, как зарегистрировать плагин в 64х разрядной системе (7)? Я пробовал брать из папки System32 файл Regsvr32 и им регистрировать - не получается, ошибку выдаёт.
Как сделать плагин. Руководство.
 
Типы в библиотеке Зулу нашёл вроде. eStyleElemTypeSymbol имеется в виду?
А про режим не нашёл. Расскажите поподробнее, или где посмотреть.
И общая логика работы с символами не укладывается в голове. Вот нарисовал я заранее символ в слое, его открыл, а дальше... ? Или программно нарисовал (как в примере "Работа с символами"), и на строке Layer.AddSymbol ... программа спотыкается.
Как сделать плагин. Руководство.
 
Что-то непонятно, как добавить символ?
Что за номер типа? Bitmap - Line - Symbol - Unknown?
Что за номер режима?
Типовые символы - это те, которые уже есть в системе? Это про них идёт речь в AddSimpleSymbol method (Layer)?  Так там только кружок, больше нету.
Что возвращает функция AddSymbol method (Layer)?
Как сделать плагин. Руководство.
 
Да, конечно OptionButton. Даже и не знаю, что сказать. Скриншот выслать?
Пока вышел из положения тем, что разместил их поверх фрейма. Так хотя бы визуальное оформление есть.
Вы не могли бы выложить куда-нибудь ваш плагин с радиокнопками, чтобы я у себя его проверил? Может, в системе дело?
Как сделать плагин. Руководство.
 
Эффект залития OptionBox`а внутри фрейма наблюдается только в Зулу, в обычном проекте VB такого нет. Вряд ли кто-то лучше вас разбирается в Зулу. А поиск не дал результата.
Как сделать плагин. Руководство.
 
Без скобок заработало.

Почему внутри фрейма OptionBox`ы (их текст) залиты чёрным фоном? Не отключается. Снаружи фрейма фона нет.
Как сделать плагин. Руководство.
 
Ого, так там совсем другая функция была!
А я как раз собирался спросить, нельзя ли по экранным координатам определить реальные.

Вот пишу я строку
View.GetRealXY(ScrX, ScrY, X, Y)
А VB меня и спрашивает: где, мол, знак = после скобок?
А я ему: А хто ж его знает??!
Так чего ему надо-то?
Как сделать плагин. Руководство.
 
Вы думаете, я не смотрел там, перед тем, как спросить?

Функция возвращает координаты. Как она может возвратить сразу две координаты?
Если координаты - это те Х и Y, которые в скобках, то как их выудить?
По идее, в скобках нужно вводить параметры для работы функции. Тогда что за Х и Y надо вводить в скобки, если она "Возвращает координаты центра отображения карты"? Для чего? VB предлагает это сделать.
Почему VB просит знак = после скобок?
В общем, сплошные вопросы. А примера в справке нет. Выручайте.
Как сделать плагин. Руководство.
 
"Метод GetRealX можно применять только для план-схемы."
- вот эту бы фразу в справку...

Как использовать метод GetRealXY?
Как сделать плагин. Руководство.
 
Вот два куска кода из "Отравляющих веществ":

If EventID = evMapLButtonDown Then
       x = Param2 And 65535
       y = Param2 / 65536
       Set View = Src
       x = View.GetRealY(x)
       y = View.GetRealX(y)
       OnZuluEvent = Control.OnMapClick(y, x)
       Set View = Nothing
   End If

Public Function OnMapClick(ByVal RealX As Double, ByVal RealY As Double)
If FindBtn.Value = 1 Then
   DropX = RealX
   DropY = RealY
   MapX.Caption = Str$(RealX / 100)
   MapY.Caption = Str$(RealY / 100)
   FindBtn.Value = 0
   OnMapClick = True
End If
End Function

Если запустить этот плагин на привязанной карте и выбрать точку, то координаты, выдаваемые плагином, сильно отличаются от правды.
Объясните пожалуйста, как пересчитывать координаты, полученные функцией GetRealX, в реальные координаты местности. Я так понимаю, именно они используются в системе координат объектов Зулу?
Как сделать плагин. Руководство.
 
Да, нашёл ошибку.
Подскажите, пожалуйста, как пересчитывать координаты? Смотрел преобразования в примере "Отравляющие вещества" - ничего не понял. На реальной карте выдаёт что-то несуразное.
Как сделать плагин. Руководство.
 
Поправил. Теперь при запуске плагина возникает ошибка
Plugin connect failed. Plugin: ''. Method: 'ConnectZuluPlugin'. Error: 0x800A0009. Subscript out of range.

В рабочем плагине тоже не была отмечена Database Connection Library, но всё работает.
Как сделать плагин. Руководство.
 
<blockquote>Цитата:<hr size="1" noshade><i>
1. В Visual Basic Вам нужно создать новый проект. Тип проекта - ActiveX Control
2. Сделайте первоначальный дизайн формы (UserControl), скомпилируйте проект, </i><hr size="1" noshade></blockquote>Сделал новый проект. Скопировал туда код из вашего проекта SimpleformPlugin. На этапе компиляции возникает ошибка компиляции "Определяемый пользователем тип не определён" и выделяет фразу Connector As IPluginConnector
Как сделать плагин. Руководство.
 
На счёт переменной PluginForm Вы правы, она сама мне не нужна, мне нужен UserControl.
У меня ещё не сформировалось полное понимание об управлении в проекте VB. Не могли бы Вы объяснить все этапы, которые нужно выполнить, чтобы вот эта строчка заработала (уже после подключения к Зулу через IPluginConnector)?
Set NextCheckbox = UserControl.Controls.Add("VB.checkbox", "CheckboxName")

Когда я её вставил в первый раз, она не работала. Потом заработала, и я не могу понять, что было не так.
И ещё, в дочернем окне она, конечно же, не желает работать, как и до того в основной форме. Не могу понять, как её запустить.
Это какие-то дебри VB, которые я никак не могу отыскать.
Как сделать плагин. Руководство.
 
Я не о том, что в принципе не задаётся, а о том, что если его не задавать, то всё равно работает. Или я чего-то не заметил?

"Например Вы объявляете переменную Dim PluginForm As UserControl и дальше используете ее в цикле. Не инициализируя никак. Как так ?! Вот Вам Basic nи говорит "Object variable or With block variable not set"."

Подскажите, как надо инициализировать?
Как сделать плагин. Руководство.
 
Просто в моём случае PluginForm - это название формы. Ведь мы же не инициализируем название формы в "обычном" проекте VB! Неувязочка!
А как его надо инициализировать?

И ещё подскажите, пожалуйста, как добавить чекбокс в коллекцию?
Добавить текстовое значение выходит, а по аналогии добавить чекбокс в коллекцию UserControl не выходит.
Set NextCheckbox = UserControl.Controls.Add("VB.checkbox", CheckboxName)
Опять же, в обычном проекте VB данная строчка работает.

Ничего не могу понять... только что не работало ни под каким соусом, потом бац! и заработало! :/
Итак, чтобы добавить чекбокс, делаем вот что:
Dim NextCheckbox As VB.CheckBox
Set NextCheckbox = UserControl.Controls.Add("VB.checkbox", "CheckboxName")
'здесь UserControl.Controls - коллекция управляющих элементов, .Add(что добавляем, как его зовут) - функция добавления
'далее сдвигаем чекбокс
NextCheckbox.Move 50, 50, 3135, 255
'задаём ему метку
NextCheckbox.Caption = "чек"
'делаем его видимым
NextCheckbox.Visible = True
[ Закрыто] Пожелания на версию 8
 
1. Сделать возможность инвертировать колесо мыши.
2. Улучшить работу с растрами: не загружать все сразу при запуске программы, а только те, которые отображаются. Сейчас они, похоже, грузятся все, какие есть, т.к. чем больше их подключаешь, тем дольше грузится карта (даже если они не отображаются). Приходится либо оставлять самые востребованные, либо ждать по 10 минут.
3. Действие колеса распространяется туда, где в данный момент находится курсор мыши.
4. При увеличении растра больше 100% он становится нечитаемым (в обычном графическом просмотрщике - читаемый).
5. Хотелось бы более умелую и гибкую систему настройки внешнего вида объектов и надписей в зависимости от масштаба (разбиение масштаба на несколько уровней, для каждого - свои настройки).
Как сделать плагин. Руководство.
 
В продолжене предыдущего поста. Как сделать циклический перебор объектов? Например, чекбоксов.
В VB работает код:

Dim x As Object
Dim text As String

For Each x In PluginForm.Controls 'в VB можно писать Me.Controls
If TypeName(x) = "CheckBox" Then
If x.Value = 1 Then
text = text & x.Caption & " выбран" & vbCrLf
Else: text = text & x.Caption & " не выбран" & vbCrLf
End If
End If
Next x
Label1.Caption = text

---
Разобрался. нужно писать так:
For Each x In UserControl.Controls

Почему-то название формы, которая имеет класс UserControl, в тексте кода не распознаётся как UserControl.
Если прописать
Dim PluginForm As UserControl и For Each x In PluginForm.Controls
то название формы PluginForm распознаётся как UserControl и предлагаются варианты методов и свойств, но всё равно не работает и ошибка в Зулу меняется на "91", "Object variable or With block variable not set".

Интересно, почему так?
Как сделать плагин. Руководство.
 
с отображением фторой формы разобрался - надо запускать её так: Form2_Layers.Show (1) Здесь (1) - это параметр Modal.

в цикле
For Each ИмяОбъекта In ИмяКоллекции
   Операции над объектами
Next ИмяОбъекта

к какой коллекции нужно относить CheckBox?
Разобрался. Если отнести к Me.Controls - компиляция не происходит, говорит, что метод или участник ".Controls" не найден. В обычном проекте Visual Basic всё работает.
Нужно писать <имя формы>.Controls
Правда, пока всё равно не работает.

Что касается программного создания элементов, то создание кнопки выглядит так:
Dim ctlCommand As VB.CommandButton
Set ctlCommand = Controls.Add("VB.CommandButton", "ctlCommand1", Form1)
' определяем размер и место кнопки
ctlCommand.Move 2040, 50, 1500, 500
' устанавливаем надпись кнопки
ctlCommand.Caption = "кнопка"
' делаем её видимой
ctlCommand.Visible = True

В обычном проекте это работает, а в коде плагина Зулу - нет, спотыкается на строчке
Set ctlCommand = Controls.Add("VB.CommandButton", "ctlCommand1", Form1)

Здесь тоже есть "controls". Как нужно писать для Зулу?
Подставил имя формы перед Controls.Add - ошибка сменилась на "Object required".
Как сделать плагин. Руководство.
 
почему-то не работают функции вида
Set newCheckbox = Controls.Add("VB.checkbox", ControlName, Form1)
ошибка "Type mismatch"
Возможно ли программно вставлять чекбоксы по количеству слоёв в карте?
Как сделать плагин. Руководство.
 
Разобрался. В выражении Set aDoc = Zulu.ActiveDocument пропущен объект Connector, т.е. должно быть вот так:
Set aDoc = Connector.Zulu.ActiveDocument

Видимо, Вы это мне и сказали, но я почему-то никак не могу связать вашу фразу с этим смыслом :(

Теперь другой вопрос: при попытке запустить ещё одну форму функцией Form_2.Show Зулу выдаёт сообщение "ошибка 406. Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control , or Property Page"
Возможно каким-либо образом открыть ещё одну форму из плагина? Или нужно обходиться только одной формой?
Страницы: 1 2 След.