Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

"как бы" утечка ...   Найти похожие ветки 

 
GanibalLector ©   (2004-10-20 19:27) [0]

Создаю программно документы(Word).Так вот,хотел поинтересоваться,насколько это правильно ???
GuaV говорит,что это "как бы" утечка.


WordApp := CreateOleObject("Word.Application");
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
Wordapp.visible:=true;

т.е. я не сохраняю,а сразу вывожу(и путь пользователь сам решает что с ним делать)

Вот это :

WordApp.Quit;
WordApp := Unassigned;

я не делаю.

З.Ы. Может все же сохранять в файл и закрывать Word,а потом CreateProcess с созданным файлом ???
З.З.Ы.В принципе,у меня пока проблем нет(XP),а вот пользователи(Win98) говорят,что при закрытии Word-a ИНОГДА сообщение вылетает
(естественно,они не запомнили что за сообщение)


 
GuAV ©   (2004-10-21 00:03) [1]

я говорил, как бы утечка если вот это

> Wordapp.visible:=true;
не выполнится (в следствие исключения) - юзер не увидит ворда. поэтому этой строке место в finally или сделать quit в except.


 
GuAV ©   (2004-10-21 00:12) [2]


> (естественно,они не запомнили что за сообщение)

Сохранить изменения в файле Документ1 ? ;-)


 
YurikGL ©   (2004-10-21 14:48) [3]


> Вот это :
>
> WordApp.Quit;
> WordApp := Unassigned;
> я не делаю.

Вот это WordApp.Quit; не делай а WordApp := Unassigned; делай и все будет ok


 
GuAV ©   (2004-10-21 15:31) [4]

YurikGL ©   (21.10.04 14:48) [3]
а WordApp := Unassigned; делай

Это фактически вызовет _VarClear (из модуля Variants). Так вот, я думал что это должно быть автоматически и очистка вручную - излишне. Так и есть.

procedure TForm1.Button1Click(Sender: TObject);
var W: OleVariant;
begin
 W:=CreateOleObject("Word.Application");
 W.Visible:=True; // breakpoint here
end;


При breakpoint в указанном месте нажать Ctrl+Alt+C.
Давить F8 до call _VarClear.
Нажать F7 и убедиться что вызывается та же подпрограмма что и при WordApp := Unassigned;

Так же можно наблюдать что этот call _VarClear находится в секции finally, хотя она явно не написана.

--------

код в [0] лучше переписать так
WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
Wordapp.visible:=true;
except
Wordapp.Quit;
end;

Если нужно показывать Word даже в случае ошибки, то можно сделать так
WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;
Doc1 := WordApp.ActiveDocument;
... // собственно создаю
finally
Wordapp.visible:=true;
end;


"как бы" утечка имелось ввиду в случае ошибки в "собственно создаю". тогда ворд не будет не завершен не показан.


 
YurikGL ©   (2004-10-21 19:34) [5]


> GuAV ©   (21.10.04 15:31) [4]

Вот честное слово... проблемы не вижу... Всегда делал примерно так:

WordApp := CreateOleObject("Word.Application");
try
WordApp.Documents.add;

Doc1 := WordApp.ActiveDocument; - так никогда не делал. Всегда работал через WordApp.....

... // собственно создаю

Wordapp.visible:=true;
WordApp := Unassigned;
ShowMessage("Документ создан")
except
Wordapp.visible:=true;
WordApp := Unassigned;
ShowMessage("При создании документа произошла ошибка")
end;


 
GuAV ©   (2004-10-21 20:07) [6]

YurikGL ©   (21.10.04 19:34) [5]
Всегда работал через WordApp.....


Мне код с Doc1 был бы понятнее и он был бы немного быстрее (хоть я работал только с XL).

YurikGL ©   (21.10.04 19:34) [5]
Вот честное слово... проблемы не вижу...

В Вашем коде и я не вижу проблемы. Только WordApp := Unassigned; просто лишнее. Это как перед FreeAndNil вставлять ещё один FreeAndNil.

В коде GanibalLector © (код был в http://delphimaster.net/view/10-1097854855/) была проблема - не было try (точнее был try но не там где надо).



Страницы: 1 вся ветка

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-1121319495
ANB
2005-07-14 09:38
2005.07.31
Как убрать автопереключение на главное окно при показе хинта ?


1-1121026051
Arc
2005-07-11 00:07
2005.07.31
Как отловить момент после создания новой формы?


4-1117371250
Yandexman
2005-05-29 16:54
2005.07.31
Как программно заменить обои на рабочем столе


1-1121128966
Барс
2005-07-12 04:42
2005.07.31
Как изменить системное время windows


1-1121171705
race1
2005-07-12 16:35
2005.07.31
Перемещение панели