Ограничения в List-box при множественном выборе
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ограничения в List-box при множественном выборе

Ограничения в List-box при множественном выборе

Ответ
Поиск в этой теме
Непрочитано 02.01.2012, 10:53 #1
Ограничения в List-box при множественном выборе
Frigate
 
КИП, АСУ ТП, слаботочка
 
Москва-Тюмень
Регистрация: 02.09.2010
Сообщений: 422

Всех с наступившим :-)

Прошу помочь знатоков.
Столкнулся с такой проблемой - при установкe флага multiple_select=true - количество одновременно выбранных строк не может превышать 256, т.е. значение list_box будет "0 1 2 ... 255"
Это реально так или я что-то не так делаю?
Про ограничение не сказано в справке, а список может содержать до 32768 записей.


очень грустно, если это ограничение нельзя преодолеть...
Просмотров: 12422
 
Непрочитано 02.01.2012, 12:19
#2
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Frigate, попробуй такой вариант. Чтобы работало нужно подправить путь для загрузки диалога на свой.
.lsp
Код:
[Выделить все]
 (defun test ( / lst a id_dial scl)
  (setq a -1)
  (repeat 500
    (setq a (1+ a))
    (setq lst (cons (vl-princ-to-string a) lst))
    )
  ;dialog
  (setq id_dial (load_dialog "E:\\lisp\\заготовки\\dcl-ки\\dial.dcl"))
  (if
    (not
      (new_dialog "dial_copy" id_dial)
      )
    (exit)
    )
  (start_list "scaclelist")
  (mapcar 'add_list (reverse lst))
  (end_list)
  (action_tile
    "cancel"
    "(done_dialog) (setq userclick nil)"
    )
  (action_tile "accept"
    (strcat
      "(progn
	  (setq scl(get_tile \"scaclelist\"))
	  (done_dialog)"
      "(setq userclick T))"
      )
    )
  (start_dialog)
  (unload_dialog id_dial)
  ;end dialog
  scl
  )
.dcl
Код:
[Выделить все]
 dial_copy:dialog {label="Список масштабов";
width=10; height=10; fixed_width=true; fixed_height=true;
:text {label="Выберите масштаб";}
:list_box{key="scaclelist";multiple_select=true;}// width=10; height=5; fixed_width=true; fixed_height=true;
ok_cancel;
}
Oliver_88 вне форума  
 
Непрочитано 02.01.2012, 16:33
#3
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Всех с наступившим! Наверное, имеется ввиду, что при попытке програмно выделить больше 256 строк выдаётся ошибка о превышении не помню уже чего? Это решается просто - выделяй большой список по допустимым частям!
Евгений А. вне форума  
 
Автор темы   Непрочитано 02.01.2012, 20:16
#4
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Oliver_88,
ной
да, странно, почему работает с 500 строчками? Может потому, что ты используешь get_tile, а я присваиваю значение в action_tile списка?

В любом случае, поставь вместо 500 - 600. И акад вылетит. Какая-то ошибка происходит. Иногда акад пишет ошибку нарушения доступа. Странно, в общем.
Frigate вне форума  
 
Непрочитано 02.01.2012, 23:11
#5
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


в list_box ограничение на длину возвращаемой строки - 2002 (до 2004 было 254)
Vov.Ka вне форума  
 
Автор темы   Непрочитано 02.01.2012, 23:15
#6
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Vov.Ka,

а чем тогда вызвано зависание акада, когда в коде из сообщения #2 меняешь 500 на 600? Больше 600 смысла нет задавать - акад зависает или водникает ошибка.
Frigate вне форума  
 
Непрочитано 02.01.2012, 23:22
#7
Oliver_88

"ценный кадр"
 
Регистрация: 02.12.2010
Сообщений: 115
<phrase 1=


Frigate, я поставил 600. Ничего не зависало,не вылетало и ошибок не было. Просто функция вернула nil. Даже не знаю чего с этим делать.
Oliver_88 вне форума  
 
Непрочитано 02.01.2012, 23:32
#8
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 179


Цитата:
Сообщение от Frigate Посмотреть сообщение
а чем тогда вызвано зависание акада, когда в коде из сообщения #2 меняешь 500 на 600? Больше 600 смысла нет задавать - акад зависает или водникает ошибка.
какой автокад?
у меня 2005, не падает
Vov.Ka вне форума  
 
Автор темы   Непрочитано 03.01.2012, 00:01
#9
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


у меня 2009й

Oliver_88, но в любом случае 500 лучше, чем 256 ))) Хотя - у меня при моем варианте кода хотя б отрабатывает 256 значений, а не вылетает и не выводит nil

я тоже не знаю, что делать )))
Frigate вне форума  
 
Непрочитано 03.01.2012, 10:43
#10
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
я тоже не знаю, что делать
А я знаю. Надо забыть DCL. Причина глюков в том, что список формируется строкой, а длина строк ограничена.

И вообще (даже другими средствами), не выводить в линейный список для выбора пользователем большое количество строк.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 03.01.2012, 11:46
#11
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


ShaggyDoc,

совет хороший!

Я тоже думаю создать возможность выбора большого количества строк - не в dcl, а при помощи подкачки текстовых файлов. Но это редко когда понадобится в моей программе, так что особого внимания этим функциям не буду уделять.
Frigate вне форума  
 
Непрочитано 03.01.2012, 16:16
#12
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Но это редко когда понадобится в моей программе, так что особого внимания этим функциям не буду уделять
Это твоя единственная и последняя в жизни программа? И ты намерен до конца жизни с ней биться?

Надо только один раз сделать несколько универсальных, правильно работающих, надежных диалогов и закрыть эту тему для себя навсегда. Это быстрее, чем ты разбирался на форуме с первым встреченным глюком.

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

Примеры простых диалогов для работы со списками на картинках. Все вызываются из LISP в виде функций. Например, список с "галочками"

(ru-dlg-show-check-list
dlg_caption ; Заголовок окна
lst_names ; Список строк
lst_values ; Список значений (помечен или нет)
lst_enabled ; Список доступности для изменения
help_file topic_id ; Пункт справки
)
Миниатюры
Нажмите на изображение для увеличения
Название: double_list.png
Просмотров: 98
Размер:	3.7 Кб
ID:	72368  Нажмите на изображение для увеличения
Название: dual_list.png
Просмотров: 99
Размер:	6.3 Кб
ID:	72369  Нажмите на изображение для увеличения
Название: single_list.png
Просмотров: 79
Размер:	3.7 Кб
ID:	72370  Нажмите на изображение для увеличения
Название: check_list_box.png
Просмотров: 85
Размер:	6.2 Кб
ID:	72371  

Последний раз редактировалось ShaggyDoc, 03.01.2012 в 16:19. Причина: Движок форума стал глючить с тегами?
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 03.01.2012, 18:57
#13
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


а как тогда позволить пользователю удалить 1500 выбранных им кабелей?
Frigate вне форума  
 
Непрочитано 03.01.2012, 20:04
#14
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Frigate Посмотреть сообщение
а как тогда позволить пользователю удалить 1500 выбранных им кабелей?
Сделать доступной кнопку "Удалить" (или еще какую, которая результат принимает), если выбран хоть один элемент

Ты лучше думай, как пользователю обеспечить удобный выбор, да еще такого количества. В обычном ListBox множественный выбор осуществляется стандартными средствами - мышкой с нажатыми Shift или Ctrl. При больших списках это чрезвычайно неудобно - достаточно один раз сбиться (на 1499 элементе), и начинай все сначала. Вот для этого и делают специальные диалоги.

Например, в списке с "галочками" (CheckListBox) выбор не зависит от навигации и не сбивается. Можно и мышкой щелкать по галочкам, а клавишами прокручивать. Можно и отметку пробелом делать. Можно и свою клавишу назначить.

Другой вид списка, с двумя окнами (DualListBox), позволяет перебрасывать элементы из окна в окно. Допустим, надо выбрать 1500 элементов из 1600.

В простом списке надо будет щелкнуть до 1500 раз.

В DualListBox исходный список помещаем в левое окно. Пользователь может одним щелчком перебросить весь список в правое окно, а затем выбрать в нем и перебросить обратно только оставляемые 100 элементов. Тогда справа останется 1500 удаляемых элементов. Это будет в 15 раз быстрее. Да еще и элементы можно заодно по вертикали перетаскивать, т.е. изменять порядок следования. Можно и запомнить состояние списков и дать работать "с перекурами".

Последний раз редактировалось ShaggyDoc, 03.01.2012 в 20:10.
ShaggyDoc вне форума  
 
Непрочитано 03.01.2012, 20:11
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


если б меня заставили выбрать 256 пунктов из 32768, я б афтору надел его диалоговое окно на голову, как юзер
Любые сложные данные можно структурировать и далее работать с деревьями (Вспомните установщик акада в пользовательском режиме), в примитивном виде это можно и через dcl организовать, если недотрах
Что касается картинок, то все, кроме последней можно организовать в dcl, последнюю тоже можно, если см. выше
Как по мне, оптимальный вариант - перейти на vb.net
Вариант ShaggyDoc мне лично не нравится тем, что нужно создавать установщик, да и не нужные по сути системе библиотеки регистрировать как то не очень хочется, ну и к тому же, при первом запуске, такая ком-форма появится не сразу... доли секунды, а негативное отношение уже сложено... впрочем все это не смертельно
самый лучший вариант - сесть и подумать как обойтись без длинных списков, 90% это возможно
gomer вне форума  
 
Непрочитано 03.01.2012, 21:35
#16
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Что касается картинок, то все, кроме последней можно организовать в dcl
Визуально такие же - можно. Но у таких диалогов еще и поведение есть, т.е. реакция на всякие действия. В DCL этого не сделать. Столько action_tile замучишься писать.

Цитата:
мне лично не нравится тем, что нужно создавать установщик, да и не нужные по сути системе библиотеки регистрировать как то не очень хочется
Будешь зарабатывать деньги программированием - понравится. Без этого и делать нечего. Заодно и без написания справок. И что значит "не нужные системе"? Да "системе" и сам Автокад не нужен. Пользователям надо. Программы сразу надо делать профессионально - чтоб они ставились в нужное место, чтоб нигде абсолютные пути не были записаны и прочее. Вообще чтоб работали не только на компьютере автора и не только в его присутствии.

Цитата:
Как по мне, оптимальный вариант - перейти на vb.net
Так среда программирования может быть любой. Только и на .NET надо соблюдать определенные правила, да еще и с версионностью самой .NET маленько помучиться.

Нужно не говорить о том, на что можно перейти, а перейти и сделать

Цитата:
такая ком-форма появится не сразу... доли секунды
Пробовал лично эти формы пользовать? Считал доли секунды? Знаешь, как внутренние механизмы COM, влияющие на задержки работают? Сравнивал с секундами задержек штатных диалогов? Много форм сделал на .NET? Сравнивал скорость их работы? Пробовал сделать диалог без COM, в виде обычного модального EXE да с передачей данных через файл и сравнить скорость его работы, с .NET, например?
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 03.01.2012, 23:01
#17
Frigate

КИП, АСУ ТП, слаботочка
 
Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Сделать доступной кнопку "Удалить" (или еще какую, которая результат принимает), если выбран хоть один элемент

Ты лучше думай, как пользователю обеспечить удобный выбор, да еще такого количества. В обычном ListBox множественный выбор осуществляется стандартными средствами - мышкой с нажатыми Shift или Ctrl. При больших списках это чрезвычайно неудобно - достаточно один раз сбиться (на 1499 элементе), и начинай все сначала. Вот для этого и делают специальные диалоги.

Например, в списке с "галочками" (CheckListBox) выбор не зависит от навигации и не сбивается. Можно и мышкой щелкать по галочкам, а клавишами прокручивать. Можно и отметку пробелом делать. Можно и свою клавишу назначить.

Другой вид списка, с двумя окнами (DualListBox), позволяет перебрасывать элементы из окна в окно. Допустим, надо выбрать 1500 элементов из 1600.

В простом списке надо будет щелкнуть до 1500 раз.

В DualListBox исходный список помещаем в левое окно. Пользователь может одним щелчком перебросить весь список в правое окно, а затем выбрать в нем и перебросить обратно только оставляемые 100 элементов. Тогда справа останется 1500 удаляемых элементов. Это будет в 15 раз быстрее. Да еще и элементы можно заодно по вертикали перетаскивать, т.е. изменять порядок следования. Можно и запомнить состояние списков и дать работать "с перекурами".

Благодарю за полезный и конструктивный комментарий
Frigate вне форума  
 
Непрочитано 03.01.2012, 23:35
#18
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Пробовал лично эти формы пользовать? Считал доли секунды? Знаешь, как внутренние механизмы COM, влияющие на задержки работают? Сравнивал с секундами задержек штатных диалогов? Много форм сделал на .NET? Сравнивал скорость их работы? Пробовал сделать диалог без COM, в виде обычного модального EXE да с передачей данных через файл и сравнить скорость его работы, с .NET, например?
Друзья мои какого года у Вас компьютеры (и тогда какой автокад там может нормально работать), у меня есть рабочие примеры диалогов вызывающие всеми перечисленными методами (DCL, COM, Net, EXE) и ничего - все работают "нажал-появилось" на любом более-менее современном компьютере (при более-менее настроенной ОС) разница скорости в вызове диалога вобще не существенна. У всех методов есть свои плюсы и минусы - лучше подходит в зависимости от ситуации.
Offtop: вышеперечисленное больше к Gomer'у относится.

Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Надо только один раз сделать несколько универсальных, правильно работающих, надежных диалогов и закрыть эту тему для себя навсегда.
ИХМО это либо утопия, либо самообман - да любое действие можно и через ДОС ком-строку организовать (и в свое время было не мало "доказательств", что так удобней всего) - да можно написать десяток другой и потом все под них "подгонять", но значит-ли это "закрыть эту тему для себя на всегда" - как минимум у меня пока точно не получилось.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 04.01.2012, 02:47
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Будешь зарабатывать деньги программированием - понравится.
будь я профессиональным программистом, писал бы аэриксы, жаль не пришлось
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Программы сразу надо делать профессионально - чтоб они ставились в нужное место, чтоб нигде абсолютные пути не были записаны и прочее. Вообще чтоб работали не только на компьютере автора и не только в его присутствии.
ну, я об этом и написал, только короче
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Пробовал лично эти формы пользовать? Считал доли секунды?
считал, первый запуск длится около секунды, остальные - как тока, так сразу... что там внутри происходит, не разбирался, делал самую простую форму с одной кнопкой
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Пробовал сделать диалог без COM, в виде обычного модального EXE да с передачей данных через файл и сравнить скорость его работы, с .NET, например?
Зачем? это метод из доаркснетовской эпохи, с использованием самого медленного железа
в любом случае, если вы пытаетесь втиснуть в диалог данные со сложной структурой, то этот диалог должен растягиваться. этого нет и не будет в dcl.

В общем-то вариантов море. у всех свои достоинства и недостатки.

Oliver_88, почитайте про start_dialog в справке и не повторяйте автодесковских ошибок
gomer вне форума  
 
Непрочитано 04.01.2012, 08:14
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Друзья мои какого года у Вас компьютеры (и тогда какой автокад там может нормально работать)
Важно не какой у меня компьютер, а какие компьютеры у пользователей. Обычная беда в головах у программистов - у меня "летает", значит хорошо. А для конечных пользователей - облом. И это происходит с очень популярными продуктами в том числе. Всё на "более или менее" рассчитано.

Цитата:
ИХМО это либо утопия, либо самообман - да любое действие можно и через ДОС ком-строку организовать
Причем здесь командная строка вообще? А с диалогами не самообман, а давно проверенное дело.
Вот почти все диалоги, которые я использую:

ruXmlMenu - иллюстрированное XML-меню. Единый диалог, позволяющий заменить множество индивидуально конструируемых форм. Картинку в очередной раз показываю. Помимо универсальных приемов работы позволяет продвинутым пользователям расширять возможности любых программ дополнением собственными данными. Без участия программиста.

Списки (показаны в #12)

ruChkList
ruDoubleList2
ruDualList
ruSingleList

Ввод двух чисел или строк (можно и одиночных, как опции). Имеют проверки допустимых диапазонов (для чисел), выбора из справочников, выбора спецсимволов (для строк), "взять" указанием в чертеже.
ruGetDoubleNumber
ruGetDoubleString (см. картинку)

ruSplash - заставка с информацией о длительном процессе

ruFileDlg - очень быстрый файловый диалог с рядом дополнительных возможностей.

ruCoordEdit - визуальный редактор координат (как-то показывал картинку)

ruXmlTable - редактор любых таблиц. Таблицу пользователь может и сам создать (с шапками и прочим оформлением), редактировать её как таблицу БД. И в виде таблицы AutoCAD нарисовать, не заботясь об оформлении. См. картинку.

ruTxtView - просмотр текста из файла или чертежа

ruLayerClass - классификатор слоев. Вот этот как раз сделан специально в виде EXE, причем не модального.

Правильная комбинация таких диалогов позволяет быстро создавать практически любые программы. Конечно, для отдельных сложных случаев приходится делать и более сложные формы. Вот программа аэродинамического расчета (см. рисунок) тоже сделана в виде самостоятельной программы, но она же и в LISP встроена в виде диалога. Это позволяет написать результаты расчета на нарисованной схеме, а в Автокаде измерить длины участков.
Миниатюры
Нажмите на изображение для увеличения
Название: xml_3d_pipe_support.png
Просмотров: 83
Размер:	21.1 Кб
ID:	72388  Нажмите на изображение для увеличения
Название: dlg_2_string.png
Просмотров: 70
Размер:	6.3 Кб
ID:	72389  Нажмите на изображение для увеличения
Название: dlg_xml_table.png
Просмотров: 70
Размер:	8.1 Кб
ID:	72390  Нажмите на изображение для увеличения
Название: app_win_lt.png
Просмотров: 67
Размер:	26.7 Кб
ID:	72391  Нажмите на изображение для увеличения
Название: dlg_air.png
Просмотров: 73
Размер:	10.2 Кб
ID:	72392  

ShaggyDoc вне форума  
 
Непрочитано 04.01.2012, 14:25
#21
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Написал большой пост - а он не "записался" - ну и бог с ним.
p.s.
Цитата:
Важно не какой у меня компьютер, а какие компьютеры у пользователей.
А сколько стоит продукт для Ваших пользователей? Я думаю что за соответствующие деньги можно купить комьютер где уж, как минимум, вызов диалога будем точно "равнобыстр".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 04.01.2012 в 15:24.
Дима_ вне форума  
 
Непрочитано 04.01.2012, 16:37
#22
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А сколько стоит продукт для Ваших пользователей? Я думаю что за соответствующие деньги можно купить комьютер где уж, как минимум, вызов диалога будем точно "равнобыстр".
А можно просто поинтересоваться OpenDCL
gomer вне форума  
 
Непрочитано 04.01.2012, 17:46
#23
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Я думаю что за соответствующие деньги можно купить комьютер где уж, как минимум, вызов диалога будем точно "равнобыстр".
Покупать всем новые компьютерЫ ради убыстрения медленных диалогов? Хороший совет! Типичный для программиста - мы разучились писать "маленькие" и быстрые программы, так вы заменяйте компьютеры.

А они и на старых прекрасно работают, потому что не гонятся за новейшими версиями программ "с рюшечками". Например, даже в AutoCAD-14 работают (кому 2D достаточно) и в AutoCAD-2008 (кто в 3D). Зачем отдавать деньги заморским дядям, если их можно оставить себе?

Вот даже Word (не такая уж ресурсоемкая программа) в современных версиях вдруг стал жаловаться на нехватку памяти при связках с Excell. Так что, ради его новых "сбоку бантик" менять компьютеры? "Просто память-то" не добавишь. Так просто не стали переходить на новый Word, а пользуются старым, который эту же работу делает не выкобениваясь.

Цитата:
А можно просто поинтересоваться OpenDCL
Поинтересоваться можно. И узнать, что для использования надо освоить "промежуточный" язык и быть при этом зависимым от дальнейшего развития продукта. Были уже такие системы, теперь забытые. Изучать надо что-то базовое, работающее без посредников. DotNet, например. Хотя почти все основные концепции, провозглашавшиеся при появлении .NET оказались ложными или извращенными.

Последний раз редактировалось ShaggyDoc, 04.01.2012 в 17:52.
ShaggyDoc вне форума  
 
Непрочитано 04.01.2012, 18:03
#24
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Например, даже в AutoCAD-14 работают (кому 2D достаточно) и в AutoCAD-2008 (кто в 3D)
Мэтр - ну Вы же прекрасно понимаете про что я говорю, кому 14-го хватает - тому и DCL за глаза будет, а на любом компьютере где 2008 будет работоспособен ощутимой разницы при вызове диалога не будет что при exe (теоритически самый медленный) что на Net (из вышеупомянутых типа самый быстрый - наверное на чистом object-arx еще быстрей - но на нем я не ничего неделал, потому в расчет не беру). Честное слово - было время когда я занимался байтое**ством и считал, что кроме ассемблера все остальное для криворуких программистов не умеющих "правильно" программы писать - дурь это полная. Чтобы разницу заметить надо "средний", около 10-ти летний давности компьютер.

p.s. Да если честно автокад 14 конечно еще могут использовать - из коммерческих соображений, а что все компьютеры с того-же (97-2000) года без апгрейта работают - в это я никогда не поверю (ну если только все - это 2 компа). Гнаться за самым новым я конечно не призываю (ничего кроме проблем от этой стратегии не будет), но компьютеры каждые 5-6 лет и так, и так, хочешь не хочешь, а обновления требуют - просто физически из строя выходят - да и что это за фирма которая за 3 года 10 т.р. на апгрейт "раскошелиться" не может.
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 04.01.2012 в 18:35.
Дима_ вне форума  
 
Непрочитано 04.01.2012, 18:24
#25
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Поинтересоваться можно. И узнать, что для использования надо освоить "промежуточный" язык и быть при этом зависимым от дальнейшего развития продукта.
Уже сейчас можно добиться приемлемых результатов с odcl... в рукад ведь тоже свой диалект... ну, да, ничто не вечно (кроме лиспа) в любом случае придется что-то менять, совершенствоваться... Я бы опасался говорить, что, мол, какой-то метод универсальный. Гарантию дают только мошенники или самоуверенные неудачники (с)
насчет байто-чего-то там... есть такой micro paint размером на порядок меньше, чем mspaint а по функционалу такой же, ну или почти

Последний раз редактировалось gomer, 04.01.2012 в 19:07.
gomer вне форума  
 
Непрочитано 04.01.2012, 18:28
#26
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


> ShaggyDoc

А где можно (если можно...) посмотреть эту
ru-dlg-show-check-list
?
kserg вне форума  
 
Непрочитано 04.01.2012, 19:14
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
в рукад ведь тоже свой диалект...
А я и не знал
Цитата:
что это за фирма которая за 3 года 10 т.р. на апгрейт "раскошелиться" не может.
Конечно может. Но зачем? Вот на НГ прогуляли по 10 т.р. на человека - это понятно. А зачем на компьютеры? Да ишшо на Висту, Win7, ежегодный новый Автокад и прочее? Если все и так отлажено и работает? Да и апгрейд уже не так просто делать. Комплектующие исчезают быстро. Уже не просто обновить надо, а маму менять, все IDE винчестеры выбрасывать, память и прочее. Проще новый покупать - дело не в деньгах.

Цитата:
Сообщение от kserg Посмотреть сообщение
А где можно (если можно...) посмотреть эту
ru-dlg-show-check-list
Здесь и посмотри:

Код:
[Выделить все]
 
(defun ru-dlg-show-check-list (dlg_caption lst_names lst_values	lst_enabled help_file topic_id / count i lst_s result s	srv is_edit)
			      ;|
Пример вызова				  
(ru-dlg-show-check-list
  "Проверка"
  (list "Переменная 1" "Переменная 2" "Переменная 3")
  (list T NIL NIL)
  (list T T T)
) ;_ end of ru-dlg-user-show-check-list
|;

  (if (setq srv (vlax-get-or-create-object "ruCheckListSrv.CheckList"))
    (progn
		(if (listp lst_enabled)
				(if (null lst_enabled)(setq is_edit 0))
				(setq is_edit (ru-conv-value-to-wordbool lst_enabled))
		)
		(setq i 0 lst_s '()) 
		(repeat (length lst_names)
			(setq lst_s
				(cons 	(strcat (ru-conv-bool-to-str (nth i lst_values))
						;; здесь заменим возможные =
						(ru-string-replace (nth i lst_names) "=" " ")
						) ;_ end of strcat
						lst_s
				) ;_ end of cons
			  i	    (1+ i)
			) ;_ end of setq
      ) ;_ end of repeat
      (setq lst_s (reverse lst_s))
      (vlax-invoke-method srv "Create")
      (vlax-put-property srv 'Caption dlg_caption)
      (if help_file	(vlax-put-property srv 'HelpFile help_file))
      (if topic_id 	(vlax-put-property srv 'HelpTopicID topic_id))
      (setq i -1)
      (foreach s lst_s
		(setq i (1+ i))
		(vlax-invoke-method srv  "AddItem" 
			s
			(if (and (listp lst_enabled) lst_enabled)
				(ru-conv-value-to-wordbool (nth i lst_enabled))
				is_edit
			) ;_ end of if
		) ;_ end of vlax-invoke-method
      ) ;_ end of foreach
      (setq result
	     (vlax-variant-value (vlax-invoke-method srv "Execute"))
      ) ;_ end of setq
      (if (= result :vlax-true)
		(if (and (listp lst_enabled) lst_enabled)
			(progn
				(setq count	     (vlax-get-property srv 'ItemsCount)
					lst_values '()
					i	     0
				) ;_ end of setq
				(repeat count
					(setq s "")
					(vlax-invoke-method srv "GetItem" i 's)
					(setq lst_values (cons (ru-conv-str-to-bool s) lst_values)
						i (1+ i)
					) ;_ end of setq
				) ;_ end of repeat
				(setq result (reverse lst_values))
			) ;_ end of progn
			(setq result lst_values)
		) ;_ end of if
		(setq result nil)
      ) ;_ end of if
      (vlax-invoke-method srv "Free") 
      (vlax-release-object srv)
      (setq srv nil)
    ) ;_ end of progn
    (ru-msg-alert "Не удалось запустить CheckList")
  )
  result
) ;_ end of defun
Заодно Дима_ за голову схватится - нет его любимых конструкций, а переменные есть, и циклы убогие.
ShaggyDoc вне форума  
 
Непрочитано 04.01.2012, 19:33
#28
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
(setq srv (vlax-get-or-create-object
вот тут и тормозит по первой
gomer вне форума  
 
Непрочитано 04.01.2012, 20:26
#29
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Дима_ Посмотреть сообщение
а что все компьютеры с того-же (97-2000) года без апгрейта работают - в это я никогда не поверю
У меня в соседней конторе стоит компьютер порядка 386 машины или Pentium-I. На нем DOS и 10-й (не путать с 2010) Автокад. Не нем крутится задача, которую в то время местные умельцы склепали, скомпилировали, привязали к машине и благополучно свалили в Америку. Так они всей конторой молятся, чтобы в нем ничего не загнулось.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 04.01.2012, 21:26
#30
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 04.01.2012 в 21:31.
Дима_ вне форума  
 
Непрочитано 04.01.2012, 21:27
#31
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
вот тут и тормозит по первой
Да. Потом Windows держит COM-объект в памяти, ведет учет обращений к нему, и если их долго нет - выгружает.

Цитата:
На нем DOS и 10-й (не путать с 2010) Автокад
Вот на таком же компьютере на автобусном заводе работает моя программа уже 20 лет. Продал за $55000 еще в 1990 году. Много раз предлагал поменять бесплатно на самую свежую версию - не хотят. Привыкли, и есть все, что надо.
ShaggyDoc вне форума  
 
Непрочитано 04.01.2012, 21:46
#32
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Да. Потом Windows держит COM-объект в памяти, ведет учет обращений к нему, и если их долго нет - выгружает.
Так у Вас же он при каждом обращении в конце выгружается (стр. 69-71) - повторно конечно загружать быстрей будет - т.к. из кеша.
Цитата:
Заодно Дима_ за голову схватится - нет его любимых конструкций, а переменные есть, и циклы убогие.
Провокация?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.01.2012, 01:43
#33
Salt

Josser
 
Регистрация: 09.11.2011
Сообщений: 66


Цитата:
почти все основные концепции, провозглашавшиеся при появлении .NET оказались ложными или извращенными.
Вот тут бы поподробнее, если не затруднит.
Salt вне форума  
 
Непрочитано 05.01.2012, 07:29
#34
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Так у Вас же он при каждом обращении в конце выгружается
Нет, в Windows объект остается. (vlax-release-object srv) - это для Lisp. А метод Free - внутри самого приложения.

Цитата:
Вот тут бы поподробнее, если не затруднит
Подробнее - слишком много. Но вот недавно перечитывал одну из самых первых книг издательства Microsoft Press - Дэвид С. Платт "Знакомство с Microsoft .NET". Чтоб сравнить обещания с результатом. Там уже в предисловии автор пишет "Microsoft не позволит мне рассказать историю по-своему и заставит придерживаться линии партии".

Главное, с чего начинается - ".NET - это продукт, который обещает широко распахнуть мир Интернета". ".NET - готовая инфраструктура для решения общих проблем Интернет-приложений". Ну, и распахнули? На каких продуктах большая часть Интернет сделана? Да хотя бы этот форум? Или хотя бы сайты у самих поклонников .NET?

А мы обсуждаем про приложения для AutoCAD на .NET. Можно и создание калькулятора на .NET обсудить.

А "многоплатформенность"? А совместимость версий самой .NET? Хотя бы для AutoCAD.

Конечно, в .NET есть и много достоинств. Но не зря все слышнее стоны программистов, связавшихся с этой платформой.
ShaggyDoc вне форума  
 
Непрочитано 05.01.2012, 14:09
#35
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
все слышнее стоны программистов, связавшихся с этой платформой.
И каковы рекомендации? В какую сторону смотреть-та (с)?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.01.2012, 15:44
#36
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
И каковы рекомендации? В какую сторону смотреть-та (с)?
По сторонам не смотреть. Шаг в сторону - приравнивается к побегу. Следует следовать генеральной линии партии.
ShaggyDoc вне форума  
 
Непрочитано 05.01.2012, 16:11
#37
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Offtop:
Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Следует следовать генеральной линии партии.
- Может ли змея сломать себе хребет?
- Может, если будет ползти точно по генеральной линии партии
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.01.2012, 16:34
#38
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


больше всего бесят приложения на нет с диалогом "в три кнопки", которые просто не запускаются на "старых" компутерах... и, вот, есть, например, такой micro paint на ассемблере, который при весе на порядок меньше mspaint имеет такой же функционал
gomer вне форума  
 
Непрочитано 05.01.2012, 16:42
#39
kserg


 
Регистрация: 22.04.2004
Сообщений: 269


> ShaggyDoc

Цитата:
Здесь и посмотри:
Спасибо.
Но предложенный Вами пример вызова выдает
"; ошибка: слишком мало аргументов"

Последний раз редактировалось kserg, 05.01.2012 в 16:54.
kserg вне форума  
 
Непрочитано 05.01.2012, 18:27
#40
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Но предложенный Вами пример вызова выдает
"; ошибка: слишком мало аргументов"
Разумеется. Я же не документирую функцию. Аргументы приведены в описании. Но запускать-то все равно бесполезно - внутри используется много моих библиотечных функций, да и COM-сервера у вас нет.
ShaggyDoc вне форума  
 
Непрочитано 05.01.2012, 20:15
#41
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Нет, в Windows объект остается. (vlax-release-object srv) - это для Lisp. А метод Free - внутри самого приложения.
Да ну - запускаем диспетчер задач и смотрим процессы:
Код:
[Выделить все]
 (setq excel (vlax-create-object "excel.application"))
появляется EXCEL.EXE
Код:
[Выделить все]
 (vlax-put-property excel 'Visible T)
чтоб было его видно
Код:
[Выделить все]
 (vlax-release-object excel)
нетус его больше нигде...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.01.2012, 20:22
#42
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Дима_ Посмотреть сообщение
нетус его больше нигде...
Наивный вы, Дима_, человек и файлы, небось, с диска контролделом удаляете?
gomer вне форума  
 
Непрочитано 05.01.2012, 20:44
#43
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Цитата:
Сообщение от Дима_ Посмотреть сообщение
нетус его больше нигде...
Неправда. Процесс может остаться. Чтобы он гарантированно исчез, сначала надо выполнить метод Quit.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.01.2012, 21:07
#44
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Да ну - запускаем диспетчер задач и смотрим процессы
Диспетчером задач такие вещи не улавливаются. Это ты Excel.exe можешь так увидеть. Это её личное дело, кому что показывать.

А вот мою DLL видно и после (vlax-invoke-method srv "Free") и после (vlax-release-object srv). Висит в памяти и ждет, пока Windows ее не выгрузит (если запросов не будет). Это примерно 10 минут продолжается. И это правильная политика по отношению ко всем объектам. А COM-объектов в памяти множество висит, и штатных Windows, и из AutoCAD.

CheckList у меня изредка запускается, а вот XML-меню - постоянно. И ему не надо заново грузиться, хотя в коде вызова тоже есть vlax-release-object. Но они будут уничтожены, когда будет закрыт AutoCAD.

Только наблюдать надо более тонким инструментом, например ProcessExplorer.
ShaggyDoc вне форума  
 
Непрочитано 05.01.2012, 21:31
#45
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Как COM работает я славу богу знаю - Вы просто пишите что vlax-release... это для лисп - а это не так, и никакие не 10 минут а пока не будет запущен виндовый (COM'овый если быть точнее Garbage Collection) - что зависит от количество оперативки и настроек ОС - только толку от этого "висящего" объекта все равно ни какого - даже если будет повторный запрос он не "восстанавливается" а создается новый, просто механизм очистки памяти такой - чтоб ресурсы на каждый не тратить - а "скопом" так сказать (по возможности когда ничем не занят)- если по Вашему судить то и файлы тоже не удаляються а "висят" на жестком диске (и их действительно видно "более тонким" инструментом) - но толку от них ОС нет никакого - просто для экономии вычислительных ресурсов (физически затирать-то их незачем). В Вашем примере Ваш com создается новый на каждом вызове функции (как я уже писал повторно будет работать быстрее - но только за счет кеша).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ограничения в List-box при множественном выборе



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к таблице Access Cleper Программирование 22 02.02.2016 07:05
Express Tools Perezz!! AutoCAD 483 13.02.2015 10:57
(GRREAD) и привязка Ева Программирование 17 18.12.2009 09:10
Работоспособность программы написанной очень давно. faust999 Программирование 1 05.06.2009 08:06
3D Konstruktor для проектировщиков КМ. Дима_ Готовые программы 17 10.07.2008 10:03