Запрос на функцию

Добавлена функция @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, я так понял, список событий растёт :slight_smile::
%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, которая выдает число объектов в активной карте).

Вибачте будь ласка, недогледів :blush:

Події %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

:slight_smile:. Я думал вы сообщения до конца читаете - там пример кода.

Поражает скорость реакции на предложения. здОрово!
Но всё-таки кнопки относятся к рабочему столу, а рабочий стол каждый может изменить. Для группы людей, работающих с одной картой,
настройка и поведение диджиталса на рабочих местах должны определяться администратором, а рабочий стол каждый может настроить для себя сам.
В моём случае я должен быть уверен, что после настройки и передачи дижиталса в работу операторам, дижиталс будет работать так, как я его настроил.

Запретите запись в файл Digitals\Ged.ini, все настройки программы хранятся там. Для файловой системы NTFS это несложно реализовать. Запрет записи не должен вызывать ошибку в самой программе… вроде бы :slight_smile:

Среди минусов: не будет изменяться список последних открытых файлов, нельзя будет изменить цвет фона и шрифты в программе и прочие мелкие неудобства.

Спасибо, попробую.
Кнопки пользовательского меню вроде в другом файле задаются.

Мне нужна кнопочка, с помощью которой выполнялось следующее:

  1. Сервис|Вставить дороги.
  2. В окошко вставлялось значение 3 (для другой кнопочки 4) и т.д.
  3. Нажималась кнопка ОК.
    То есть, нужна панелька для вставки дорог разной ширины. Спасибо.

Пример для 3-метровой дороги

;Команда SendChars отправляет нажатия клавиш следующему за ней диалоговому окну, <CR> - возврат каретки @SendChars 3<CR> Сервис | Вставить дороги...

Все работает. Благодарю за оперативность.

подскажите пожалуйста как вытянуть смежника из хмл, а то у меня скоро взрыв мозга будет.
хмл- Г-А, землі гр. Войтенко о.І. (вул. Перемоги, 84) все это находится в параметре с ID7001004.
нужно чтоб в параметре который я создам было так - землі гр. Войтенко о.І. (вул. Перемоги, 84)
заранее благодарен.