RUS  ENG 

PrintInfo SetAreaRect и печать определенной области карты

Страницы: 1
RSS
PrintInfo SetAreaRect и печать определенной области карты
 
Доброе утро!
Пытаюсь установить область печати для PrintInfo методом SetAreaRect и что-то странное творится.
Delphi XE6 , Zulu 8.0.0.6912u

P := CoPrintInfo.Create;
rect := CoZrectangle.Create();

// беру область у нужного слоя (слой активный, если что)
rect := Layer.GetBoundsRectangle;

// устанавливаю область печати по этому слою
P.SetAreaRect(rect.Xmin,rect.Ymin,rect.Xmax,rect.Ymax);

// устанавливаю опции печати (ePrintInfoConstants)
P.Options := ePrintDrawFrame + ePrintExplicitRect;

в результате при печати вижу только рамку, остальное поле пустое
если к опциям добавлю ePrintLayerExtents и установлю P.HorzPages и P.VertPages, то наблюдаю на печати целиком слой и игнорирование SetAreaRect.

Игра с набором опций не дала никакого понимания как это все работает.
Поясните пожалуйста как соотносится работа SetAreaRect с набором опций, чтобы получить на печать определенную область карты.

Спасибо.
Изменено: Vic - 26.01.2019 08:44:54
 
Какая проекция у карты? Посмотрим. Скорее всего старый метод, проекцию не учитывает.
 
Поперечная Меркатора (Гаусса-Крюгера (Пулково 1942), Зона 6)
И на какую проекцию мне переехать в таком случае?
Изменено: Vic - 24.01.2019 12:21:05
 
Никуда не надо. Мы разберемся
 
Тогда присоветуйте еще как вывести на печать номер листа/страницы при печати карт.
Ранее в форуме мелькало пожелание колонтитулов с выводимой в него переменной Page и прочих, я так понимаю по аналогии с Internet Explorer.
 
Vic, добрый день!
В ZuluGIS можно настраивать колонтитулы:
https://www.politerm.com/zuludoc/index.html#print_page_setup2.html
Посмотрите, может Вам подойдёт ?
 
Хотелось бы достучаться до колонтитулов программно, либо, если их можно настроить в макете печати, то программно выбрать нужный макет и вывести его на печать.
 
Vic, нет, к сожалению, программного доступа к макетам печати пока нет.
По поводу SetAreaRect - исправляем, в ближайшее время будет работать.
 
Цитата
Vic написал:
Поперечная Меркатора (Гаусса-Крюгера (Пулково 1942), Зона 6)
И на какую проекцию мне переехать в таком случае?
Скачайте обновление. Добавили методы работы с областью печати с учетом разных проекций. Пример Вашего сценария теперь звучит так:
Код
' ActiveX enumeration values definitions start (do not change!)
Const ePrintFitToPage = 2
Const ePrintExplicitRect = 64
' ActiveX enumeration values definitions end

Sub PrintTest

Set doc = zulu.ActiveMapDoc

Set P = CreateObject("ZuluLib.PrintInfo")

'Получаем габариты слоя в проекции карты
Set rect = doc.Layers.Active.GetBoundsCRSRectangle(doc.GetCRS)

'Задаем область печати, с указанием, к какой проекции относится этот прямоугольник 
P.SetAreaRectangle doc.GetCRS, rect

'Печать на одну страницу заданной области
P.Options = ePrintFitToPage + ePrintExplicitRect

doc.PrintOut P

End Sub
 
Ок, спасибо, попробуем.
Страницы: 1