Вывод OLE объекта в виде значка и как содержимое

beegee
Дата: 14.01.2012 18:08:24
В таблице в поле OLE содержаться вордовские документы, на форме они могут отображаться в виде содержимого и значка. Мне же нужно чтобы отображение происходило в виде содержимого, но при этом хранилось "В виде значка" - так размер получается раз в 10 меньше. Как через VBA можно преобразовывать отображение, а именно вкл или откл. этот флажок: http://s018.radikal.ru/i504/1201/89/9158b025e5d5.jpg ?
alvk
Дата: 15.01.2012 12:27:51
beegee,

Вы ошибаетесь, хранится может либо связанный файл (аналог ярлыка), либо полностью залитый файл, никаких значков и содержимых быть не может, это отображение на форме, а не хранение.
beegee
Дата: 15.01.2012 13:48:10
Файл полностью залитый, но когда флажок "В виде значка" не установлен, access создает изображение - скриншота и хранит его в базе. Этот снимок похоже что имеет формат типа bmp т.е. картинка не сжимается как в jpg, поэтому размер выходит большой.
Бенедикт
Дата: 16.01.2012 14:52:19
beegee,

Про флажок - читать хелп к элементу управления Bound Object Frame, в частности к свойству DisplayType.

Эскиз первой страницы документа хранится в виде метафайла. В принципе, это довольно экономно (векторная графика), но раз речь об отношениии в 10 раз, то можно предположить, что на странице есть растровые элементы (например, логотип). Растровые изображения внутри метафайла представлены как несжатые DIB-ы.

Можно хранить документ без эскиза ("в виде значка"), но тогда или
а) получать эскиз хранящегося без него документа путём (скрытого) запуска OLE-сервера (что неэкономно по времени и оперативной памяти, но экономно по объёму хранения), что показано в примере (см. ниже) по нажатию кнопки Test2;
или
б) извлекать эскиз из документа в момент его сохранения, сжимать (на вашей совести - как), хранить, расжимать, показывать его самостоятельно.

По получению эскиза прикладываю пример. Для его работы нужна библиотека типов OLELIB.TLB (можно переписать код без неё, при большом желании).
beegee
Дата: 16.01.2012 21:47:46
Бенедикт, спасибо!
Метод Test2 c запуском сервера мне понравился. Можно будет с его помощью сохранить эскизы, которые он отображает в новой форме? Идея такая - док открывается для изменений из , после изменений этот метод создает эскиз и сохраняет на диске. Затем при просмотре будет работать объект Picture, отображающий ранее сохраненный экскиз.

Test1 работает только, если содержимое выводится, а размер базы увеличивается.

Буду разбираться в реализации.

Про DisplayType знаю, только его значение не меняется через VBA, нет доступа.
Сейчас появилас проблема, пишет сервер ole не был зарегистрирован переустановите его для регистрации
beegee
Дата: 17.01.2012 02:11:33
Не понятно что произошло, перестали открываться вложенные файлы ворда в поле OLE - "MS Access не может запустить приложение, требуемое для открытия объекта. В результате сбоя компонент перестал работать правильно. Восстановить его? Да, нет." Если нажать да, то начнется "установка:сервер приложений." Эта установка проходит раза 2, потом снова выдает MS Access не может запустить ... Если нажать нет - "Сервер OLE не был зарегистрирован. Переустановите его для регистации. "
Пробовал переустанавливать офис, регистрировать TriEdit.dll (не удачно). Также нельзя добавить доки - "Возникла ошибка при установлении связи в приложении MS Access с сервером OLE или элементом управления ActiveX. Закройте сервер OLE и перезапустите его вне приложения MS Access." Это все касается только файлов word, с excel, paint и другими работает без проблем.
beegee
Дата: 17.01.2012 02:24:53
beegee
регистрировать TriEdit.dll (не удачно)

Upd: скачал такой http://www.dll.ru/dll/21277.html , зарегистрировал успешно. Но проблема осталась.
alvk
Дата: 17.01.2012 07:55:10
beegee
Сейчас появилас проблема, пишет сервер ole не был зарегистрирован переустановите его для регистрации


На каком этапе пишет? Может вы дважды открываете один и тот же объект?
beegee
Дата: 17.01.2012 13:34:07
alvk,

когда пытаешься открыть объект Word в ячейке таблицы. Открывать с формы тоже не выходит. Открываю однократно. У меня параллельно установлены 2003 и 2010 офисы, в обоих имеется эта проблема, хотя вчера еще все работало. Кнопка тест1 выдавала какие-то ошибки когда ее нажимал на записи с объектом в виде значка, потом подключил библиотеку OLELIB.TLB стал Тест2 работать, а потом это трабла с OLE сервером (ориентированным на связь с word) случилась.
alvk
Дата: 17.01.2012 15:32:04
beegee,

проверьте на другом компе.