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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите переделать dvb под Autocad 2014

Помогите переделать dvb под Autocad 2014

Ответ
Поиск в этой теме
Непрочитано 07.04.2014, 13:24 #1
Помогите переделать dvb под Autocad 2014
TechNick
 
Инженер
 
Нижний Новгород
Регистрация: 19.04.2006
Сообщений: 15

Добрый день. Одним бывшем сотрудником была написана на добровольных началах программа на VBA для Autocad 2009. После установки в организации Autocad 2014 программа работать перестала.
Суть в следующем. Пользуемся одним программным комплексом под Autocad который умеет в том числе вставлять стандартные форматки листов со штампом в модель. Форматки вставляются блоками, которые имеют имя типа f12 для 297х420, f24 для 594х841 и т.д. Далее пользуемся сабжевой VBA программой, которая может запускаться двумя кнопками. При нажатии на первую программа находит в модели все блоки с форматами листов и выводит в окне их список из которого пользователь выбирает нужные и после нажатия ОК программа создаёт по размерам блоков листы с вписанными видовыми экранами. При нажатии на вторую программа просит тыкнуть мышкой в нужный блок в модели и создаёт по его размерам лист с видовым экраном. Параметры листа настраиваются VBA программой под DWF принтер с именем MyDWF.
После установки программы на Autocad 2014 при попытке запуска по первой кнопке создаётся лист по размеру блока, а дальше вываливается ошибка в строке:
Set pviewportObj = ThisDrawing.ActiveLayout.Block.Item(1) 'Пытаемся получит видовой экран
При запуске программы второй кнопкой ошибок не получаем, но точно так же создаётся только лист и на этом всё останавливается.
Помогите пожалуйста исправить.
Прикладываю архив с необходимыми файлами, а так же dwg файл с созданными форматками в Autocad 2009, чтобы понять о чём речь.

Вложения
Тип файла: zip CreateFormat.zip (107.8 Кб, 156 просмотров)

Просмотров: 10759
 
Непрочитано 07.04.2014, 19:17
#2
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,481
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от TechNick Посмотреть сообщение
программа создаёт по размерам блоков листы с вписанными видовыми экранами.
В чужом коде ковырятся - неблагодарное занятие.
Может легче сразу печатать из модели ? Зачем листы то создавать ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 07.04.2014, 20:58
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Ах, моё родное!
trir вне форума  
 
Непрочитано 07.04.2014, 21:06
#4
gomer

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


Цитата:
Сообщение от trir Посмотреть сообщение
Ах, моё родное
ога!, попался быдлокодер!
gomer вне форума  
 
Непрочитано 07.04.2014, 21:13
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Ничего ты не понимаешь в колбасных обрезках! Это шедевр!

Замени на:
Код:
[Выделить все]
    Dim center(0 To 2) As Double
    center(0) = 3: center(1) = 3: center(2) = 0
    Set pviewportObj = ThisDrawing.PaperSpace.AddPViewport(center, 1, 1)
Может заработает...
Нету под рукой 2014, кстати а какая разрядность?
trir вне форума  
 
Непрочитано 07.04.2014, 21:21
#6
Кулик Алексей aka kpblc
Moderator

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


Может, дело в настройках AutoCAD? Например, в галочке "создавать новый ВЭ при создании листа"?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.04.2014, 21:22
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Может, дело в настройках AutoCAD? Например, в галочке "создавать новый ВЭ при создании листа"?
Очень может быть!
trir вне форума  
 
Автор темы   Непрочитано 07.04.2014, 21:55
#8
TechNick

Инженер
 
Регистрация: 19.04.2006
Нижний Новгород
Сообщений: 15
<phrase 1=


Цитата:
Сообщение от trir Посмотреть сообщение
Ах, моё родное!
Вах, даже не надеялся что найду тут. Пользуем твою прогу всей конторой и жить без неё не можем. Огромная признательность за труды.
Разрядность x64. Завтра попробую поменять галочку. Спасибо!
TechNick вне форума  
 
Непрочитано 07.04.2014, 22:44
#9
Дима_

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


Цитата:
Сообщение от TechNick Посмотреть сообщение
Пользуем твою прогу всей конторой и жить без неё не можем.
Нет чтоб изначально автора поискать Offtop: с подарками. Не уважаете Вы чужой труд - а на добровольных началах он вдвойне этого достоин - я без понимания "правильности" ситуации в чужой код из принципа не полезу.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.04.2014, 22:49
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Код был написан по просьбе на корпоративном форуме, просто ради практики в VBA (как раз тогда интенсивно изучал), в результате им пользуются в филиале в Нижнем Новгороде, а филиале в Екатеринбурге (где он был написан) - о нём никто не знает

TechNick может организуешь письмо в Екб-филиал типа "спасибо за помощь" - что бы там начальство прониклось just for lulz
trir вне форума  
 
Автор темы   Непрочитано 07.04.2014, 23:07
#11
TechNick

Инженер
 
Регистрация: 19.04.2006
Нижний Новгород
Сообщений: 15
<phrase 1=


Цитата:
Сообщение от trir Посмотреть сообщение
TechNick может организуешь письмо в Екб-филиал типа "спасибо за помощь" - что бы там начальство прониклось just for lulz
Было предложение. Заглохло
Руководство не впечатлилось. Зато все сотрудники только и просят поставить им кнопочки в случае переустановки

----- добавлено через ~9 ч. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Может, дело в настройках AutoCAD? Например, в галочке "создавать новый ВЭ при создании листа"?
Галочка стояла. Хоть ставь галочку, хоть убирай всё равно эта ошибка возникает
TechNick вне форума  
 
Непрочитано 08.04.2014, 15:59
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


тогда моё предложение из поста №5
trir вне форума  
 
Автор темы   Непрочитано 09.04.2014, 11:30
#13
TechNick

Инженер
 
Регистрация: 19.04.2006
Нижний Новгород
Сообщений: 15
<phrase 1=


Цитата:
Сообщение от trir Посмотреть сообщение
Ничего ты не понимаешь в колбасных обрезках! Это шедевр!

Замени на:
Код:
[Выделить все]
    Dim center(0 To 2) As Double
    center(0) = 3: center(1) = 3: center(2) = 0
    Set pviewportObj = ThisDrawing.PaperSpace.AddPViewport(center, 1, 1)
Может заработает...
Нету под рукой 2014, кстати а какая разрядность?
Теперь ругается на Dim center(0 To 2) As Double говорит Compile error: Duplicate declaration in current scope
TechNick вне форума  
 
Непрочитано 09.04.2014, 19:35
#14
giprsk


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


Цитата:
Сообщение от trir Посмотреть сообщение
Нету под рукой 2014, кстати а какая разрядность?
Перестала исполняться функция dvb при переходе с 32bit на ACAD2014 64bit Win7. Насколько я понимаю проблема в считывании команд из библиотеки user32 Windows.
Библиотека "user32.dll"для 32bit находится в папке C:\Windows\System32 , а для 64bit в C:\Windows\SysWOW64.
Подскажите, пожалуйста, что надо сделать, чтобы функция dvb заработала?
Изображения
Тип файла: jpg Снимок_.JPG (70.7 Кб, 244 просмотров)
giprsk вне форума  
 
Непрочитано 09.04.2014, 21:51
1 | #15
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Замени:
Set pviewportObj = ThisDrawing.ActiveLayout.Block.Item(1)
На:
Set pviewportObj = ThisDrawing.PaperSpace.AddPViewport(center, 1, 1)

giprsk почитай

Последний раз редактировалось trir, 09.04.2014 в 21:56.
trir вне форума  
 
Автор темы   Непрочитано 10.04.2014, 08:03
#16
TechNick

Инженер
 
Регистрация: 19.04.2006
Нижний Новгород
Сообщений: 15
<phrase 1=


Цитата:
Сообщение от trir Посмотреть сообщение
Замени:
Set pviewportObj = ThisDrawing.ActiveLayout.Block.Item(1)
На:
Set pviewportObj = ThisDrawing.PaperSpace.AddPViewport(center, 1, 1)
Заменить только это или и то что в #5?
В любом случае ругается на Dim pviewportObj As IAcadPViewport2 'Новый видовой экран
говорит Compile error: User-defined type not defined.
TechNick вне форума  
 
Автор темы   Непрочитано 10.04.2014, 08:23
#17
TechNick

Инженер
 
Регистрация: 19.04.2006
Нижний Новгород
Сообщений: 15
<phrase 1=


Кстати под Autocad 2012 x64 ругается вот так.
Помогает закоментировать эту и следующую строку, но штамп видовой экран не обходит
Изображения
Тип файла: jpg err.jpg (217.5 Кб, 1014 просмотров)

Последний раз редактировалось TechNick, 10.04.2014 в 08:34.
TechNick вне форума  
 
Непрочитано 10.04.2014, 08:41
#18
kikoko


 
Регистрация: 12.12.2004
***
Сообщений: 6


Off Topic !
Идея : для x64 -> ObjectID32 (так как LayoutId x86 -> LayoutId32 x64 ; ObjectIdToObject x86 -> ObjectIDToObject32 x64 и т.д)
kikoko вне форума  
 
Непрочитано 10.04.2014, 12:18
#19
giprsk


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


Цитата:
Сообщение от trir Посмотреть сообщение
giprsk почитай
Спасибо большое за подсказку. Добавил PtrSafe и дело пошло. Однако функция всё равно не работает. Может не понимает, что такое hWnd? К сожалению, не умею отлаживать VBA
Код:
[Выделить все]
Option Explicit

Private Declare PtrSafe Function LoadImage Lib "user32" Alias "LoadImageA" _
       (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, _
        ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long

Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
       (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
        LParam As Any) As Long

Private Declare PtrSafe Function SetWindowText Lib "user32" Alias "SetWindowTextA" _
       (ByVal hWnd As Long, ByVal lpString As String) As Long

Public Declare PtrSafe Function GetParentU Lib "user32" Alias "GetParent" _
       (ByVal hWnd As Long) As Long

Private Function SVR_GetACADHandle(ByVal dwg_handle As Long) As Long
  Dim hwndtmp As Long
  hwndtmp = GetParentU(dwg_handle)
  If hwndtmp > 0 Then
    SVR_GetACADHandle = GetParentU(hwndtmp)
  End If
End Function

Public Function SetWindowIcon(hWnd As Long, IconPath As String) As Boolean
  Dim hIcon As Long
  hIcon = LoadImage(0&, IconPath, 1, 0, 0, &H10)
  If hIcon <> 0 Then
    Call SendMessage(hWnd, &H80, 0, ByVal hIcon)
    SetWindowIcon = True
  End If
End Function

''Устанавливает пользовательскую строку, соответствующую названию текущего профиля, и значок в заглавие окна Автокада

Sub ChangeProfileIcon()

  On Local Error GoTo ErrChIcon

  Dim ProfStr As String
  Dim AcadHndl As Long
  ProfStr = ThisDrawing.GetVariable("CPROFILE")
  AcadHndl = SVR_GetACADHandle(ThisDrawing.hWnd)
  SetWindowText AcadHndl, ProfStr
  SetWindowIcon AcadHndl, "C:\ACAD_NEW.ico"

  
ErrChIcon:
End Sub
Изображения
Тип файла: jpg ошибка.JPG (103.8 Кб, 206 просмотров)
giprsk вне форума  
 
Непрочитано 10.04.2014, 14:17
1 | #20
Кулик Алексей aka kpblc
Moderator

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


Советую прочитать (дополнительно) http://adn-cis.org/vbamacro-compatib...ad2014x64.html
P.S. В коде не копался
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите переделать dvb под Autocad 2014

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCAD 2014+Raster Design 2014. Постоянная прединсталляция при запуске обычным пользователем! Westroy AutoCAD 4 14.05.2014 10:27
AutoCad 2014 (2013, MEP2013). Win 8. Тормозит при простейших операциях, почему? Prostofoxit AutoCAD 7 12.01.2014 11:44
Проблема с XREF в Autocad 2005(2004). Помогите, кто знает. 0leg AutoCAD 10 13.01.2006 17:53