Сообщество программистов Autodesk в СНГ
ADN Club => ObjectARX => Тема начата: АлексЮстасу от 17-11-2014, 15:45:56
-
Как создавать окна для работы своих программ с такими же возможностями, как окно "Свойства" или т.п.? Т.е. согласующееся с другими окнами, с заданием прозрачности, со сворачиваемостью и т.п.?
И чтобы можно было в этом окне делать общее меню (Файл и т.п.)?
-
Как создавать окна для работы своих программ с такими же возможностями, как окно "Свойства" или т.п.? Т.е. согласующееся с другими окнами, с заданием прозрачности, со сворачиваемостью и т.п.?
не совсем понял про "согласующееся с другими окнами", но если нужно окно внешне такое как окно свойств или диспетчер слоев, или DesignCenter (команда _adc), то смотри в сторону CAdUiPaletteSet и CAdUiPalette
И чтобы можно было в этом окне делать общее меню (Файл и т.п.)?
да в принципе в нем можно и спутники запускать :), только программить прийдется с нуля и самостоятельно. компонент CMenu динамически созданное никто еще не отменял.
PS: в примерах ObjeectARX, для 2008 автокада был пример палитры (Samples\editor\CustPalette\). с тех пор особо ничего не поменялось.
-
не совсем понял про "согласующееся с другими окнами", но если нужно окно внешне такое как окно свойств или диспетчер слоев, или DesignCenter (команда _adc), то смотри в сторону CAdUiPaletteSet и CAdUiPalette
Да, сделать для своих программ такие же окна, как штатные окна Автокада типа перечисленных.
Чтобы положение окон согласовывалось с положением штатных окон Автокада - привязывалось к ним, синхронно менялись размеры смежных окон.
Чтобы были те же возможности с тем же оформлением кнопок и действий на правой кнопке мыши на заголовках окон - сворачивать окна до полосы, включать самосворачиваемость-разворачиваемость, прозрачность и т.п.
Т.е. не писать с нуля самим, а использовать фирменные шаблоны для окон - такие же, как использует сам Автокад.
(Может быть "согласующиеся" не оч. понятно, если речь о 2008, т.к. эта "согласуемость" появилась с новым интерфейсом с 2010).
-
Да хоть 2015, не изменилось, что вообще то удиветильно...
Кстати на dotNet'е это тоже легко делается...
-
Да, сделать для своих программ такие же окна, как штатные окна Автокада типа перечисленных.
Чтобы положение окон согласовывалось с положением штатных окон Автокада - привязывалось к ним, синхронно менялись размеры смежных окон.
Чтобы были те же возможности с тем же оформлением кнопок и действий на правой кнопке мыши на заголовках окон - сворачивать окна до полосы, включать самосворачиваемость-разворачиваемость, прозрачность и т.п.
Т.е. не писать с нуля самим, а использовать фирменные шаблоны для окон - такие же, как использует сам Автокад.
В общем так:
1. Перечисленные мной классы дают автоматом пустое окно, как диспетчер свойств, и т.п.
2. Само окно имеет такое же поведение, как и диспетчер свойств (растягивается [макс и мин пишется ручками, сразу скажу, MAX тупо не работает :):):). пишешь обработчик только в надежде на то, что к 2050 автокаду исправят], закрепляется на главном окне акада с тех сторон, какие укажешь при написании кода, или можно вообще отключить залипание; сворачивается, может стать прозрачным, и т.д.)
На этом хорошие новости заканчиваются :)
Класс CAdUiPaletteSet является контейнером для закладок, т.е. в него можно напихать неограниченное количество своих собственных CAdUiPalette. Если хочется вставить свой CAdUiPalette в окно свойств, то это ооооочень геморройно, т.к. вставлять нужно в ЕГО CAdUiPaletteSet, а не в свой (пытался, получилось, не понравилось, стер исходники и забыл)
Дальше, еще есть трудности (решаемые, но не понятно, зачем их решать, если этим должен заниматься родительский класс, а не мы) в визуальной части, например, скроллинг, цвета, шрифты компонентов окна.
Нарыл свою старую темку, может будет полезно:
http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=24&TID=47086&MID=263321#message263321
Да, еще одно, окна лучше делать динамическими ( с одной стороны это чуток сложней чем статика, с другой - гараздо легче, т.к. не нужно натягивать окно на CAdUiPalette, можно сразу лепить компоненты на нем.)
Вот в принципе и всё. ах да, еще один важный момент. окно работает в контексте ПРИЛОЖЕНИЯ а не документа, а значит всё что будет обращаться к автокаду может его тупо развалить (блокируй документ перед обращением к акаду). Ну и само окно автоматом не спрячется, если у тебя не будет ни одного документа. Так что или нужно прятать самостоятельно через реакторы, или блокировать работоспособность в этом случае (проверяй наличие активного документа перед началом телодвижений).
Короче говоря, геморроя куча, но будет красиво :):):):). ну например, так:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs29.postimg.org%2Fs35b6yz77%2Fpal.jpg&hash=47086772b4a33ae0e0c5a618c78694fb) (http://postimg.org/image/s35b6yz77/)
очень удобно использовать для деления на группы (одна закладка = одна группа). это как раз используется в первой и второй картинке. третья - это окно проекта. при выполнении ряда махинаций добавляется и вторая закладка, совсем с другим содержимым, но не стал уже выкладывать. если в первом и втором случаях мы просто ксерим один и тот же CAdUiPalette наполняя их разными данными, то в третьем случае у нас независимые CAdUiPalette, которые "дружат" через общий CAdUiPaletteSet (увы, прийдется поверить на слово, что их два. лениво делать скриншот)
-
Спасибо!
С самими формами окон разобрались.
Еще не понятно, как в этих окнах делать меню типа самых обычных: File, View, Edit и т.п.?
И есть ли фирменные заготовки для квадратных (прямоугольных), а не скругленных, не обведенных цветом кнопок?
-
Насколько я помню, надо создавать свои элементы меню и прописывать на них соответствующие обработчики.
-
также (http://forums.autodesk.com/autodesk/attachments/autodesk/152/26712/1/CP205-2_Mike_Tuersley.pdf)
-
Еще не понятно, как в этих окнах делать меню типа самых обычных: File, View, Edit и т.п.?
а то как же. CMenu :). Делаешь динамическое меню, пишешь обработчики на все действия и т.д. и т.п.
И есть ли фирменные заготовки для квадратных (прямоугольных), а не скругленных, не обведенных цветом кнопок?
увы, всё ручками. в любом случае, всё наслование кнопок идет от CButton, a она подстраивается под визуальный стиль windows. так что всё-всё ручками :). и лучше делать качественно, и желательно без использования сторонних библиотек (ну это на свой страх и риск). мало ли, что придумают в новом виндузе (это я про WTL. было, ждали пока пофиксят в библиотеке один момент, потом плюнули и переделали без неё), или вдруг захочется портануть код под макинтош :)
PS: на моей картинке стандартными объектами можно назвать только CStatic и CComboBoxб ну и кнопочки плоские (стандартные акадовские) на последней картинке. Остальное - полет фантазии :)
-
Я, пардон, в своем духе - вопрос "на пальцах". :)
Программа время от времени падает с фатальной ошибкой. Установили, что связано это с окнами, которые мы сделали а-ля автокадовские (свойств, слоев и пр.).
Есть ли какое-то сакральное знание о подводных камнях с такими окнами? В каком направлении искать или какой костыль ставить, чтобы не падало?
-
Есть ли какое-то сакральное знание о подводных камнях с такими окнами?
Есть. Искать ошибки в своих кодах и тщательно отлаживать программу. Ничего другого пока не придумали. Ну и задавать конкретные вопросы...
-
Подозреваю, что "вылет" происходит в случае, если в AutoCAD нет ни одного документа - у меня на работе подобное было с палитрами, созданными на .NET (создавал не я, говорю сразу!)
-
Есть. Искать ошибки в своих кодах
Я имел в виду недокументированное, неочевидное, неожиданное влияние каких-то параметров, конфликты еще с чем-то или с аналогичным и т.п.
Подозреваю, что "вылет" происходит в случае, если в AutoCAD нет ни одного документа
Вылетало и с документами и без - когда наши окна использовались (а-ля автокадовские). Если делалось без окон одними нашими командами, то не улетало.
Иногда фатальная ошибка появлялась после закрытия Автокада.
Еще часто после закрытия Автокада появляется маленькое пустое автокадовское окно вроде сообщений, в котором ничего не написано, кроме восклицательного знака. Что бы это было, и о чем может говорить?
-
Иногда фатальная ошибка появлялась после закрытия Автокада.
Еще часто после закрытия Автокада появляется маленькое пустое автокадовское окно вроде сообщений, в котором ничего не написано, кроме восклицательного знака. Что бы это было, и о чем может говорить?
Порча чужой памяти, непереключение файла ресурсов на AutoCAD, еще тысяча разных причин... Без кодов это гадание на кофейной гуще, что я категорически не приветствую.
-
Порча чужой памяти, непереключение файла ресурсов на AutoCAD, еще тысяча разных причин...
Сейчас я о таких "сообщениях", появляющихся часто после закрытия Автокада. Или даже двух таких.
(https://s32.postimg.org/fu4pol101/ODCLASS.png) (https://postimg.org/image/fu4pol101/)
-
После закрытия Автокада часто появляется такое окно "сообщений". Или даже два.
Это как раз связано с "не переключением ресурсов". В этот момент AutoCAD хочет что-то сообщить, а ресурсы установлены на твоё приложение и он не может найти своё сообщение.
Программа работает с OPM (Панелью свойств)? Если да, то и здесь могут быть нюансы.
-
В этот момент AutoCAD хочет что-то сообщить, а ресурсы установлены на твоё приложение и он не может найти своё сообщение.
Программа работает с OPM (Панелью свойств)? Если да, то и здесь могут быть нюансы.
"В этот момент"? Сейчас это окно появляется через некоторое время уже после закрытия Автокада.
Программы работают со своими окнами.
-
"В этот момент"? Сейчас это окно появляется через некоторое время уже после закрытия Автокада.
Посмотри в Диспетчере задач - в этот момент процесс acad.exe еще выполняется. При этом вполне возможно, что все его окна уже закрыты.
-
Посмотри в Диспетчере задач - в этот момент процесс acad.exe еще выполняется. При этом вполне возможно, что все его окна уже закрыты.
Спасибо.
Да, так и есть - acad.exe еще висел. Но, в принципе, эти "хвосты" для данных и в целом безопасны?
-
Но, в принципе, эти "хвосты" для данных и в целом безопасны?
Ну на 100% гарантию я не дам.