Проблема с эвентом BeginSaveAsDocument

Автор Solaris, 18.12.18, 08:06:56

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

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

Solaris

Привет всем.
Задача - сделать собственное окно сохранения, соответственно пишу обработчик события BeginSaveAsDocument.

IApplicationPtr gKompasApplication;
STDMETHODIMP_(VARIANT_BOOL) DocumentEvent::XDocumentFileNotify::BeginSaveAsDocument()
{
  METHOD_PROLOGUE_EX_(DocumentEvent, DocumentFileNotify)
  CSaveAsDlg dlg; //мое окно сохранения, генерирует путь к файлу, больше ничего не делает
  EnableTaskAccess( 0 );
  if (dlg.DoModal() == IDOK)
  {
    char cPath[MAX_PATH];
    sprintf(cPath, "%s", dlg.GetFilePath().c_str());
    IKompasDocumentPtr curDoc = gKompasApplication->ActiveDocument;
    curDoc->SaveAs(cPath);
  }
  EnableTaskAccess( 1 );
  return VARIANT_FALSE; //чтобы не появлялось стандартное окно сохранения
}

Однако после выхода из эвента имя документа снова сбрасывается на "Деталь БЕЗ ИМЕНИ1", как будто сохранения и не было.
Пробовал делать по другому:

curDoc->SaveAs(cPath);
curDoc->Close(kdDoNotSaveChanges);
gKompasApplication->Documents->Open(cPath, VARIANT_TRUE, VARIANT_FALSE);

Тогда сохранение первой детали происходит нормально, а если создать и сохранить вторую деталь, то после сохранения автоматически снова вызывается событие "BeginSaveAsDocument" и так бесконечно.
Как правильно сохранить деталь под новым именем?

Всё правильно делает, можно попробовать вариант выноса Вашего диалога сохранения в отдельную команду, которая будет вызываться из обработчика через PostMessage функцией ILibrary.Execute.

Solaris

Цитироватьможно попробовать вариант выноса Вашего диалога сохранения в отдельную команду, которая будет вызываться из обработчика через PostMessage функцией ILibrary.Execute.
Не помогло, результат тот же.

В своей команде, присвоили имя и сохранили.
IDocument3D.SetFileName(PWideChar(FileName));
IDocument3D.Save;

Solaris

Получилось нормально сохранить путем выноса функции сохранения в отдельную команду и вызов через iLibrary->Execute, главное - задать третий параметр как TRUE для отложенного выполнения.

PostMessage и есть отложенное выполнение, которое даёт возможность выйти из обработчика события.

333

Нужно обрабатывать другое событие
См ksKompasObjectNotify::BeginRequestFiles
Здесь можно поднять свой диалог и вернуть имя файла

333

Хотя нет для простого сохранения не работает

333

Предыдущее сообщение не туда написал