Как преобразовать поле Гиперссылка в поле OLE-объект

burunduk_
Дата: 24.11.2009 22:48:01
Здравствуйте.

У меня в таблице есть поле типа Гиперссылка. Все ссылки ссылаются на картинки, файлы .jpg и .gif и имеют вид типа "USA/pix/b52_4.jpg", остальные поля - текстовые атрибуты картинки типа "B-52" "58-03175" "ВВС США 55 BW" "авиабаза Edwards" "в полёте" и т.д.

В таблице порядка 25000 строк.
В ряде случаев это удобно (например, при генерации Html-страниц), но хочется также сделать форму для просмотра фотографий.

Но вот захотелось сделать форму для просмотра фотографий... и тут потребовалось поле OLE-object. Причем непремено linked (связанный) объект, если embedded то база распухнет до неимоверности.

Вопрос: как написать макрос, который бы просматривал поля Гиперссылка во всех записях и в поле OLE-object клал бы ссылку на linked object с тем же относительным адресом?

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

Буду очень благодарен за помощь.
qwerty112
Дата: 24.11.2009 23:09:52
..."авиабаза Edwards"?, говорите...

"в полёте", говорите...

коллега, - вы не ошиблись форумом по ходу...?
burunduk_
Дата: 25.11.2009 00:04:34
А что, методы программирования зависят от смыслового содержания полей?
qwerty112
Дата: 25.11.2009 14:22:18
...хорошо, будем считать Вас НАШИМ шпионом )))

burunduk_

Вопрос: как написать макрос, который бы просматривал поля Гиперссылка во всех записях и в поле OLE-object клал бы ссылку на linked object с тем же относительным адресом?

объясните смысл перекладывания ссылки из одного поля в другое

burunduk_
...
Но вот захотелось сделать форму для просмотра фотографий... и тут потребовалось поле OLE-object.
...

для чего потребовалось?
сделать форму с компонентом WebBrowser - не вариант?
ну и
Private Sub Form_Current()
  MyBeautyWebBrowser.Navigate Replace([Поле с гиперссылкой].Value, "#", "")
End Sub
burunduk_
Дата: 25.11.2009 21:58:44
Большое спасибо. Работает.

Да, без дублирования лучше.

Но как сделать, чтобы картинки масштабировались в окне эксплорера по рамке? В OLE objects просто задаёшь параметр "по размеру рамки" и всё. А тут есть, скажем, фотки 2000*1200 или схемы того же размера. Хочется, чтобы они для просмотра ужимались до размеров окна.

Можно такое сделать?
qwerty112
Дата: 25.11.2009 22:17:17
вот тут - бороли это же (и вроде побороли)
burunduk_
Дата: 26.11.2009 21:56:34
Изучение рекомендованного топика показало, что всё, до чего дошёл коллективный разум - это сделать на форме под картинкой кнопочки "+" и "-".

При просмотре многих тысяч картинок это будет людей сильно напрягать, эффективность учебного процесса снизится.

Вот и возвращаемся к исходной теме: как бы заполнить поле типа OLE_object данными из поля типа Гиперссылка :(
Бенедикт
Дата: 26.11.2009 22:14:11
burunduk_,

эскиз linked OLE-объекта хранится в несжатом виде, с размерами исходного изображения. Возьмите свою типичную картинку, например JPEG, высоту умножьте на ширину на глубину цвета (24 бита = 3 байта). Потом подумайте, нужен ли такой хоккей, сравнив размер в байтах JPEG-файла и полученную цифру.

Просмотрщик можно сделать по-разному, и данные хранить по-разному. Вот, например, так.
qwerty112
Дата: 27.11.2009 13:20:28
burunduk_,

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

...
В ряде случаев это удобно (например, при генерации Html-страниц),
...

вот и вгружайте в него не просто рисунок, а хтмл-страничку с отмасштабированны рисунком
типа так
Private Sub Form_Current()
Dim strHTML As String
strHTML = "<HTML><HEAD></HEAD><BODY " & _
     "scroll=" & Chr(34) & "no" & Chr(34) & _
     " style=" & Chr(34) & "margin: 0;padding: 0;" & Chr(34) & ">" & _
     "<img height=" & Chr(34) & "100%" & Chr(34) & _
     " src=" & Chr(34) & Replace([Поле с гиперссылкой].Value, "#", "") & Chr(34) & "></img>" & _
     "</BODY></HTML>"

' или так
' а лучше, наверна, и то и другое и переключение через radiobutton
'strHTML = "<HTML><HEAD></HEAD><BODY " & _
     "scroll=" & Chr(34) & "no" & Chr(34) & _
     " style=" & Chr(34) & "margin: 0;padding: 0;" & Chr(34) & ">" & _
     "<img width=" & Chr(34) & "100%" & Chr(34) & _
     " src=" & Chr(34) & Replace([Поле с гиперссылкой].Value, "#", "") & Chr(34) & "></img>" & _
     "</BODY></HTML>"

WebBrowser0.Document.Write strHTML
WebBrowser0.Refresh
End Sub