Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2011, 13:57   #1
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию Проверить открыт ли документ Word

Здравствуйте, подскажите, как сделать проверку открыт ли конкретный документ Word ли нет.
Что-то типо, если документ Акт_осмотра_1 открыт, то мы него закрываем.
a_n_n_a вне форума Ответить с цитированием
Старый 04.07.2011, 17:01   #2
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

Если не забыл, то поищите инф-ю про функцию CreateOleObject (в Delphi) и почитайте про COM в Word (в справке Word описана вся модель).
P.S.
Конкретно не скажу, т.к. сейчас не исп-ю Delphi.
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 04.07.2011, 18:28   #3
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

можно проверіть по заголовку
spydark91 вне форума Ответить с цитированием
Старый 04.07.2011, 20:27   #4
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Простенький пример
Можно попробовать следить за документом так:

Цитата:
procedure TForm1.Timer1Timer(Sender: TObject);
var
h: HWND;
begin
//Ищем окно Winword
h:=FindWindow(nil, 'Акт_осмотра_1.doc - Microsoft Word');
Если окно найдено c текущим документом то закрываем Winword
if h<>0 then
SendMessage(h, WM_CLOSE, 0, 0);
end;

Последний раз редактировалось Aliens_wolfs; 04.07.2011 в 20:30.
Aliens_wolfs вне форума Ответить с цитированием
Старый 05.07.2011, 07:24   #5
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Код:
if h<>0 then
что-то он у меня на это условие не реагирует совсем.... если документ открыт, все равно h=0......
a_n_n_a вне форума Ответить с цитированием
Старый 05.07.2011, 07:44   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Файл Задачи C .doc
При открытии файла, формируется файл восстановления:
~$дачи С .doc
В воей проге, заменяете первые буквы названия файла на ~$ и делаете проверку.
Будет ли работать на других платформах и с другими версиями Офиса, не знаю, но с Офис 2003 прокатывает.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.07.2011, 09:34   #7
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Цитата:
Файл Задачи C .doc
При открытии файла, формируется файл восстановления:
~$дачи С .doc
В воей проге, заменяете первые буквы названия файла на ~$ и делаете проверку.
Будет ли работать на других платформах и с другими версиями Офиса, не знаю, но с Офис 2003 прокатывает.
Что-то я ниче не поняла)))
А предыдущий код, мне понравился, все понятно, только не работает....(

Все, разобралась с кодом, только теперь другая проблема...
У меня имя файла формируется из нескольких Edit'ов, я пыталась засунуть это имя в переменную, а переменную уже в FindWindow... Но что-то не получается, подскажите, пожалуйста, как правильно сделать)

Последний раз редактировалось a_n_n_a; 05.07.2011 в 10:01.
a_n_n_a вне форума Ответить с цитированием
Старый 05.07.2011, 10:57   #8
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Цитата:
У меня имя файла формируется из нескольких Edit'ов, я пыталась засунуть это имя в переменную, а переменную уже в FindWindow... Но что-то не получается, подскажите, пожалуйста, как правильно сделать)
Покажите, как Вы это делаете.
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?
Wicort вне форума Ответить с цитированием
Старый 05.07.2011, 12:25   #9
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуйте без разрешения .doc. Если документ только что с формирован и не сохранен то заголовок будет без разрешения.
Или посмотрите на заголовок открытого Winworda с вашим документом и впишите его.
пример:
h:=FindWindow(nil, 'Документ1 - Microsoft Word');

Последний раз редактировалось Aliens_wolfs; 05.07.2011 в 12:32.
Aliens_wolfs вне форума Ответить с цитированием
Старый 05.07.2011, 12:52   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

2 способа:
1 - с помощью компонента TWordApplication (закладка Servers)
2 - ч/з OleVariant
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    WordApplication1: TWordApplication;
    Button1: TButton;
    ListBox1: TListBox;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses ComObj;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  ind: OleVariant;
begin
  ListBox1.Items.Clear;
  with WordApplication1 do
  try
    Connect;
    if Documents.Count = 0 then
      ListBox1.Items.Add ('Ни один документ не открыт')
    else
      for i := 1 to Documents.Count do begin
        ind := i;
        ListBox1.Items.Add (Documents.Item(ind).Name);
      end;
  except
    ListBox1.Items.Add ('Word не запущен')
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  WA: OleVariant;
begin
  ListBox1.Items.Clear;
  try
    WA := GetActiveOleObject('Word.Application');
    if WA.Documents.Count = 0 then
      ListBox1.Items.Add ('Ни один документ не открыт')
    else
      for i := 1 to WA.Documents.Count do
        ListBox1.Items.Add (WA.Documents.Item(i).Name);
  except
    ListBox1.Items.Add ('Word не запущен')
  end;
end;

end.
Ну, дальше сами

Цитата:
если документ Акт_осмотра_1 открыт, то мы него закрываем.
А что если документ открыт не Word'ом (еще есть нюанс, если на компе одновременно установленно несколько Word'ов (например 2003 и 2007)) или используется Portable-версия.

Последний раз редактировалось Sibedir; 05.07.2011 в 13:08.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
офис 2003 или офис 2010 -открыт документ valerij Microsoft Office Excel 3 14.05.2011 11:02
нужно узнать, открыт ли документ под Excel или OO Calc mjr27 Microsoft Office Excel 1 05.04.2011 00:26
ccылка на документ word voldemen HTML и CSS 3 29.04.2010 14:05
Открыть документ WORD Maxx Microsoft Office Excel 0 15.02.2010 17:37
Не открывается документ Word komar73 Microsoft Office Word 3 30.05.2009 22:17