На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Не соответствие компонентов

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
[ Закрыто ] Не соответствие компонентов, В отдельных компонентах разные ссылки
 
Столкнулся с такой проблемой.

Компонент TMapCreateObject имеет ссылку только на TMapScreen, не возможно установить TMapView. Хорошо,
Меняем в проекте TMapView на TMapScreen. Все заработало хорошо.
Далее,
теперь хочу написать form_main.MapScreen1.ViewSelect.Layers[3] := false;
однако,
в документации не сказано, что в MapScreen есть ViewSelect.
Но в документации сказано, что в MapView есть ViewSelect.
Проверил
form_main.MapScreen1.ViewSelect.Layers[3] := false; // не работает
но,
form_main.MapView1.ViewSelect.Layers[3] := false; // работает

Не пойму? Или я не прав или я что-то не так понял.
 
В документации в разделе TMapCreateObject. Компонент создания объекта электронной карты. в описании свойств есть указание, связывать его необходимо с TMapScreen.

Также в документации сказано по поводу ТMapScreen:
Цитата
Компонент ТMapScreen обладает всеми возможностями компонента TMapView.
в разделе TMapScreen. Компонент отображения пользовательских (мобильных, стационарных) объектов.

Для перерисовки необходимо вызвать RepaintWindow. Читайте документацию!
 
Роман, здравствуйте!

Фраза "Читайте документацию!" здесь думаю лишняя.

По делу:
Первое.
TMapCreateObject. Компонент создания объекта электронной карты.  в описании свойств есть указание, связывать его необходимо с TMapScreen. Я это и сказал выше. Пришлось без моего желания поменять TMapScreen на TMapView. Первый компонент известно хуже для статической карты.
Компонент ТMapScreen обладает всеми возможностями компонента TMapView.
В теории так и должно быть, т.к. класс TMapScreen наверное является наследником класса TMapView.

Но еще раз проверил, у меня
form_main.MapScreen1.ViewSelect.Layers[3] := false;
form_main.MapScreen1.RepaintWindow; // не работает все равно
но
form_main.MapView1.ViewSelect.Layers[3] := false; // работает

и последнее, опять же насчет восклицательного знака
Repaint Refresh RepaintWindow это интуитивно нормально?

Просьба подсказать, где я не правильно делаю:
form_main.MapScreen1.ViewSelect.Layers[3] := false;
form_main.MapScreen1.RepaintWindow; // не работает
 
Цитата
Сергей Викторович Сурин пишет:
Просьба подсказать, где я не правильно делаю:
для компонента MapScreen нужно вызывать Repaint.
Все методы Repaint Refresh RepaintWindow являются потомками от TMapView

Обратите внимание, что потомок MapScreen отличается от предка TMapView только переисовкой.
Все остальные свойства методы и обработчики, неизменны.
Отсюда и логический вывод - MapScreen это усовершенствованный TMapView в секторе перерисовки карты
----
Встречный вопрос, а каким боком TMapCreateObject к особенностям перерисовки TMapScreen  :?:
П.С. Я так и не понял, что вы хотели услышать про TMapCreateObject
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Хорошо.
Начнем по порядку.
В свойствах компонента TMapCreateObject есть только свойство MapScreen нет свойства MapView. Раз уэ это родитель, почему его игнорировали?
Сколько не устанавливай компонент TMapView на форму, в свойстве TMapCreateObject MapScreen конечно он не появиться.
Почему не понятно?
Начнем с этого.
Потом обсудим вопрос отключения слоя отдельно.
Ok?
 
Для изучения вопроса "Почему", Вам надо четко понимать в общем принцип иерархии классов. TMapScreen используется потому, что он обеспечивает перерисовку объектов карты в пределах окна отображения без моргания (при изменении их метрического описания).
 
Цитата
Сергей Викторович пишет:
Почему не понятно?
Сергей Викторович, я немножко отвечу утрировано, но практика показывает что так понятней.
Вопрос: Почему невозможно втыкнуть в "Советскую" резетку вилку Евростандарта ?
Вроде и то и другое вилка+резетка, вроде и там и там есть ток, а втыкая крошится розетка, или недостаёт вилка (если наоборот)

Вот и тут так.
Есть определённый набор компонент, каждая из которой писалась и определёнными исходными данными.
Например, компонента MapObj писалась при условии что в проекте есть MapView
компонента MapFind писалась при условии что есть и MapView и MapObj
и так далее
компонента MapCreateObject писалась при условии что есть компонента MapScreen.
Почему так - вам рассказал Андрей Владиславович сообщением выше
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
Все прочитал, для меня не это новость. Кстати, по поводу Советской можно был не писать. У меня хоть возраст из разряда старший, но всю жизнь работал с молодежью)) Но это кончено, к слову)

Теперь по делу:
с MapCreateObject  проехали, здесь все ясно. Может когда-то вы захотите притянуть его и к MapView, было бы не вредно.  

Теперь можно перейти к вопросу, "не могу отключить слой".
Просьба подсказать, где я не правильно делаю:
form_main.MapScreen1.ViewSelect.Layers[3] := false;
form_main.MapScreen1.RepaintWindow; // не работает
 
Цитата
Сергей Викторович пишет:
с MapCreateObject  проехали, здесь все ясно. Может когда-то вы захотите притянуть его и к MapView, было бы не вредно.  
нет. функционирование MapCreateObject основано на использовании "двойной буферизации изображения", которой нет в MapView, а появилась только в его наследнике - MapScreen.



Цитата
Сергей Викторович пишет:
Теперь можно перейти к вопросу, "не могу отключить слой".
Просьба подсказать, где я не правильно делаю:
form_main.MapScreen1.ViewSelect.Layers[3] := false;
form_main.MapScreen1.RepaintWindow; // не работает

Вновь цитата из хэлпа:
Цитата

TMapScreen.RepaintWindow

Вывести изображение карты в окно.

procedure RepaintWindow;

Описание:
Производится вывод содержимого буфера образа окна в клиентскую область окна.  Событие OnMapScreenUpdate не вызывается.

В переводе на русский язык это означает, что Вы выполнили перерисовку тем изображением, которое ранее было положено в буфер и которое, соответственно, сформировано по установленным ранее условиям отображения.
Это как раз и есть тот самый "второй буфер", предназначенный для мгновенной очистки - стирания подвижных объектов без "эффекта моргания".

При изменениях состава отображения, способа отображения (растровый/векторный/принтерный) и любых других случаях, когда надо, чтобы в буфере обновилось изображение надо использовать
Цитата
procedure Repaint;

Описание:
Производится обновление буфера объектов и затем их отображение в клиентскую область окна.

Хэлп вообще классная штука!..  :D
 
Ну честно, ничего не понял.
Раньше все было просто
form_main.MapScreen1.ViewSelect.Layers[3] := false;
form_main.MapScreen1.RepaintWindow; // не работает
и все это работало.
Зачем мне эти буферы, и т.п.
Я вам сейчас начну рассказывать из чего состоит паспорт учетного участка объектов дорожного хозяйства и зеленых насаждений 2-й категории.
Ничего не понял.
Просьба подсказать как отключить слой с номер 3?
Страницы: 1 2 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности