RUS  ENG 

Дмитрий Озеров (Все сообщения пользователя)

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

Страницы: Пред. 1 ... 30 31 32 33 34 35 36 37 38 39 40 След.
Прорисовка объекта
 
1. Св-во Picture возвращает стандартный OLE тип IPictureDisp, разумеется, что свойству типа TBitmap его не приравняешь. Кроме того, Picture, возвращаемый символом - это metafile. Т.о. Вы можете у IPictureDisp взять св-во Handle и попробовать приравнять это хэндл так: Img.Picture.MetaFile.Handle = handle;
Имейте в виду, что OLE-объект Picture поддерживает также интерфейс IPersistStream. Так что Вы можете сохранить картинку в IStream независимо от ее формата, чтобы потом использовать дельфийские методы LoadFromStream (см. также TOleStream)
2. В приведенном примере Вы пытаетесь нарисовать символ в контекст устройства. Добавить символ можно именно в СЛОЙ (т.е. в графическую базу), а слой, будучи загруженный в карту будет отображен со всеми своими объектами. Поэтому, добавляем символ в слой так: CtrlMapZulu.Map.Layers.Active.AddSimpleSymbol. X и Y - координаты на местности.
3. Символ содержит объекты, которые расположены на внутреннем воображаемом поле 256х256 точек. X и Y у AddImagePath - положение bitmap'а внктри символа. Дальше этот символ, отображаясь на карте будет масштабироваться. Поэтому положение картинки на экране будет X1 + X * Scale, Y1 + Y * Scale
Как выйти на БД текущего слоя в подключенном плагине?
 
берем слой
Map = Connector.Zulu.ActiveDocument.NativeDoc
Layer = Map.Layers.Active

а дальше, семантическая база зависит от того, для примитивов ли она нужна
или для типизированных объектов.

Взять базу по текущему выбранному элементу можно так:
ElemID = Layer.CurrentID
Elem = Layer.Elements.Item(ElemID)
If Elem.TypeID <> -1 Then
// типизированный объект
BaseName = Elem.Type.BaseName
Else
// объект - примитив, берем
// текущую базу, подключенную к слою
BaseName = Layer.BaseName
EndIf

имея BaseName мы можем ее открыть и работать
zb = new ZbDatabase
zb.Open BaseName
...
Прорисовка объекта
 
Видите ли, CtrlMapZulu.Map.Layers.Active.AddPolyLine(Poly,Style,-1,-1) не прорисовывает линию, а добавляет новый объект-линию в слой, а она (объект-линия) и рисоваться окном карты будет, и печататься и т.д.
Для того, чтобы наносить на карту какие-то объекты (или перемещать имеющиеся), Вы можете создать символы (можно программно), а потом по событиям добавлять символьные объекты, т.е. точечные объекты, которые будут отображаться в виде пиктограмм(символов), которые Вы создали. Символ может состоять как из примитивных геометрических фигур (как у Вас - круг с треугольником), так и содержать небольшие bitmap'ы.
См. Symbol.AddXXXX, Symbols.AddItem, Layer.AddSimpleSymbol
Прорисовка объекта
 
Похоже, это к Zulu вообще не относится.
В Delphi есть компонент TImage.
У него есть возможность Image.Picture.LoadFromFile().
ZULU компоненты
 
Цитата:
1. У меня, при попытке регистрации regsvr32 zululib.dll выдает что-то типа "Ошибка при вызове LoadLibrary - не найден указанный модуль", это на машине, где ZULU ни разу не ставился. ОСХ регистрируются без проблем
2. Т.е нужно подгружать zb.dll, через LoadLibrary ?

1. Забыл: кроме того, что я писал, нужна библиотека gdiplus.dll (можно взять из Windows XP). При возникновении ошибки "не найден указанный модуль" - проверьте зависимости с помощью Dependency Walker (depends.exe, входит в поставку MS VC++) - сообщите, что не нашлось.
2. ZbDatabase - coclass. Он реализует интерфейс IZbDatabase. Описаны в библиотеке zb.dll. Если в VC библиотека zb.dll импортировалась директивой #import, то на VC можно так поступить:
IZbDatabasePtr db;
::CoCreateInstance( __uuidof(ZbDatabase), NULL, CLSCTX_INPROC_SERVER, __uuidof(IZbDatabase), (void**)&db);
//или так:
db.CreateInstance( __uuidof(ZbDatabase), NULL, CLSCTX_INPROC_SERVER);
//дальше:
db->Open( "путь" );

Соответственно, грузить через LoadLibrary не надо.
ZULU компоненты
 
1. Для работы компонентов нужны:
ZuluLib.dll (reg) - ядро Zulu
ZuluCtrl.ocx (reg) - компоненты ZuluXTools
zuluui.dll (reg) - служебная библиотека
zb.dll (reg) - работа с семантической БД
ZuluCtl2.ocx (reg) - служебная библиотека компонент
(reg) - значит нужно регистрировать.
Также нужен run-time от MS VC++ 6.0:
vcredist.exe (http://support.microsoft.com/default.aspx?scid=kb;en-us;259403)
Кроме того, для Windows 98 (не SE) нужно обновление ComCtl32.dll версии 5.0:
50comupd.exe (http://www.microsoft.com/downloads/details.aspx?FamilyID=cb2cf3a2-8025-4e8f-8511-9b476a8d35d2&DisplayLang=en)

2. ZbDatabase - объект семантической базы данных (библиотека zb.dll). Создаваемый. Т.е. можно сделать так:
Dim db as ZbDatabase
Set db = new ZbDatabase
db.Open( "path_to_zb_file" )
'пользуемся...
Что именно нужно - спрашивайте...
ZuluServer 0.1
 
Добрый день! Пришлите файлы .zsusers, Access.cfg, ZuluServ.cfg на [email protected], посмотрим и разберемся.
Вопрос по ComNet
 
IComNetObjectType описывает не тип конкретного объекта, а тип объектов сети в принципе, как элемент структуры этой сети. А вот к какому типу принадлежит тот или иной объект сети выясняется через интерфейс IComNetNetworkObjects. В структуре ZCNNETOBJECT будет указан id типа, к которому этот конкретный объект сети принадлежит.

Примеров и их исходников по использованию ComNet не существует, т.к. эта объектная модель не опубликована и иначе как для подключения расчетов к ГИС не предназначена.

По поводу ComNet Вы можете связаться со мной, Дмитрием, по почте [email protected] или по телефону (812)579-6780
Вопрос по ComNet
 
IComNetObjectType описывает тип объекта ("источник","потребитель","участок" и т.п.). В модели данных ComNet тип объекта кодируется целым числом. GetTypeId возвращает этот идентификатор. В расчетной модели сети каждый тип объекта, имеет строго определенный номер, в зависимости от того, какая это сеть. Для тепловой сети источник должен задаваться типом 1, потребитель - 3, участок - 6. Полный список типов объектов Вы можете посмотреть, открыв структуру слоя тепловой сети из примера. В правом верхнем углу страницы свойств указан ID данного типа объектов. Расчетные модули будут оперировать именно этим числом, чтобы понять, к какому типу принадлежит тот или иной объект.
Использование компонентов ZuluXTools в коммерческих приложениях
 
В демо-версии компонентов ограничены возможности редактирования графики (150 объектов). Если редактировать не надо (укладываемся в рамки демо-версии), то распространение свободное.
Связь MapCtrl и MapNavCtrl в VC++6
 
Карту можно присоединить, присвоив свойству MapNavCtrl.Map значение MapCtrl:
// в VC++ 6.0
IUnknown *pUnk = MapCtrl1.GetControlUnknown();
IDispatch *pDisp;
pUnk->QueryInterface( IID_IDispatch, (void**)&pDisp);
MapNavCtrl1.SetMap( pDisp);
pDisp->Release();

Список MapCtrlName работает не везде (в VB, в Delphi работает) - это особенность сред разработки.
Надежней в run-time присваивать свойство Map.
Работа с компонентами Zulu в C++Builder 6
 
Судя по ошибкам, Вы пытаетесь создать не экземпляр объекта ThemeFilterDesc, а экземпляр интерфейса IThemeFilterDesc, что невозможно (для любого интерфейса в принципе). Объект ThemeFilterDesc в C++Builder можно создать так:
   IThemeFilterDescPtr filter;
   filter = CoThemeFilterDesc::Create();
И еще раз Print
 
Объект PrintInfo, который используется для метода PrintOut карты, имеет свойство hDC. Можно использовать его для вывода карты в контекст устройства реализуемого превью.
Подключение пользовательских надписей в C++Builder
 
Да, Release() обязательно нужно вызывать! Единственное исключение - это когда используются т.н. smart pointers , объекты, которые сами вызывают Release() в своем деструкторе. Но в нашем случае (Element *el) это не он.
Подключение пользовательских надписей в C++Builder
 
Это сообщение выдает С++Builder в отладчике. Так же как и сообщения о всяких exception, оно не отключается. catch'ем она потом перехватывается. Если просто #define (__TLB_NO_INTERFACE_WRAPPERS), то никаких строк типа zmpMain->Map->Layer и т.п. написать уже нельзя будет, а только так - zmpMain->get_Map(&Map); Map->get_Layers(&Layers); ...
Чтобы сообщение не возникало, строчку можно переписать так:
Element* el = NULL;
zmpMain->Map->Layers->Active->Elements->get_Item(key, &el);
if( el != NULL )
{
// делаем что-то
}
Надо также иметь в виду, что Map->Layers->Active может вернуть NULL, если слоев в карте нет.
catсh(...) весьма опасная конструкция - может скрыть серьезную ошибку.
Работа с компонентами Zulu в C++Builder 6
 
1. Builder при импорте не все свойства делает published. От версии к версии его поведение меняется. Почему ? Воля Билдера. В C++Builder 5 это свойство доступно. И все равно, Вы можете присвоить Browser так: MapCtrl1.set_Browser( ZbStdBrowser1->Browser);
2. Убедитесь, что импортируемый модуль ZuluLib_TLB.cpp включен в проект. Переменные CLSID_xxxx, IID_xxxx при импорте в Билдер попадают туда. Создать объект можно так:
   IPolyLinePtr Poly; Poly = CoPolyLine::Create();
3. VARIANT - один из базовых типов OLE Automation. См. документацию Platform SDK. В Win32 API входит множество функций для работы с VARIANT вида VariantXXXX (VariantInit, VariantClear, и т.п.) В VCL есть классы-обертки типа TVariant, OleVariant, делающие большинство рутинной работы.
можно ли пояснить какой тип файла, за что отвечает?
 
.l00 - l<xx> - бирки
.l00.cache - кэш бирок
.zmp - карта Zulu
.zpr - проект Zulu
.zb - описатель семантической базы данных
.zb.stat - файл состояния и статистики базы .zb
.zrs - растровый объект
.zrg - растровая группа
.ztm - файл темы
.ztt - шаблон темы
.zlb - шаблон бирок
PRINT
 
Если Вы печатаете из ActiveX, то принтер можно задавать в программе средствами бейсика.
Все равно дальше следует:
P.Device = Printer.Device
P.PaperSize = Printer.PaperSize
и печатается с этими нистройками
Сейчас исправлено так, что и P.PaperLength и P.PaperWidth будут адекватно работать.
В сегодняшнем обновлении это уже есть. Проверьте, если возникнут проблемы, сообщите.
PRINT
 
Если же в настройках Параметры страницы я укажу конкретный формат бумаги, а не "по умолчанию", то карта будет печататься в указанном формате, не взирая на настройки принтера.
PRINT
 
Я проверил код - все работает (проверял на примере Microsoft Office Document Image Writer на указанных габаритах 585x780). В карте, которую я после печатал через ActiveX, в оболочке Zulu в панеле Параметры страницы установил "по-умолчанию (...)" (в скобках был указан формат бумаги, установленный у принтера на данный момент). Это означает, что карта должна печататься на формате бумаге том, что задан на принтере в момент печати. Если изменить у принтера формат бумаги, то в скобках потом будет писаться новое значение. Еще раз обращаю на это внимание, обязательно убедитесь, что тип бумаги установлен "по умолчанию". Теперь, если я изменю формат бумаги у принтера в меню Пуск->Принтеры и факсы, то в компоненте будет печататься так, как указано уже в этих настройках. Изменил на "нестандартный" 585х780 - стал печатать в таких габаритах.
PRINT
 
Я имел в виду следующее:
Открываем карту. Вызываем Файл->Параметры страницы. В списке "размер" у бумаги первая строчка "по умолчанию".
PRINT
 
Со времен релиза 1867 у нас изменился принцип настройки печати. В панели "Параметры страницы" убедитесь, что размер бумаги стоит "по умолчанию (<что-то там, что принтер скажет>)", а не A4, допустим.
Интернет и ZULU
 
<Арто>,
ActiveX контрол тут вообще ни при чем - он не нужен. Сервер по HTTP возвращает GIF-изображение. Т.е. на страничке размещаем не ActiveX, а картинку (тег <img>). Источник у картинки (атрибут src), например, http://zs.zulugis.ru:6473/mapspb.zmp?action=draw&;scale=156.25&x=59953830.5&y=15163639&w=400&h=300. Для навигации по карте нужно писать скрипт, который будет менять Src у этой картинки, задавая у него различные параметры x, y и scale.
Обновление Zulu 5.2.0.1917
 
Подписаться можно. На главной странице http://www.politerm.com.ru. Страница истории изменений http://www.politerm.com.ru/zulu/history.htm. Там пишем о существенных доработках и изменениях, а также об ошибках. По мелкие ошибки, что мы сами нашли, а пользователи на них не ткнули, не пишем.
УЗЛЫ
 
Да, можно. См. Element.Points (см. также Element.Contour, Element.PolyContour, Contour.Points).
Страницы: Пред. 1 ... 30 31 32 33 34 35 36 37 38 39 40 След.