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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Выбор папки или файла.

DwgRuLispLib: Выбор папки или файла.

Ответ
Поиск в этой теме
Непрочитано 14.01.2008, 10:42 #1
DwgRuLispLib: Выбор папки или файла.
Кулик Алексей aka kpblc
Moderator
 
LISP, C# (ACAD 200[9,12,13,14])
 
С.-Петербург
Регистрация: 25.08.2003
Сообщений: 39,772

Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-browsefolder
;;; *
;;; * 06/12/007 Версия 01.001.14.
;;; * 
;;; ************************************************************************
;;; на основе кода http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21054YY

(defun dwgru-browsefolder (title show-files / shlobj folder fldobj outval)
;;;  Функция получения пути (или файла)
;;;  Параметры вызова:
;;;	title		заголовок, печатаемый в окне. nil -> "". Допускаются
;;;			только строковые значения либо nil.
;;;	show-files	показывать файлы (t | nil)
;;;  Возвращаемое значение:
;;;	полный путь к указанной папке или файлу либо nil в случае нажатия Esc
;;; пользователем.
;;;  Обнаружен "баг": если в качестве результата указывается сетевая папка,
;;; сохраненная в NetHood, результат может быть неочевидным.
;;; Примеры вызова:
  ;|
(dwgru-browsefolder nil nil)	; вызвать окно показа только папок. В
	; заголовке окна ничего не пишется
(dwgru-browsefolder "Укажите папку установки" nil)	; Вызвать окно показа
	; папок. В заголовке окна пишется "Укажите папку установки"
(dwgru-browsefolder nil t)	; вызвать окно, с показыванием всех файлов
	; (вроде бы в соответствии с настройками Проводника).
|;
  (setq shlobj (vla-getinterfaceobject
                 (vlax-get-acad-object)
                 "Shell.Application"
                 ) ;_ end of vla-getinterfaceobject
        folder (vlax-invoke-method shlobj
                                   'browseforfolder
                                   0
                                   (cond
                                     (title)
                                     (t "")
                                     ) ;_ end of cond
                                   (cond (show-files 16384)
                                         (t 0)
                                         ) ;_ end of cond
                                   ) ;_ end of vlax-invoke-method
        ) ;_ end of setq
  (if folder
    (progn
      (setq fldobj (vlax-get-property folder 'self)
            outval (vlax-get-property fldobj 'path)
            ) ;_ end of setq
      (vlax-release-object folder)
      (vlax-release-object fldobj)
      ) ;_ end of progn
    ) ;_ end of if
  outval
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Просмотров: 22578
 
Непрочитано 26.01.2008, 15:14
#2
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Увы Kpblc,
Command: (dwgru-browsefolder nil t)
; error: Automation Error. Description was not provided.

Открываю окно, выделяю файл и жму ОК.
Supermax вне форума  
 
Автор темы   Непрочитано 26.01.2008, 23:10
#3
Кулик Алексей aka kpblc
Moderator

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


Странно. Только что специально прогнал на 4 версиях в разных ипостясях, плюс на виртуалке (2 варианта ОС, AutoCAD 2005 и 2006) - все работало. Попробую на работе еще погонять, вдруг там чего-нибудь вылезет.
P.S. OC: Windows 2000 + SP4, Windows XP Pro + SP2, MSIE 7.0
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 27.01.2008, 13:26
#4
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не хочет кушать 16384
Supermax вне форума  
 
Непрочитано 27.01.2008, 14:55
#5
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Тут какая-то путаница.
Вот описание BrowseForFolder в MSDN:
http://msdn2.microsoft.com/en-us/lib...DownFilterText

Вот клевая тема про то же:
http://rxlib.ru/faqs/bcbfaq/Allow%20...%20folder.html
Тоже ссылается на BROWSEINFO

Ну и тут - основное:
http://www.script-coding.info/WSH/Shell.html#3.18.

Где взять цифры для show-files?
Supermax вне форума  
 
Непрочитано 27.01.2008, 15:13
#6
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Если выбрана папка, то возвращается вла-объект, а если файл, то
; error: Automation Error. Description was not provided.

Файлы показывает начиная с 8192 кода.
Supermax вне форума  
 
Автор темы   Непрочитано 27.01.2008, 15:27
#7
Кулик Алексей aka kpblc
Moderator

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


Круто... Проверю. Но только вечером.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.01.2008, 01:04
#8
Кулик Алексей aka kpblc
Moderator

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


Нда... Факир был пьян и фокус не удался. Ошибка возвращается при попытке указания файла Ошибка в ISheellDispatch, то бишь сейчас неизлечимо Проверял на VB6. Придется снимать второй параметр с обработки
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.01.2008, 09:39
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Про 16384 еще здесь http://www.caduser.ru/cgi-bin/f1/board.cgi?t=21054YY
Там сказано "с отображением" файлов.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 28.01.2008, 11:31
#10
Кулик Алексей aka kpblc
Moderator

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


Все верно, файлы отображаются, но указать их невозможно Причем, похоже, ярлыки нормально обрабатываются (и, может, еще некоторые расширения).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.01.2008, 11:53
#11
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я бы сделал обработку ошибки и выбрасывал сообщение о необходимости указания только папки и по новой предлагал выбрать папку. Иногда надо видеть что внутри папки прежде чем ее выбирать.
Supermax вне форума  
 
Автор темы   Непрочитано 28.01.2008, 12:41
#12
Кулик Алексей aka kpblc
Moderator

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


В таком случае:
Код:
[Выделить все]
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-browsefolder
;;; *
;;; * 06/12/007 Версия 01.001.14.
;;; * 
;;; ************************************************************************
;;; на основе кода http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21054YY

(defun dwgru-browsefolder (title show-files / fun_browse res)
;;;  Функция получения пути (или файла)
;;;  Параметры вызова:
;;;	title		заголовок, печатаемый в окне. nil -> "". Допускаются
;;;			только строковые значения либо nil.
;;;	show-files	показывать файлы (t | nil)
;;;  Возвращаемое значение:
;;;	полный путь к указанной папке или файлу либо nil в случае нажатия Esc
;;; пользователем.
;;;  Обнаружен "баг": если в качестве результата указывается сетевая папка,
;;; сохраненная в NetHood, результат может быть неочевидным.
;;; Примеры вызова:
  ;|
(dwgru-browsefolder nil nil)	; вызвать окно показа только папок. В
	; заголовке окна ничего не пишется
(dwgru-browsefolder "Укажите папку установки" nil)	; Вызвать окно показа
	; папок. В заголовке окна пишется "Укажите папку установки"
(dwgru-browsefolder nil t)	; вызвать окно, с показыванием всех файлов
	; (вроде бы в соответствии с настройками Проводника).
|;
  (defun fun_browse (title show-files / shlobj folder fldobj outval)
    (setq shlobj (vla-getinterfaceobject
                   (vlax-get-acad-object)
                   "Shell.Application"
                   ) ;_ end of vla-getinterfaceobject
          folder (vlax-invoke-method
                   shlobj
                   'browseforfolder
                   0
                   (cond
                     (title)
                     (t "")
                     ) ;_ end of cond
                   (cond (show-files 16384)
                         (t 0)
                         ) ;_ end of cond
                   ) ;_ end of vlax-invoke-method
          ) ;_ end of setq
    (if folder
      (progn
        (setq fldobj (vlax-get-property folder 'self)
              outval (vlax-get-property fldobj 'path)
              ) ;_ end of setq
        (vlax-release-object folder)
        (vlax-release-object fldobj)
        ) ;_ end of progn
      ) ;_ end of if
    outval
    ) ;_ end of defun

  (while (vl-catch-all-error-p
           (vl-catch-all-apply
             '(lambda ()
                (setq
                  res (fun_browse title show-files)
                  ) ;_ end of setq
                ) ;_ end of lambda
             ) ;_ end of vl-catch-all-apply
           ) ;_ end of vl-catch-all-error-p
    (alert "Вы не можете указывать файлы и ярлыки к ним!")
    ) ;_ end of while
  res
  ) ;_ end of defun
Но лично мне этот вариант как-то не очень нравится
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.01.2008, 13:40
#13
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Тогда возьми и сделай с ALLOsys.dll Там еще есть функция с папкой. Все равно пока альтернативы множественного выбора файлов нет, так пусть будет одинаково.
Supermax вне форума  
 
Непрочитано 28.01.2008, 13:45
#14
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Еще есть возможность автоматом переулючаться на выбор файла если стоит ... Т) Только уже с другим СОМ объектом. Можно соединить две функции в одну, но тогда ALLOsys тебе не объехать.
Supermax вне форума  
 
Непрочитано 15.07.2019, 12:38
#15
tujn08


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


Здравствуйте!
А диалог с выбором файла как вызвать?
Не удобно 50 папок раскрывать с самого начала.
Хочется копипастить путь до конечной папки.

Спасибо!

----- добавлено через ~3 мин. -----
нашел как. это бит 16.
а есть весть список?

----- добавлено через ~7 мин. -----
512 - запретить кнопку "Создать папку",
1 - не отображать Корзину,
16 - отображать EditBox для ввода полного пути с клавиатуры и т.п. Подробнее - см. MSDN
1 - Показывать скрытые файлы и папки.
2 - Скрывать расширения для зарегистрированных типов файлов.
16384 - Состояние пиктограмм в списке просмотра Проводника Windows
128 - Открыть двойным или одиночным щелчком мыши
32768 - Подтверждение очистки корзины
262144 - Состояние скрывать защищенные файлы операционной системы.
tujn08 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Библиотека функций > DwgRuLispLib: Выбор папки или файла.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
Напишите прогу или макрос Kosenko Sasha Программирование 6 24.02.2007 13:13
чтение данных из файла Александер Программирование 6 08.09.2005 10:24