M
morpheus
Возникла необходимость просматривать файлы ( doc / xls / gif / jpg / pdf ) "не отходя от кассы", тоесть в самом документе.
Решение с использованием "сторонних" для нотеса, а точнее родных контролов windows.
Пример
Я использовал контрол браузера. Описание его найдёте в C:\Windows\system32\shdocvw.dll. В реестре обзываетсья как Shell.Explorer.2
В нужное место на форме я через меню Create -> object... выбираю Control и в списке отмечаю "Обозреватель веб-страниц (Microsoft)" (название зависит от локализации). Если в списке контролов такового не оказалось - Вы можете сами добавить через кнопку Add Control To list... по указанному выше пути.
Теперь у Вас на форме есть контрол. Можете задать ему некоторые параметы. Такие как:
- На всю страницу
- До первого региона
- -
- Автивироваться при просмотре
- и т.д.
Также Вы можете менять некоторые свойства контрола, например, Name - удобно для того что бы сразу обращаться к обьекту или размеры по ширине и высоте.
Теперь добавляем рт-поле Body в котором будут храниться нужные файлы и пишем кнопку для обработки.
Name обьекта мы заменим на "Browser"
Краткое описание алгоритма
- составить список всех атачментов
- выбрать один который хотим просмотреть
- скидываеться выбраный атачмент в тэмповую папку на машине пользователя
- обращаемся к контролу0-просмотрщику
- открываем нужный нам атачмент с диска
[codebox]Sub Click(Source As Button)
On Error Goto errorHandler
Dim ws As New NotesUIWorkspace
Dim mWebBrowser As Variant , varAttachmentNames As Variant, vPrompt As Variant, vFile As Variant
Dim strTempPath As String
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
Set rtitem = doc.GetFirstItem( "Body" )
'If Not (uidoc.IsNewDoc) Then Exit Sub
If rtitem Is Nothing Then Exit Sub
If Isempty( rtitem.EmbeddedObjects ) Then Exit Sub
varAttachmentNames = ""
Forall x In rtitem.EmbeddedObjects ' пробегаемся по атачментам в поле Боди
If Len( varAttachmentNames ) > 0 Then varAttachmentNames = varAttachmentNames +Chr(10)
varAttachmentNames = varAttachmentNames + x.Name
End Forall
If Len( varAttachmentNames ) = 0 Then Exit Sub
Let strTempPath = Environ$("TEMP") ' путь во временную папку
varAttachmentNames = Split( varAttachmentNames, Chr(10) ) ' список всех имен атачментов
vPrompt = ws.Prompt( 4, "titile", "prompt", varAttachmentNames(0), varAttachmentNames ) ' выбираем кактой-то один
If Isempty(vPrompt) Then Exit Sub
Kill strTempPath + "\" + vPrompt ' удаляем на всякий случай
Set vFile = rtitem.GetEmbeddedObject(vPrompt)
Call vFile.ExtractFile(strTempPath + "\" + vPrompt) ' скидываем файл на диск
Set mWebBrowser =uidoc.GetObject("Browser") ' обращаемся к нашему контролу-просмотрщику
If mWebBrowser Is Nothing Then Exit Sub
mWebBrowser.navigate strTempPath + "/" + vPrompt ' собственно открываем на просмотр
Exit Sub
errorHandler:
Select Case Err
Case 75
'попытка удалить с ошибкой
Resume Next
Case Else
Msgbox "Error " & Err & " in line: " & Erl & ": " & Error$
Exit Sub
End Select
Resume Next
End Sub[/codebox]
За помощ благодарен EHT за то что натолкнул на идею
з.ы. Для любых рисунков лучше использовать контрол PreView C:\Windows\system32\shimgvw.dll. Но у меня так и не получилось изменить размеры самого контрола (192х192 как я не старался). Хотя контрол очень удобный, можно зумить и переворачивать фото. разница лишь в Class контрола "Preview.Preview.1" и в том как происходит просмотр: через метод ShowFile( "File_path", 1 )
з.з.ы. Замечания, пожалуйста, излагайте в этой теме https://codeby.net/threads/25430.html