Программа срабатывает один раз.

Автор Николай, 30.12.11, 23:31:54

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Николай

1.Запускаю КОМПАС
2.Создаю формат А4 с рамкой.
3.Запускаю программу на VB:

Private Sub Command1_Click()
    Set Kompas = CreateObject("KOMPAS.Application.5")
       Dim ksDocument2D As Object 'Document2D как объёкт
    Set ksDocument2D = Kompas.ActiveDocument2D 'активизировать документ
     ksDocument2D.ksArcBy3Points 68, 166, 85, 238, 102, 166, 1 'дуга
End Sub

Рисует всё, что хочешь! Но один раз. При запуске программы повторно- пишет, что ActiveX компонент не может создать объект. Методом проб и ошибок определил, что если Компас закрыть, а затем снова открыть, и далее- п.2 то  всё получается. Выходит, программа что-то прописывает в настройках Компаса?
Помогите разобраться...


Николай

Не секрет. Программа рассчитывает калибры и строит чертёж, годный для выдачи в инструментальный цех. Вот сейчас- чтобы выдать два чертежа- придётся перегружать Компас.Один из вариантов рассчётной программы я уже выкладывал на форуме, но как там я реализовал чертёж- мне не нравится.

Николай посмотрите пример \SDK\Basic\ksContrl
Оснавная Ваша ошибка у Вас нет проверок на сушествование объекта и Вы второй раз пытаетесь его создать, хотя им уже можно пользоваться.

Николай

 Посмотрел \SDK\Basic\ksContrl. Без подробных комментариев тяжело...
И так и эдак пытался сделать проверку на существование проекта- не получилось. Даже заводские программисты не смогли помочь. Вопрос остался открытым...

Можно попробовать так, но работоспособность не гарантирую, т.к. пишу на другом языке и тонкости VB не знаю.
Private Sub Command5_Click()
If Kompas Is Nothing Then
    ' запустить График и создать соответствующий ему объект
    Set Kompas = CreateObject("KOMPAS.Application.5")
End If
  If Not Kompas Is Nothing Then
    Kompas.Visible = True
    Dim ksDocument2D As Object
    Set ksDocument2D = Kompas.Document2D
    If Not ksDocument2D Is Nothing Then
      Dim ksDocumentParam As Object
      Set ksDocumentParam = Kompas.GetParamStruct(ko_DocumentParam)
      If Not ksDocumentParam Is Nothing Then
        ksDocumentParam.Init
        ksDocumentParam.Type = lt_DocSheetStandart
        ksDocument2D.ksCreateDocument ksDocumentParam
        ksDocument2D.ksArcBy3Points 68, 166, 85, 238, 102, 166, 1 'дуга
      End If
    End If
  End If
End Sub

Можно попробовать использовать компонент KGAX, пример \SDK\Basic\ksActiveX.

PS

Не знаю VB, но попробуйте повторить один в один пример из справки SDK:
Пример простейшей программы в среде VB, оформленной в виде ActiveX библиотеки КОМПАС

Dim iKompasObject As Object 'KompasObject
Dim iDocument2D As Object 'ksDocument2D

Public Function GetLibraryName() As String
  GetLibraryName = "Самая простая библиотека"
End Function

Public Sub ExternalRunCommand(ByVal command As Integer, ByVal mode As Integer, ByVal Kompas As Object)
Set iKompasObject = Kompas
If iKompasObject Is Nothing Then
Exit Sub
End If

Set iDocument2D = iKompasObject.ActiveDocument2D
If iDocument2D Is Nothing Then
Exit Sub
End If

iKompasObject.ksMessage "Строим отрезок!"
iDocument2D.ksLineSeg 10, 10, 100, 100, 1 ' x1, y1, x2, y2, тип линии - основная
End Sub

Функция ExternalRunCommand - аналог функции LibraryEntry. Ее наличие обязательно, так как именно ему передает управление КОМПАС при обращении к библиотеке. В данном случае она обеспечивает выдачу сообщения и построение одного единственного объекта чертежа - отрезка.

На мой взгляд проблема сдесь:
Set Kompas = CreateObject("KOMPAS.Application.5")
Раз Вы запускаете библиотеку из под Компаса то переменную Kompas нужно использовать переданную в функцию
ExternalRunCommand.

Насколько я понял речь идет о об EXE приложении.

Николай

Ругается сразу на первую строку:
If Kompas Is Nothing Then
пишет:
object required= объект потребовался.
Тут скорее какая- то системная непонятка, так как VB всего несколько строк...

Пока писал- получил ещё сообщения...

Николай

Да, в результате должно получиться EXE приложение.
Вот прикреплён файл того, что "срабатывает один раз".
Попробуйте...

PS

ЦитироватьНасколько я понял речь идет об EXE приложении.
Тогда нужно разбираться с:
KGAX - ActiveX компонент предназначен для использования во внешнем приложении и позволяет открывать и работать с документами системы КОМПАС в диалоге пользователя. При работе с документами, открытыми в ActiveX компоненте, доступно использование API интерфейсов системы КОМПАС. Кроме этого, для работы с KGAX разработаны интерфейсы этого элемента управления.
Компонент KGAX.ocx регистрируется при установке системы КОМПАС.

ЦитироватьДа, в результате должно получиться EXE приложение.
Вот прикреплён файл того, что "срабатывает один раз".
Попробуйте...
Попробовал, у меня вылетает ошибка:


Та же самая картина, причем Компас запускать не надо Вы его запускаете Set Kompas = CreateObject("KOMPAS.Application.5") и он весит в диспетчере задач, т.е. Вы никаким образом не контролируете процесс.

Николай

Такую ошибку выдаёт, если Компас не загружен и лист чертежа не создан.
Set Kompas = CreateObject("KOMPAS.Application.5")  не запускает Компас.
EXE работает и что делает, меня вполне устраивает( на первых порах).
Вот результат работы.Только повторить без перезагрузки Компаса не удаётся...

Цитировать
Set Kompas = CreateObject("KOMPAS.Application.5") не запускает Компас.
С этим не соглашусь, в качестве примера можете скачать приложение http://depositfiles.com/ru/files/cwsrz9q0p, оно работает по Вашему принципу, скриншот полного экрана здесь http://mariupolsapr.narod.ru/genkoleso.html
Если не верите запустите диспетчер задач, а затем свое приложение и нажмите на кнопку, и Вы увидите процесс Компаса запущенного в невидимом режиме. Если хотите чтобы он стал видимым, добавьте строку кода Kompas.Visible = True после Set Kompas = CreateObject("KOMPAS.Application.5") .

Николай

Скачать пример не удалось- дома попробую. Скриншот посмотрел.Убедительно.
Своё приложение без запущенного Компаса не работает.Попробовал запустить программу только с одной строкой: Set Kompas = CreateObject("KOMPAS.Application.5") .
Выдаёт ошибку "ActiveX component cen't create object".
Борис Николаевич, (и  PS) спасибо за ваши сообщения, выходы на работу по вызовам закончились, будем продолжать отдыхать, 10 -на работу.
         С наступающими очередными январскими праздниками вас!

Вас также с наступающими праздниками!
Запускал у себя без Компаса, получилась картина показанная на скриншоте. Также не заметил у вас описание переменной Kompas, хотя может она, где-то описана Dim Kompas As Object. В лубом случае Вам нужно разбираться с этим проектом \SDK\Basic\ksContrl.