Добавлена функция @Map.SelectByParametersSelected, которая ищет только среди помеченных объектов.
Чемно дякую.
Очень нужна функция (событие) %Events.OnFileOpen, запускаемая при открытии карты.
Да и нужна защита паролем скриптов карты - на форуме этот вопрос уже подымался.
От є пропозиція обробити події стосовно карти (FileOpen, FileClose). Такі скрипти мають бути у dmf-файлах. Але тут виникатимуть “конфлікти” подій. Що швидше запускатиметься: скрипт автозапуску, чи скрипт обробки події %Events.OnFileOpen.
По суті: скрипт автозапуску відноситься загалом до Digitals-а; запропонований скрипт обробки події %Events.OnFileOpen - до окремо взятої карти. Було б не погано мати ще й можливість обробити FileNew, FileExit (стосовно Digitals):!:
Простіше, мабуть, добавити функцію @Map.Exists > Count (повертатиме кількість відкритих карт або 0 - якщо не відкрита жодна карта). Тоді скрипт автозапуску працюватиме так:
$KstKart=@Map.Exists 'Кількість відкритих карт
@If $KstKart=0 then ($Karta=@Dialog.OpenFile *.dmf) else ($Karta=@Map.Filename) 'Відкрити карту, якщо був запущений Digitals і жодна карта не відкрита
@If $Karta=C:\Карта зі скриптом 1.dmf then @Goto %Script1 'або @ExecuteScript ScriptFileName1
@If $Karta=C:\Карта зі скриптом 2.dmf then @Goto %Script2 'або @ExecuteScript ScriptFileName2
…
Чем больше событий будет предоставлено разработчиками, тем более точно можно будет настроить дижиталс под конкретного пользователя.
voha, я так понял, список событий растёт
:
%Events.StartUp - событие дижиталса: “запуск оболочки дижиталса до открытия карты”,
%Events.OnFileOpen - событие после открытия карты, всегда идёт после %Events.StartUp, поэтому конфликтов быть не должно,
%Events.OnFileNew - событие после создания новой карты,
%Events.OnFileClose - событие начала закрытия карты ,
%Events.OnFileExit - событие до начала закрытия дигиталс.
Вот примерно ещё таким функционалом хотелось бы дополнить дижиталс…
Разработчики, слово за вами!
А чи можна було б вказувати ID шару, ще й для функцій @Map.Layers.GetValidParameters, @Map.Layers.SetValidParameters?
Заметил интересную особенность в Digitals:
создаю объект в слое №1 и заполняю его параметры (№1, 2, 3). Слой №2 имеет только параметр №1.
При изменении слоя объекта с №1 на №2 в панели “Инфо” отображается только №1 параметр объекта (только тот параметр, который прописан для слоя). Если объект вернуть на слой №1, то все его параметры вновь будут отображены в полном объёме.
Функция Map.PutObjectParameters позволяет присвоить любой параметр объекту, определенный в карте, даже если этого параметра нет на слое (например, назначить значение параметра №3 объекту, расположеному на слое №2). Функция Map.GetObjectParameters выдаёт список параметров, назначенных слою.
Здесь явно не достаёт новой функции:
Map.GetObjectAllParameters - получение всех значений параметров (параметры объекта по слою + все назначенные непустые параметры).
[size=85]Можно, конечно, перед получением параметров, переводить объект в слой, в котором прописаны все параметры, вызвать Map.GetObjectParameters и вернуть объект на исходный слой. Но так не красиво… [/size]
Сделано.
Не совсем понятно, где это все хранить. Я имею в виду тексты скриптов?
Просто дать возможность добавлять такие скрипты в любую кнопку, по аналогии с OnSelect или OnChange?
Тогда они будут срабатывать на открытие любой карты.
Если хранить в DMF, то OnFileOpen сработает только для той карты, в которой есть скрипт, а такие как StartUp, вообще теряют смысл.
Для получения количества открытых карт уже есть функция @MapCount (не путать с @Map.Count, которая выдает число объектов в активной карте).
Вибачте будь ласка, недогледів ![]()
Події %Events.StartUp, %Events.OnFileNew, %Events.OnFileExit
Події %Events.OnFileOpen, %Events.OnFileClose
Я предлагаю разделить эти скрипты на две группы:
1 группа) общие скрипты дижиталса (хранить, например, в файле Digitals.dsf в корне программы). В этом файле могут быть определены:
%Events.StartUp - функции, выполняемые один раз после запуска дижиталс
%Events.OnFileOpen - функции, выполняемые после открытия каждой карты,
%Events.OnFileNew - функции, выполняемые после создания каждой новой карты,
%Events.OnFileClose - функции, выполняемых до начала закрытия каждой карты,
%Events.OnFileExit - функции, выполняемые перед закрытием оболочки дижиталса
2 группа) скрипты конкретной карты (хранить в карте, назначать в свойствах карты, не на кнопки).
%Events.OnFileOpen - функции, выполняемые после открытия конкретной карты,
%Events.OnFileSave - функции, выполняемые до начала записи конкретной карты,
%Events.OnFileClose - функции, выполняемых до начала закрытия каждой карты,
Следует заметить, что обработчики событий 1 и 2 группы могут включать обработчиков событий объектов, например в следующем коде в секции %Events.StartUp определяются два обработчика - для сбора и редактирования объектов всех карт:
%Events.StartUp
%Events.Collect
;код обработки сбора нового объекта
%Events.OnChange
;код обработки при редактировании объекта
...
%Events.OnFileNew
;код обработки при создании новой карты
...
думаю, идея понятна.
Расскажите зачем вам события старта и закрытия программы? Поприветствовать и попрощаться с пользователем?
Добавлены события (на кнопке):
%Events.OnStartup
%Events.OnShutdown
%Events.OnFileOpen
%Events.OnFileClose
%Events.OnFileSave
%Events.OnFileNew
. Я думал вы сообщения до конца читаете - там пример кода.
Поражает скорость реакции на предложения. здОрово!
Но всё-таки кнопки относятся к рабочему столу, а рабочий стол каждый может изменить. Для группы людей, работающих с одной картой,
настройка и поведение диджиталса на рабочих местах должны определяться администратором, а рабочий стол каждый может настроить для себя сам.
В моём случае я должен быть уверен, что после настройки и передачи дижиталса в работу операторам, дижиталс будет работать так, как я его настроил.
Запретите запись в файл Digitals\Ged.ini, все настройки программы хранятся там. Для файловой системы NTFS это несложно реализовать. Запрет записи не должен вызывать ошибку в самой программе… вроде бы ![]()
Среди минусов: не будет изменяться список последних открытых файлов, нельзя будет изменить цвет фона и шрифты в программе и прочие мелкие неудобства.
Спасибо, попробую.
Кнопки пользовательского меню вроде в другом файле задаются.
Мне нужна кнопочка, с помощью которой выполнялось следующее:
- Сервис|Вставить дороги.
- В окошко вставлялось значение 3 (для другой кнопочки 4) и т.д.
- Нажималась кнопка ОК.
То есть, нужна панелька для вставки дорог разной ширины. Спасибо.
Пример для 3-метровой дороги
;Команда SendChars отправляет нажатия клавиш следующему за ней диалоговому окну, <CR> - возврат каретки
@SendChars 3<CR>
Сервис | Вставить дороги...
Все работает. Благодарю за оперативность.
подскажите пожалуйста как вытянуть смежника из хмл, а то у меня скоро взрыв мозга будет.
хмл- Г-А, землі гр. Войтенко о.І. (вул. Перемоги, 84) все это находится в параметре с ID7001004.
нужно чтоб в параметре который я создам было так - землі гр. Войтенко о.І. (вул. Перемоги, 84)
заранее благодарен.