Форум: "Начинающим";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];
ВнизУдаление экземпляра объекта Найти похожие ветки
← →
Burger (2009-12-18 11:19) [0]При работе с файлами Word начинаю работу так:
var
WordApp: OLEVariant;
...
{ Create the OLE Object }
try
WordApp := CreateOLEObject("Word.Application");
except
on E: Exception do
begin
E.Message := "Word is not available.";
raise;
end;
end
не вдаваясь в дальнейшую с ним работу ...
В конце работы пытаюсь удалить WordApp
{ Quit Word }
WordApp.Quit;
WordApp := Unassigned;
Все взято из примеров. Однако компилятор выдает ошибку "Metod "Unassigned" not supported by automation object. Та как его всеже уничтожить?
← →
clickmaker © (2009-12-18 11:43) [1]
> Однако компилятор выдает ошибку "Metod "Unassigned" not
> supported by automation object
а там не так часом написано?
WordApp.Unassigned;
← →
Burger (2009-12-18 11:56) [2]Конечно же правильно будет WordApp.Unassigned а строчка WordApp := Unassigned; скопирована как есть из примера DelphiWord. В тексте программы написано WordApp.Unassigned, однако ошибка выдается компилятором в момент закрытия формы.
procedure TForm1.FormDestroy(Sender: TObject);
begin
WordApp.Quit;
WordApp.Unassigned;
end;
← →
clickmaker © (2009-12-18 12:02) [3]
> Конечно же правильно будет WordApp.Unassigned а строчка
> WordApp := Unassigned; скопирована как есть из примера DelphiWord
блин... в данном случае как раз-таки пример правильный.
нет такого метода, это константа, обозначающая не инициализированный variant
← →
Burger (2009-12-18 12:09) [4]А почему тогда когда в IDE побуквенно добавляешь название метода для "WordApp.Unass..." появляется function Unassigned. И при добавлении оной компилируется без ошибки, а в рантайм - ошибка ?
← →
clickmaker © (2009-12-18 12:14) [5]
> И при добавлении оной компилируется без ошибки, а в рантайм
> - ошибка ?
потому что это disp-interface, представленный как variant.
при работе с ним методы определяются только в процессе выполнения, т.н. "позднее связывание".
поэтому компилятор просто не может проверить правильность
← →
Burger (2009-12-18 12:28) [6]
> clickmaker © (18.12.09 12:14) [5]
Понятно, спасибо. Значит правильно будет WordApp := Unassigned; Или достаточно просто закрыть через WordApp.Quit; а экземпляр объекта уничтожится сам?
← →
clickmaker © (2009-12-18 12:35) [7]WordApp.Quit закрывает запущенный из программы экземпляр ворда, WordApp := Unassigned транслируется в вызов Release соотв. интерфейса, т.е. освобождает ссылку на него
по хорошему нужны обе строчки, если только переменная WordApp - не локальная
← →
Burger (2009-12-18 12:48) [8]
> по хорошему нужны обе строчки, если только переменная WordApp
> - не локальная
Впринципе ее можно сделать и локальной, т.к. интересует кратковременный доступ к файлу Word для изменения его некоторых свойств. Тут главное понят как нужно делать правильно. Кстати, попутно хотелось бы спросить. Доступ к файлам Word смотрю по примерам. Так вот меня интересует изменение некоторых свойств, в частности параметров страницы. Нашел следующее:
Теперь о полях. Изменение (чтение) ширины полей страницы:
WordApp.PageSetup.TopMargin:=100;
WordApp.PageSetup.BottomMargin:=90;
WordApp.PageSetup.LeftMargin:=90;
WordApp.PageSetup.RightMargin:=50;
WordApp.PageSetup. - нет такого свойства. Ошибака та-же "Metod "PageSetup" not supported by automation object. Не подскажите где можно посмотреть как правильно обращаться к свойствам и какие конкретно свойства есть для управления файлом word.
← →
Демо © (2009-12-18 13:07) [9]http://msdn.microsoft.com/en-us/library/dd146899.aspx
http://msdn.microsoft.com/en-us/library/bb244515.aspx
http://msdn.microsoft.com/en-us/library/bb244569.aspx
и т. д.
← →
Anatoly Podgoretsky © (2009-12-18 13:56) [10]> Burger (18.12.2009 12:48:08) [8]
Во первых читать надо MSDN, а не любой источник.
Во вторых надо учитывать версию.
← →
clickmaker © (2009-12-18 14:02) [11]> Не подскажите где можно посмотреть как правильно обращаться
> к свойствам и какие конкретно свойства есть для управления
> файлом word
\DelphiX\Ocx\Servers\WordX.pas
← →
zorik © (2009-12-18 14:40) [12]Можно запустить макрос, повозится с тем что интересует (изменение (чтение) ширины полей страницы). А потом использовать текст макроса, подкоректировав его для Delphi
← →
Burger (2009-12-18 15:11) [13]
> Burger (18.12.09 12:48) [8]
Я извеняюсь. Неверно привел код. Как разобрался в деталях обозрел, что в данном случае был использован компонент WordDocument с закладки Servers/ И правильно было так :
WordDocument1.PageSetup.TopMargin:=100;
WordDocument1.PageSetup.BottomMargin:=90;
WordDocument1.PageSetup.LeftMargin:=90;
WordDcoument1.PageSetup.RightMargin:=50;
А у него такие свойства есть.
Просто в первом случае у меня WordApp: OLEVariant; и его инициализацию я делаю через WordApp := CreateOLEObject("Word.Application"); Так получилось, что продолжение своего вопроса я подкрепил куском кода из совсем другого примера. Прошу прощения, если ввел в заблуждение. А по совету [9] глянул... темный лес. Лучше буквари на "родном" поискать. Получается что в первом случае я пытался использовать связь с Word без использования компонентов с закладки Servers
← →
Burger (2009-12-18 15:35) [14]
> clickmaker © (18.12.09 14:02) [11]
> \DelphiX\Ocx\Servers\WordX.pas
Установил DelphiX , но не нашел там ни указанного каталога, ни указанного файла.
← →
clickmaker © (2009-12-18 15:42) [15]> Установил DelphiX
какую?
← →
clickmaker © (2009-12-18 15:44) [16]DelphiX - это не DelphiX. X - это номер версии
в папке дельфи, короче
← →
Burger (2009-12-18 15:54) [17]
> clickmaker © (18.12.09 15:44) [16]
> DelphiX - это не DelphiX. X - это номер версии
> в папке дельфи, короче
Теперь понятно. Буду разбираться
← →
Burger (2009-12-18 17:39) [18]Я уже решил что тему можно закрывать, однако возникли трудности следующего порядка. Нашел для изучения книгу автор Василий Корняков "Программирование документов и приложений MS OFFISE в DELPHI". (На выходные будет чем заняться). Вместе с книгой идет диск, на котором имеются примеры, описанные в книге. Не удержался, чтобы не посмотреть. Так вот, по примеру я нашел ответ на свой вопрос, как обращаться к параметрам документа. Но что я вижу за цифпы? !!!
// В главном модуле
procedure TForm1.FormCreate(Sender: TObject);
begin
W:=CreateOleObject("Word.Application");
W.visible:=true;
end;
...
//второй модуль проекта
var
PageSetup:variant;
...
//инициализация значений во втором модуле
PageSetup:=Form1.W.ActiveDocument.PageSetup;
Orientation.ItemIndex:=PageSetup.Orientation;
VerticalAlignment.ItemIndex:=PageSetup.VerticalAlignment;
CheckBox1.Checked:=PageSetup.LineNumbering.Active;
PageWidth.Value:=PageSetup.PageWidth;
PageHeight.Value:=PageSetup.PageHeight;
TopMargin.Value:=PageSetup.TopMargin;
LeftMargin.Value:=PageSetup.LeftMargin;
В примере загружаем некий документ. Сразу захожу в его настройки параметров страницы. Ширина - 21, Высота- 29,7. Смотрю во втором модуле
PageWidth.Value = 595;
PageHeight.Value = 842;
(PageWidth и PageHeight - TSpinEdit)
Что касается отступов (верхний и левый) в параметрах страницы - 2 см
TopMargin.Value = 57
LeftMargin.Value = 85
(TopMarginи LeftMargin- TSpinEdit)
Что это за цифры? Откуда такие взялись? Чему они соответствуют??? Ничего не понимаю.
← →
Игорь Шевченко © (2009-12-18 18:37) [19]
> Что это за цифры? Откуда такие взялись? Чему они соответствуют?
> ??
А у Василия Корнякова спросить ?
← →
Burger (2009-12-20 20:05) [20]
> Игорь Шевченко © (18.12.09 18:37) [19]
> А у Василия Корнякова спросить ?
Прочитал половину книги(касаемо Word) - нет там ответа. Кстати в этом же примере, рассмотренном в книге, на картинках те же цифры. Разыскивать автора книги и у него спрашивать? Чувствую здесь имеет место быть факт неоговореных преобразований значений.
← →
Игорь Шевченко © (2009-12-20 20:07) [21]
> Разыскивать автора книги и у него спрашивать?
Я пытаюсь намекнуть, что здесь книжку упомянутого автора наверное не все наизусть знают (я так точно не читал), и спрашивать здесь, что автор имел в виду, менее целесообразно, чем у самого автора.
← →
Burger (2009-12-20 20:21) [22]
> и спрашивать здесь, что автор имел в виду, менее целесообразно,
> чем у самого автора.
Собственно здесь и автор-то постольку поскольку нужен. В примере то идет явное обращение к объектам Word и при считывании данных получается вот такая петрушка.
← →
Burger (2009-12-21 13:05) [23]По долгому затишью складывается впечатление, что никто не работал с вордом из Delphi и не сталкивался с такой ситуацией. Методом тыка и прочих поисков нашел взаимосвязь с методом WordApp.CentimetersToPoints. По догадкам получается , что ворд хранит все значения настроек в поинтах (размеры листа, отступы и т.д), а визульно представляет в сантиметрах. Значит получается, что для представления в окне настроек он тоже перевод делает? И если учесть это обстоятельство, то для более грамотного представления примером нужно было бы тоже переводить данные в сантиметры или мм, но для этого дополнительно нужно тогда вычислить в чем идут настройки.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.02.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c