• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Запретить сохранять файлы (состояние) при выходе из Компас

Автор SerGoVec, 17.02.16, 17:30:46

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

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

SerGoVec

Всем привет!
Можно ли, прораммно запретить Компасу, сохранять состояние открытых в нем документов, при выходе из него. Когда заново открываем Компас в нем не должно быть ранее открытых документов. Если можно, то как?)

Аналог: Сервис - Параметры - Система - Файлы - Сохранение конфигурации (состояние открытых документов - не сохранять), только программно.

Можете попробовать:
ISystemSettings.FilesAutoSaveSwitchOn - автоматическое сохранение файлов документов;
ISystemSettings.FilesBackupPrevCopySwitchOn - автоматическое сохранение предыдущей копии файла документа.

SerGoVec


Тогда в момент запуска Компаса запретить открытие файлов с помощью события IKompasObjectNotify.BeginOpenDocument, по событию IKompasObjectNotify.BeginOpenFile определять, что Компас загрузился и открытых документов нет.

SerGoVec

Сделал так:

подписался на сабытие ApplicationEvent.BeginCloseAllDocument (пример есть в ...SDK\Pascal\Delphi\step12)
и перебрал все открытые в компасе документы, с целью закрыть их.
При закрытии документа, непосредственно перед выходом из Компаса, состояния открытых документов не запоминаются. При новом открытии компаса, открытых документов, с которыми вы ранее работали не будет.

Код:
function ApplicationEvent.BeginCloseAllDocument(): WORDBOOL;
var
  collectionDoc: IDocuments;
  i: Integer;
begin

  GetNewKompasAPI;
  if KompasAPI <> nil then
  begin
    collectionDoc := KompasAPI.Documents;

    for i := (collectionDoc.Count)-1 downto 0  do
    begin
      collectionDoc.Item.Close(kdDoNotSaveChanges);
    end;
  end;
  Result := True;

end;

где GetNewKompasAPI, это:

procedure GetNewKompasAPI();
var
  disp: IDispatch;
begin

  if KompasAPI = nil then
  begin
    disp := IDispatch(CreateKompasApplication);
    KompasAPI := disp as IApplication;
  end

end;

msvteh

collectionDoc.Item[i ].Close(kdDoNotSaveChanges);
скобок [i ] нет.
изменённый документ не сохраняется, мне по душе PromptToSaveChanges

SerGoVec

Цитата: Sabahs от 01.03.16, 18:08:10
Тогда в момент запуска Компаса запретить открытие файлов с помощью события IKompasObjectNotify.BeginOpenDocument, по событию IKompasObjectNotify.BeginOpenFile определять, что Компас загрузился и открытых документов нет.

Как это реализовать? Допустим в общую переменную я запишу состояния начала работы компаса и по этому значению запрещу открывать документы. Но как потом определить, что документы теперь можно открывать, в какой момент времени, по какому событию.


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

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


Я за Вас писать не буду, поверьте, мне есть над чем думать.
PS. Если учесть, что это просто элементарно.
ЦитироватьНо как потом определить, что документы теперь можно открывать, в какой момент времени, по какому событию.
По Вашему, событию.

SerGoVec

Цитата: Sabahs от 01.03.16, 18:08:10
Тогда в момент запуска Компаса запретить открытие файлов с помощью события IKompasObjectNotify.BeginOpenDocument, по событию IKompasObjectNotify.BeginOpenFile определять, что Компас загрузился и открытых документов нет.

точно, спасибо! :)