-
skiph (22.01.08 07:35) [0]Здравствуйте.
Передо мной стоит следубщая задача. Существует некоторая база данных, в которой храняться Word-документы (это необходимо для сохранения в документах графических объектов). (Короче говоря, библиотека). Пользователь может просматривать эти документы, копироватть из них нужную информацию, но не может ее редактировать.
Для отображения документов был выбран не OLEContainer, а WebBrowser, по следующим причинам:
1. Проблемы с потерей фокуса (OLEContainer)
2. Выделить фрагмент документа (для копирования) в контейнере возможно, если документ активен (DoVerb(ovShow)), но тут возможны неосторожные действия пользователя, которые приведут к искажению документа, что потребует опять перезагрузить документ (не удобно). Опять же проблемы с потерей фокуса.
3. Кроме того при активации документа открываются панели, которые, конечно, можно отключить, но они все же немного искажают внешний вид окна.
Но при загрузке документа из базы в WebBrowser тоже возникает проблема.(ADOQuery.FieldByNAme('Referat') as TBlobField).SaveToStream(AStream);
AStream.Seek(0, 0);
(WebBrowser1.Document as
IPersistStreamInit).Load(TStreamAdapter.Create(AStream));
При таком открытии в браузере отображается просто неформатированное содержимое doc-файла. Кроме того при переносе фокуса на WebBrowser (после загрузки документа), приложение зависает. -
Сергей М. © (22.01.08 11:43) [1]Не проще ли хранить в базе html-версии вордовых документов ? Или конвертить эти документы в html "на лету" перед загрузкой в браузер ?
-
Плохиш © (22.01.08 11:46) [2]1. Браузер определяет тип файла по расширению, а ты ему засовываешь набор байтов и чего-то требуешь
2. IE использует OLEConteiner
3. Было бы логичным просматривать документы в ворде... -
skiph (22.01.08 12:28) [3]
> Не проще ли хранить в базе html-версии вордовых документов ?
Проблема в возможных иллюстрациях. Насколько я понимаю в этом случае они должны храниться на винте?
> 3. Было бы логичным просматривать документы в ворде...
Было бы, но есть еще ряд примочек, благодаря которым документ должен отображаться в самом приложении. -
Сергей М. © (22.01.08 12:58) [4]
> skiph (22.01.08 12:28) [3]
А что тебя в этом смущает ? -
skiph (22.01.08 13:03) [5]
> А что тебя в этом смущает ?
Мне нужно, чтобы они хранились в самом документе, который я открываю -
DiamondShark © (24.01.08 12:21) [6]
> skiph (22.01.08 12:28) [3]
>
> > Не проще ли хранить в базе html-версии вордовых документов
> ?
>
> Проблема в возможных иллюстрациях. Насколько я понимаю в
> этом случае они должны храниться на винте?
Нет, не должны.
В документе делаем так:
<IMG src="img:image1234.gif">
В приложении реализуем Pluggable Protocol Handler и регистрируем для схемы "img:".
Всё. Наши картинки могут храниться где угодно.
Про Pluggable Protocol читать тут:
http://msdn2.microsoft.com/en-us/library/aa767743(VS.85).aspx
ЗЫ.
Вообще, использовать в приложении закрытый проприетарный формат документов, который для работы требует установленного платного стороннего софта -- это бяка.