Здравствуйте.
Как программно определить номер установленной версии zulu
Как программно определить номер установленной версии zulu
18.12.2017 08:32:00
Здравствуйте.
Карта zulu (локальная и сервер) с подключенными слоями 2GIS и OSM грузится очень медленно, если не подключен интернет (тайловые сервера слоев). Перед запуском пользователь может не обратить внимание, что интернет отвалился. Может ли сервер zulu или локальная карта zulu выдавать какое-нибудь сообщение, например, "Отсутствует соединение с интернет...", и соответственно, чтобы такое же сообщение выдавалось и при программном подключении к карте. Если в карте *.zmp слои 2GIS и OSM сохранены как выключенные, то при старте zulu вообще не проверять, есть ли обновления тайлов, а запускать эту проверку только при включении их.
Изменено: |
|
|
15.12.2017 11:51:45
Здравствуйте, Алексей.
Метод, что вы подсказали, не работает по крайней мере в коде:[CODE]var el:IElement; bres:Boolean; begin ....... key := Layer.CurrentID; el := Layer.Elements.GetElement(key); if el.Key = -1 then exit; //Преобразование в примитив с сохранением прежнего изображения стиля el.ElemStyle и графического типа el.GraphType bres := Layer.ConvertTypeToPrimitive(key,el.ElemStyle,el.GraphType); //возвращает всегда FALSE if bres then begin ... end; [/CODE]Что не так?
Изменено: |
|
|
14.12.2017 12:56:32
Здравствуйте.
Подскажите, пожалуйста, как управлять видимостью элемента по его ключу. Есть набор ключей элементов, видимостью которых нужно управлять в зависимости от масштаба карты. Код должен выглядеть примерно так:[CODE]key := Layer.Current_ID; if MapCtrl.MapScale > 1000 then vis := FALSE else vis := TRUE; //Дальше нужно скрыть конкретный элемент по его ключу, причем другие элементы этого режима и типа могут оставаться видимыми Layer.SetElementVisble(key,vis);//--этой функции не существует в библиотеке (прототип) [/CODE]Есть функции Layer.SetTypeVisible и Layer.SetModeVisible, но они скрывают весь тип или весь режим, что не совсем подходит для моей задачи.
Изменено: |
|
|
12.12.2017 06:58:29
Здравствуйте, Дмитрий.
1. Обновил библиотеки, свойство стало доступным, но есть вопросы по его использованию...[CODE]//интерфейс mpDoc := MapCtrl.Map as IMapDoc; bsave := mpdoc.saved;//возвращается false (т.к. к карте был подключен виртуальный слой, его сохранять не нужно) //запуск макетов mpDoc.Saved := TRUE;//попытка сбросить флаг на сохранение предыдущих изменений zMapMain.ExecCmd('MapLayouts'); bsave := mpdoc.saved;//возвращается false (если сохранить, то сохранится и виртуальный слой //и при следующей загрузке карты в зулу будет сообщение, что слой не найден...) if NOT bsave then MapCtrl.Map.Save(); //сохраняются все предыдущие изменения с картой, а это не нужно[/CODE]То есть приведенный код выполняется, но сохраняет всю карту, чего делать не нужно, сохраняется в том числе и временный виртуальный слой, а нужно сохранить только макет. 2. В версии zulu 8.0.0.6550 (дата сборки 06.12.2017) видимо файл справки *.chm от предыдущей версии и свойство mapdoc.saved не описано. 3. В окне настройки легенды по кнопке "Добавить" не добавляются пункты легенды линейный и полигональный (предварительно легенда была очищена вручную).
Изменено: |
|
|
07.12.2017 07:57:10
Здравствуйте, Дмитрий.
[LIST=1] [*]По этому вопросу все ясно. [*]Спасибо, свойство полезно и буду его использовать для сохранения, но, если честно, я думал, что в будущем пользователю не придется выполнять "лишних" действий по сохранению: если пользователь осознано сохраняет уже существующий макет, то и в карте он должен, как мне кажется, сохраниться автоматически. [*]По команде "Сохранить как...", опять же как мне кажется, должна быть аналогия с другими редакторами, например, MS Word - там же после выполнения аналогичного действия не нужно дополнительно выполнять никаких других манипуляций, чтобы продолжить редактирования документа с новым названием. А если пользователю захочется получить макет в виде отдельного файла, для этого есть метод "Экспорт". [*]Очень жду Вашего решения по легенде. [*]"Карандаш" и дополнительные условия навигации будут, как мне кажется, очень удобны и привычны пользователям зулу. [/LIST]
Изменено: |
|
|
05.12.2017 12:22:08
Здравствуйте, Дмитрий
[LIST=1] [*] Примерно когда можно ожидать программное редактирование макета? [*]Сохранение изменений действительно работает с текущим макетом, нужно только вызвать по завершению работы с ним MapCtrl.Map.Save(); Один минус, загружая макет с помощью функции MapCtrl.ExecCmd('MapLayouts'), то как программно я узнаю, были ли какие-либо изменения с макетом (метод ничего полезного не возвращает), а всякий раз вызывать MapCtrl.Map.Save() - тоже не совсем верно. [*]Про "Сохранить как..." видимость работы именно такая, как я и описал выше: сохраняет макет на диск под новым именем, но в заголовке макета остается прежнее название и складывается ощущение, что продолжаешь редактировать именно предыдущий макет. При этом вызов MapCtrl.Map.Save(); в конце работы так и не подключает/сохраняет макет с новым именем к карте. По крайней мере он не появляется в списке макетов в диалогового окна "Макеты...". И если не выполнить импорт этого макета из зулу с последующим сохранением в карте, то список подключенных к карте макетов не обновляется. В зулу та же картина с "Сохранить как..." [*]По легенде хочется добавить, чтоб была возможность не только первичного управления стилями данных, но и ограничение этой выборки только стилями элементов в видимой области. Макет с подключенной легендой в старом варианте грузится ну очень долго, пока все посчитает, не удобно и хочется поскорее эту легенду удалить... [*]Переход к редактированию элемента по двойному щелчку не очевиден, еще нужно догадаться, ведь режимы исходной карты в зулу не переключаются по двойному щелчку. Может быть тогда сделать по аналогии с включением редактора карты - кнопка "карандаш" (конечно сохранив старый вариант двойного щелчка)? В таком случае, если весь макет находится в режиме редактирования, то переход к следующему элементу, например, к тексту, сразу же включался режим редактирования текста. [/LIST]
Изменено: |
|
|
05.12.2017 09:44:16
Здравствуйте. Подскажите пожалуйста как программно реализовать функционал по настройке макета печати:
[LIST=1] [*]подготовить_фрагмент_карты (центр, масштаб, стандарт размера картинки в макете по умолчанию на весь макет); [*]поставить_символ_ север (из списка предопределенных); [*]вставить_текст (мультистрочный текст, Font, Size, позиция в макете); [*]вставить_таблицу(заголовок, массив строк); [*]вставить_рамку [*]вставить_настроенную_легенду (слой, графический тип = ObjectType.GraphicType); - так как сейчас формируется легенда не совсем то, что нужно - выводится вся информация по всем слоям и нет возможности отфильтровать информацию. [*]сохранить_макет(имя, путь); [*]макет_обновить_карту(новый центр, новый масштаб); [*]показать_макет(имя, путь); [/LIST] Сейчас существует возможность только вызова диалога создания макета печати MapCtrl.ExecCmd('MapLayouts'); без возможности применения дополнительных настроек. При работе с этим диалогом программно тоже возникают некоторые проблемы: [LIST=1] [*]Созданный макет печати программно, после его сохранения под новыми именем и закрытия не виден в zulu и не виден в следующем сеансе работы программы. Хотелось бы, чтобы после сохранения, созданный макет печати автоматически сохранялся в карте. [*]Если загрузить созданный макет печати в zulu (кнопка открыть), а потом вызвать диалог "Сохранить как..." макет сохраняется как отдельный файл, т.е. функция работает как "Экспорт", при этом его потом можно только импортировать, чтобы продолжить редактирование, но нет возможности после такого сохранения продолжить редактирование макета печати уже с новым именем. [*]При вставке легенды программа "подвисает", тот же эффект и в зулу, видимо из-за большого объема данных по стилям объектов карты (выводит по всем слоям). Сейчас чтобы скрыть стили всего слоя, в Настройке легенде нужно по каждому элементу щелкнуть и выбрать "Не отображать", нет возможности группового выделения и выделения по слоям. Может быть при вставке легенды вначале выводить окно "Настройка легенды", в которой отметить все выводимые поля стилей с их наименованиями и в настройках легенды добавить кнопку разместить, после чего уже можно будет добавлять легенду в макет. [*]при настройке отображения карты в макете, чтобы переместиться в нужную позицию нужно дважды щелкнуть и "листать" "ладошкой" в нужном направлении, можно ли добавить какой-нибудь сервис, например, выбор_позиции(ключ, слой) и добавить стандартный метод "Переместиться в...", в диалоге которого задать масштаб и центр карты. Хотелось бы чтобы эти методы были доступны не только по двойному щелчку, но и при простом выделении карты в списке объектов. [/LIST]Версия зулу 8.0.0.6548; Дата сборки 04.12.2017
Изменено: |
|
|
20.11.2017 09:04:57
Здравствуйте, у меня остались вопросы по отображению площадных объектов:
1. Для некоторых линий (разные ID и их начертание) получается различными отображения в образце структуры и на получающемся рисунке. В получающемся рисунке выступы у линии рисуются снаружи от границы, а в образце для этого же типового элемента рисунок выступов у линии, как правило, направлен к центру фигуры. Хотелось бы видеть отображение линий на получающейся картинке такой же, как и на образце в структуре слоя. 2. У площадных объектов задается разным узор, насколько я понял, это параметр хранится ElementStyle.FillStyle, но в какой параметр в функции FillStyleDef.DrawSampleImage() его передать я так и не понял. Получается картинка с одинаковым рисунком заливки. 3. Можно ли получить доступ напрямую к картинке, которая рисуется в поле "Образец", для всех режимов типовых элементов? Версия zulu 8.0.0.6531u от 17.11.2017
Изменено: |
|
|
17.11.2017 17:25:00
Понятно, вопрос остался по получению некоторых данных[CODE]ObjType := Layer.ObjectTypes.item[tid];
Fid := ObjType.id; FillStyleDef := iLay.FillStyles.ItemById[Fid];//правильно ли так получать идентификатор типового площадного объекта? Lid := ObjectMode.ElemStyle.LineStyle;//правильно ли получен стиль линии для типового площадного объекта? LineStyleDef := Layer.LineStyles.ItemById[LId]; [/CODE]т.е. у площадного типового объекта свой тип линии и LineStyleDef как правильно его получить. При получении FillStyleDef нужно правильно задать ID, а как этот идентификатор получить? В ObjectMode и ObjectType явно не указано. В примере отрисовки типового площадного объекта, который я приводил выше, помимо заливки, еще и линия площадного объекта выводилась, но не та, что описана была в структуре слоя.
Изменено: |
|
|
17.11.2017 14:53:36
С линиями вроде бы разобрался, спасибо, подскажите еще пожалуйста по отрисовке типового площадного объекта.
[CODE]var iSqre:IFillStyleDef; iLnDef:ILineStyleDef; begin ... Fid := ObjType.id;//правильно ли так получать идентификатор типового площадного объекта? iSqre := iLay.FillStyles.ItemById[Fid]; Lid := ObjectMode.ElemStyle.LineStyle;//правильно ли получен стиль линии для типового площадного объекта? iLnDef := iLay.LineStyles.ItemById[LId]; //дальше что-то рисует, но не совсем понятно тот ли площадной объект отрисовывается iSqre.DrawSampleImage(iStrm,48,32,1,1,0,clDefault,true,50,lnColor,clWhite,false,iLnDef,lnWidth,clRed); ... end; [/CODE]Подскажите еще описание параметров используемой функции DrawSampleImage( const Stream: IUnknown; Width: Integer; Height: Integer; SpaceX: Integer; SpaceY: Integer; Format: Integer; //-эти параметры как для линии ImageBkColor: Integer; ImageTransparent: WordBool; // как получить эти свойства Scale: Double; Color: Integer; //цвет чего BackColor: Integer; Transparent: WordBool; const BorderStyle: ILineStyleDef; BorderWidth: Double; BorderColor: Integer): WordBool; safecall;
Изменено: |
|
|
17.11.2017 12:29:30
Здравствуйте. У меня получилось нарисовать линию. Есть код[CODE]procedure zmp_Image(var pict:TPicture);
var olestr:TOleStream; strg:IStorage; iStrm:IStream; Stm: TMemoryStream; begin StgCreateDocFile(pWideChar(wPath),STGM_READWRITE or STGM_SHARE_EXCLUSIVE ,0,Strg);//хранилище strg.CreateStream(pWideChar(wPath),STGM_READWRITE or STGM_SHARE_EXCLUSIVE,0,0,iStrm);//поток oleStr := TOLESTream.Create(iStrm);//поток ................ Stm:=TmemoryStream.Create; iLnDef := iLay.LineStyles.ItemById[LId];//нужная типовая линия ............... iLnDef.DrawSampleImage(iStrm,24,24,1,1,0,clDefault,false,50,clRed,2);//место возникновения исключения stm.LoadFromStream(oleStr); pict.Bitmap.LoadFromStream(stm); end; [/CODE]Функция выполняется, но почему фон получается черным? Подскажите пожалуйста в как изменить цвет фона?. Подскажите еще пожалуйста, как получить интерфейс LineStyle для типовой лини, чтобы можно было рисовывать картинку цветом, который определен в режиме?
Изменено: |
|
|