Закрыть все документы в окне КОМПАС без предупреждения

Автор sorockinalex, 21.11.07, 17:52:15

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

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

sorockinalex

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

sorockinalex

нашёл кое-что    iDoc.ksCloseDocument, но почему-то не закрывает текущий iDoc, хотя
iKompas.getHandle... определяет!

sorockinalex

теперь нужна функция для определения количества открытых документов в компасе! подскажите пожалуйста! очень надо! всё перерыл уже!! и СДК смотрел, не нашёл!
только нашёл вот что: iDoc.ksGetDocumentPagesCount, но это не то...

Slaviation

См. интерфейс ksIterator, его метод ksIterator::ksCreateIterator. Обрати внимание на параметр этого метода tipSearch, и его возможные значения: DOCUMENT_OBJ, D3_DOCUMENT_OBJ, SPC_DOCUMENT_OBJ, ALL_DOCUMENTS + пример использования интерфейса ksIterator в прилагаемых к SDK степах.      

sorockinalex

Ответ для yarikv
С этим не разобрался. Учусь по исходникам. Так и не понял структуру хелпа и вообще что за чем там.
К примеру, понятно что сначала
iKompas:KompasObject
затем iKompas:=CompasObject(Create.....)
Затем можно уже методом тыка писать iKompas. - и тут после ввода точки всплывает подсказка.
А вот что тут и чем обзывается в этих строчках - хз. Что такое интерфейс? Что такое метод? Как они связаны?
Уже программу почти сделал, вставку врагментов, а в этом, самом основном не разобрался, поэтому самому что-то сделать немозмоно. Смотрю хелп и не знаю как с чего начать. Ну и что, что мне теперь известен ksIterator?.
...Осталось сделать самое сложное - создание базы данныйх фрагментов, как-то определить текстовым элементам на фрагменте их идентификаторы, чтобы при вставке (или по двойному клику на элементе)выводить форму для их ввода. Думаю, даже не базу данных, а использовать компасовскую библиотеку фрагментов.

yarikv

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

sorockinalex

Сам компас мне нравится своими идеями и отсюда - удобством. Но от версии к версии глюков всё больше, весит больше, а этот вес не соответствует функциональности. Почему начал писать свою программу - пришли они к нас рекламировать компас-электрик. Такое ощущение, что сделан он вообще за один месяц на коленке. Совсем неудобный и разобраться в нём что и как невозможно. А нам много не надо - вставка фрагментов с параметризацией, расстановка зон у элемента (10Q2 - 10 лист, вторая зона) по евро стандарту, генерация ведомости покупных и т.п. За неделю дошёл до вставки фрагментов. Думаю, ещё месяца 2 и будет готова для пробного использования.

Slaviation

ЦитироватьНу и что, что мне теперь известен ksIterator?

var
  iIterator: ksIterator;
  pDoc: Reference;


  iIterator := ksIterator(iKompasObject.GetIterator);
  if iIterator <> nil then
    if iIterator.ksCreateIterator(ALL_DOCUMENTS, 0) then
    begin
      pDoc := iIterator.ksMoveIterator( 'F' ); // Ссылка на первый найденный документ
      while pDoc <> 0 do
      begin   
        pDoc := iIterator.ksMoveIterator( 'N' ); // и на все последующие
      end;
      iIterator.ksDeleteIterator;
    end;

sorockinalex

Вот спасибо огромное!!! Премного благодарен. А то мне приходилось извращаться вот так:

  Shellexecute(0,'open',PChar(ReadIni ('PATHS','KOMPAS.exe')),nil,nil,SW_SHOWMINIMIZED);

  Repeat
    try
      iKompas:= KompasObject(GetActiveOleObject('Kompas.Application.5'));
    except
    end;
  Until  iKompas<>nil;

  try
  iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
  except
  end;

  while iDoc<>nil do
    begin
      sleep(2000);
      iDoc.ksCloseDocument;
      iDoc := ksDocument2D ( iKompas.ActiveDocument2D );
      sleep(200);
    end;

  ShowWindow (iKompas.ksGetHWindow,SW_SHOWMAXIMIZED);

НЕЙРОН

import pythoncom
from win32com.client import Dispatch, gencache

import LDefin2D
import MiscellaneousHelpers as MH

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
MH.iKompasObject  = kompas_object

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application


Documents = application.Documents

## Закрыть все документы в Компасе:
while 1>0:
    #  Получим активный документ
    kompas_document = application.ActiveDocument
    if kompas_document != None:
        kompas_document.Close(0)
    else:
        break