|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
DCL & UserForm VBA
CNC
Israel
Регистрация: 07.07.2007
Сообщений: 302
|
||
Просмотров: 6549
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Просмотри тему http://www.autocad.ru/cgi-bin/f1/board.cgi?t=37618iw
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
И огребешь проблемы при передаче данных в окно VBA и обратно. Через USERS* передать можно далеко не все (кроме, пожалуй, достаточно элементарных вещей). Например, придумай, каким образом передать в лисп, какие флажки отмечены в таком, к примеру, окне (см.аттач) - я с трудом представляю, например, даже примерный алгоритм.
Также попробуй, ради интересу, мышой поменять размер окна. Или динамически добавить / выгрузить в окне, нарисованном в VBA, контролы. Сделай в окне массив объектов. Попробуй, для примеру, использовать в окне сторонний ocx (например, TrueDBGrid) и предоставь свой dvb-проект "на сторону". [ATTACH]1191346647.jpg[/ATTACH]
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Какие закладки? Tab'ы, что ли?
Понимаешь, я сейчас тоже в раздрае, если честно. С одной стороны, VB6 мне более-менее знаком, с другой - .NET надо использовать, пора уже... dll-ки, нарисованные в VB6, порождают несколько проблем: 1. Окна, сделанные в VB6, в Windows XP Pro 32bit при "неклассической теме" отображаются некорректно. 2. dll требует обязательной регистрации, что может быть выполнено под правами либо локального, либо доменного администратора. Казалось бы, фигня, но не после 16-го наращивания функционала. 3. В Windows Vista 64bit зарегистрировать такую dll невозможно, как мне сказал Александр Ривилис. 4. Даже если ограничиться Windows XP и Windows Vista 32bit, все равно вместе с самой dll надо предоставлять еще несколько dll и ocx и обязательно выполнять их регистрацию, если версия не более новая. А если более новая, то гарантировать корректность работы твоей dll и Билли вряд ли возьмется. dll, нарисованные на .NET (и загружаемые в AutoCAD от 2005 и выше командой _netload), лишены этих недостатков. У них свои ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Хоть он и "вижуал", но все равно - Beginner All Surprose Implementation Code - "универсальный символьный код для начинающих". Так небезызвестный автор придумал. А уж потом, в маркетинговых целях, стали "расшифровывать как "базовый". Без базы, мол, никуда. Что касается "красивых диалогов" для LISP, то давно убедился: 1. Чаще всего они вообще не нужны. Многое можно и нужно делать опциями командной строки, только с умом. Представьте, например, команду PLINE в диалоговом варианте со множеством управляющих элементов - работать было бы невозможно. 2. Когда диалоги действительно необходимы, можно использовать COM. В том числе и на VB ("большом", но с перспективой тупика). 3. Обмен данными между LISP и диалогом возможен в нескольких вариантах: а) Через USERxx если диалог на VBA. Это наихудший вариант во всех отношениях. б) Через файл. Возможен, и оптимален если передавать надо очень много данных. Но надо с умом - файлы должны быть доступны для чтения, записи обычным пользователем, а не только автором программы. в) Через свойства COM- объектов или в виде аргументов для методов. Это теоретически наилучший вариант, но для сложных данных (например, списков) реализовать сложно. Тут уметь надо, особенно с учетом разных механизмов передачи, например, строк. г) Через реестр - временные ключи в собственной ветке HKCU. Это работает быстро, программировать легко. Сами диалоги не обязательно делать большими и навороченными. Уже давно использую всего несколько простых: 1. Иллюстрированное древовидное меню 2. Выбор из линейного списка 3. Выбор из списка с "галочками" 4. Выбор из двухпанельного списка с сортировкой. 5. Окно сообщений на все случаи жизни 6. Окно ввода двух чисел или строк с опциональным выбором из справочников. В сочетании с командной строкой, установкой и восстановлением параметров по умолчанию, это позволяет делать на LISP программы любой сложности. И только очень редко - сложный диалог. Тогда можно и с DCL повозиться. Но и из сложного диалога по нажатию кнопок могут вываливаться стандартные, что резко снижает сложность его обработки. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
> ShaggyDoc : У меня осознание этого уже с полгода как в голове болтается (правда, без видимых изменений). СОМ-модель - ей же по барабану, как я понимаю, на каком языке нарисована dll - Delphi / VB / VC / FreeBasic etc. Все едино оно прописывается в реестр и в HKRC, и потом уже выполняется его поиск. В Vista64bit, как я понял, технология принципиально иная, то есть этот вариант работать не будет.
Теперь по пунктам разрешите пройтись ![]() а) не оспаривается б) не очень. Достаточно вспомнить историю поведения Windows XP в домене и попытке записи в %AllUsers%\Aplication Data\<soft>. И потом, файловые операции в Windows самые медленные... в) По-моему, это определяется методом созданного класса. Если он принимает массив строк, то сделать из списка вариант... По-моему, не проблема. Хотя, может, я и ошибаюсь и в полной мере это дело я не огреб еще. г) Практически аналог б), только вся разница в скорости и том, что (возможно) не понадобится преобразование данных. Удобство сомнительное, если честно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
|||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
В VC примерно то же с ассортиментом, но работа гораздо эффективнее. Потому что используются классы. В Delphi ассортимент богаче всех - именно это и привлекает. Да, делать COM можно хоть в чем - но эффект разный. Цитата:
Цитата:
А вот в Delphi-приложениях можно использовать специальный интерфейс IStrings, который очень удобен. В общем, "уметь надо", как я и писал. В конце-концов все преобразования осуществляются одним процессором, только в разных приложениях. Цитата:
Во всех вариантах скорость обработки не видна пользователю. Какая ему разница - выполняется действие за 0.01 сек или за 0.001. Да ведь выбирать-то приходится из плохого или очень плохого. Самого правильного - сделать настоящий "вижуальный" лисп, с конструированием, хотя бы как в VB, AutoDesk не желает. Да и кишка у них тонка. Хотя программисты давно научились делать в своих программах конструирование форм и диалогов. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Насчет массива строк.
Допустим, есть класс со свойством (прошу прощения, но буду использовать VB-шный синтаксис): Код:
Подробности его реализации сейчас не важны. Из лиспа: Код:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Конечно, можно так. Но как раз подробности реализации важны. Как сервер обработает такой массив, что будет при изменении длины, как повлияет длина строк, как внутри сервера происходят действия со строками (строки разных типов бывают).
А если к каждой строке надо привязать еще и другие данные? Все это решаемо, причем разными путями. Можно иметь свойство, а можно иметь метод с аргументами. Вот в Автокад-10, когда еще никакого DCL не было, а диалоги были нужны, то делал диалог в EXE-файле. Передача параметров - через файл. И все работало, причем очень быстро даже на 286 машинах. Но тогда запуск программы из Автокада был модальным по умолчанию. Памяти было всего 640 кб, сам Автокад "сжимался" примерно до 25 кб, остальное выделялось программе. Дико, по нынешним временам, но работало прекрасно. Точно так же можно делать и сейчас - это еще один путь. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
По-моему, в VB 6 по умолчанию значения передаются по ссылке, а вот в .NET - уже по значению. Регламентируется всего одним словом: ByRef или ByVal. СОМ получил массив любых значений и дальше живет с ними: скопировал массив в закрытую переменную и "дальнейшая судьба никого не касается" (ну или почти так). Принципиальной разницы лично я не ощущаю - передавать строки, числа или массив структур (пользовательских типов). Охотно соглашаюсь, что я "не прошел весь путь".
Цитата:
Цитата:
Цитата:
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Диалог в EXE, при всей примитивности решения, имеет и преимущества. Такую программу можно написать на чем угодно. Можно не ломать голову с COM. Нет зависимости от перспектив COM.
Обмен "заданиями" и результатами можно делать через опуии командной строки, файл или реестр. Конечно, AutoCAD сейчас не сворачивается в памяти. Для запуска в модальном режиме нужна функция. Ее можно сделать в ARX или в COM. Но это может быть единственный ARX или COM - можно воспользоваться и посторонним. А можно и LISP написать - проверка в цикле наличия результата. EXE может быть и предпочтительней обычной DLL. Вот внедрял в Mapinfo иллюстрированное меню (там тоже может быть много сторонних утилит). Внутри Mapinfo среда программирования MapBasic. Он умеет вызывать функции из обычных DLL, но чтобы обменяться строками, надо делать хитрые манипуляции, например резервировать длину строковой переменной. С EXE все решается просто. А для пользователя внешний результат точно такой же. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ух ты, ни себе чего - обязательное использование строк фиксированной длины... Такое в VB6 только при специальном указании шло, и то строки автоматом, по-моему, дополнялись пустыми символами (могу и путать, прошу не бить ногами в прыжках). Может, тоже перейти на exe-шники?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
Цитата:
В ruCAD диалоги ввода двух строк и чисел долгое время были в виде EXE. В порядке эксперимента. Или не помню из-за чего. |
|||
![]() |
|
||||
А тем временем Autodesk в wish list внес:
Reanimate DCL Development Rework DCL Reanimate LISP Development Rework of LISP Но что то мне с трудом верится в реализацию в итоге. |
||||
![]() |
|
||||
CNC Регистрация: 07.07.2007
Israel
Сообщений: 302
|
Есть маленький вопрос о среде разработки, все таки решил разобраться с VBA, чтобы в полнй мере понять все недостатки и достоинства данного языка. В командной строке родного ACad-а набираю vbaide и оказываюсь в Microsoft Visual Basic 6.3 для более эфективного знакомства с итерфейсом вышеуказанного продукта решил, почитать статью о первых и вторых шагах разработки програм на VB например здесь
http://bit.pirit.info/forum/viewtopic.php?t=2831 и столкнулся не с соответствием описания среды разработки, в статье говорилось о создании *.exe -шных файлов, а я у себя даже new project найти немогу, буду благодарен если кто-то внесет ясность. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Потому что VBA и VB суть разные вещи. Запуск vbaide, правый пинок на ThisDrawing, Add -> Module или Form или Class. И вперед.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Цитата:
На MS VB 6.3 ты сможешь сделать ехе или dll, но это сторонняя среда разработки. И к VBA она не имеет никакого отношения (кроме похожего синтаксиса).
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |