Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Как узнать, когда пользователь закроет документ?

Ответить
Настройки темы
Delphi - [решено] Как узнать, когда пользователь закроет документ?

Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Word:=CreateOleObject('Word.Application');
Word.Documents.Open(FileName:=GetTempDirectory+filename+'.tmp',ReadOnly:=true);
Word.visible:=True;
Doc:=Variant(Word).ActiveDocument;
while doc=filename+'.tmp' do  //не нравится мне это... но другого способа не нашел.
   try
    Doc:=Word.ActiveDocument;
   except
    Doc:='';
   end;
дальше мой код...
Сделал вот так, все работает, но процессор сильно грузит и память набирает. Есть ли другой способ сделать это?

Отправлено: 10:55, 01-11-2011

 

Новый участник


Сообщения: 40
Благодарности: 19

Профиль | Отправить PM | Цитировать


Это неправильно: при переключении на другой документ получите бяку.
А вообще нормального способа определить, когда офис закрывает документ извне, не существует.
Только когда открывается и редактируется СУЩЕСТВУЮЩИЙ файл, можно проверить его на доступность для записи.

Отправлено: 11:07, 01-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


AlexVol, Бяку не получал. Файл открывается существующий, я (его предварительно копирую во временную папку). Как проверить его доступность для записи?

Отправлено: 12:01, 01-11-2011 | #3


Новый участник


Сообщения: 40
Благодарности: 19

Профиль | Отправить PM | Цитировать


Попробовать открыть с правом записи в монопольном режиме. Если получается исключение - файл занят.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:57, 01-11-2011 | #4


Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


AlexVol, попробую, но мне кажется будет также грузить проц. Я ведь правильно понимаю, что это нужно сделать в цикле?

Отправлено: 14:04, 01-11-2011 | #5


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


game_Racer, Сделайте в цикле
Код: Выделить весь код
Sleep(1000); // 1секунда
Так вы разгрузите процессор. Можно увеличить период засыпания цикла.

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:11, 01-11-2011 | #6


Аватара для Project1

Пользователь


Сообщения: 69
Благодарности: 5

Профиль | Отправить PM | Цитировать


есть нормальный способ:
Код: Выделить весь код
unit Unit1;

interface

uses
  WordXP,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs; 

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure WordApplicationDocumentBeforeClose(ASender: TObject;
      const Doc: _Document; var Cancel: WordBool);
  private
    { Private declarations }
    WordApplication1: TWordApplication;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  WordApplication1:=TWordApplication.Create(Self);
  WordApplication1.Visible:=True;
  WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  WordApplication1.OnDocumentBeforeClose:=WordApplicationDocumentBeforeClose;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  WordApplication1.Quit;
  WordApplication1.Free;
end;

procedure TForm1.WordApplicationDocumentBeforeClose(ASender: TObject;
  const Doc: _Document; var Cancel: WordBool);
begin
  ShowMessage('WordApplicationDocumentBeforeClose');
end;

end.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:57, 01-11-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Как узнать, когда пользователь закроет документ?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как узнать - обладет ли текущий пользователь правами Админа? NewOLDi AutoIt 3 28-05-2010 20:56
Разное - узнать когда я дефрагментировал диск AlexM Microsoft Windows 2000/XP 0 06-02-2010 09:25
как узнать по каким папка лазил пользователь vova_king Хочу все знать 1 09-03-2009 18:29
Как узнать когда появиться та или иная прога в PORTS? kaEwituS Новости и флейм из мира *nix 14 22-11-2006 19:32
как узнать кто/чем/когда пользовался из (локальной)сети? Guest Microsoft Windows NT/2000/2003 7 06-11-2002 16:54




 
Переход