Войти
 
 
 
Форум NotesNet Регистрация Список пользователей Последние сообщения Поиск Выход
Форум NotesNet > Разработка notes-приложений > Программное помещение DocLink в clipboard
   
Для создания сообщения необходимо
аутентифицироваться на сервере
04/14/2011 11:14:08 AM Программное помещение DocLink в clipboard
lmed
Регистрация: 04/14/2011
Сообщений: 13
Уважаемые коллеги, доброго времени суток!
Подскажите, пожалуйста, как программно, имея инициализированный объект NotesDocument, сформировать DocLink на него в буфере обмена, что бы пользователь в дальнейшем мог интерактивно (по команде Paste) вставить этот DocLink в нужное ему место?

 
Ответить с цитированием
04/14/2011 01:35:55 PM
Ник
Регистрация: 04/24/2009
Сообщений: 150
Я бы рассматривал вариант текстового url -
notes:///replicaid/0/documentunid

 
04/14/2011 03:03:15 PM
lmed
Регистрация: 04/14/2011
Сообщений: 13
Хорошо. А как впихнуть этот url в буфер обмена? Что бы при вставке пользователь увидел обычную гиперссылку.
Посоветуйте, куда копать, что читать?

 
04/14/2011 03:25:15 PM
Ник
Регистрация: 04/24/2009
Сообщений: 150
Чтобы впихнуть
на Windows использовать WinAPI

Я пользую библиотечку от Дмитрия Акулова
'Options
' адаптировано c VB, откуда унес оригинал на васике,
' естественно, не помню. Даю честное лотусовое, что даже будучи
' абсолютно трезв, денег за это просить не буду.
Option Public
Option Explicit
Public Const CF_TEXT = 1
Public Const CF_UNICODETEXT = 13
Public Const CF_OEMTEXT = 7
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const ERROR_BASE&=&H07AC
Const ERROR_GLOBAL_ALLOC&=ERROR_BASE&+1
Const ERROR_GLOBAL_LOC&=ERROR_BASE&+2
Const ERROR_WIN_HANDLE&=ERROR_BASE&+3
'Declarations
' Clipboard functions:
' Memory functions:
'NEM Functions
'-- End --'
'Code
' hWndOwner - можно указывать как 0
Declare Private Function OpenClipboard Lib "user32" (Byval hwnd As Long) As Long
Declare Private Function CloseClipboard Lib "user32" () As Long
Declare Private Function EmptyClipboard Lib "user32" () As Long
Declare Private Function GetClipboardData Lib "user32" (Byval wFormat As Long) As Long
Declare Private Function SetClipboardData Lib "user32" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Private Function IsClipboardFormatAvailable Lib "user32" (Byval wFormat As Long) As Long
Declare Private Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (Byval lpString As String) As Long
Declare Private Function GlobalAlloc Lib "kernel32" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Private Function GlobalLock Lib "kernel32" (Byval hMem As Long) As Long
Declare Private Function GlobalUnlock Lib "kernel32" (Byval hMem As Long) As Long
Declare Private Function GlobalSize Lib "kernel32" (Byval hMem As Long) As Long
Declare Private Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, Byval cbCopy As Long)
Declare Private Sub StrCopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Byval szTarget As String, lpvSource As Any, Byval cbCopy As Long)
Declare Function lstrcpy1 Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function lstrcpy2 Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As String, Byval lpString2 As Long) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Public Function GetClipboardIDForCustomFormat(Byval sname As String) As Long
Dim wFormat As Long
wFormat = RegisterClipboardFormat(sname & Chr$(0))
If (wFormat > &HC000&) Then
GetClipboardIDForCustomFormat = wFormat
End If
End Function
Public Function GetClipboardDataAsString(Byval hWndOwner As Long, Byval lFormatID As Long) As String
Dim hMem As Long
Dim lSize As Long
Dim targetstring As String
Dim lPtr As Long
' Open the clipboard for access:
If (OpenClipboard(hWndOwner)) Then
' Check if this data format is available:
If (IsClipboardFormatAvailable(lFormatID) <> 0) Then
' Get the memory handle to the data:
hMem = GetClipboardData(lFormatID)
If (hMem <> 0) Then
' Get the size of this memory block:
lSize = GlobalSize(hMem)
If (lSize > 0) Then
' Get a pointer to the memory:
lPtr = GlobalLock(hMem)
If (lPtr <> 0) Then
' Resize the byte array to hold the data:
'Redim bData(0 To sizeinbyte) As Integer
' Copy from the pointer into the array:
targetstring=Ustring$(lSize*2,Chr(0))
lstrcpy2 targetstring, lPtr
targetstring=Left(targetstring,lSize)
'StrCopyMemory targetstring, Byval lPtr, lSize
' Unlock the memory block:
GlobalUnlock hMem
' Now return the data as a string:
GetClipboardDataAsString = targetstring 'Strconv(bData, vbUnicode)
End If
End If
End If
End If
CloseClipboard
End If
End Function
Sub SetClipboardDataAsString(text As String)
Dim hwnd As Long
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim ret As Long
On Error Goto error_handler
' Get a handle to current window
hwnd = NEMGetCurrentSubProgramWindow()
If hwnd Then
' Allocate memory
hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
If hGlobalMemory Then
lpGlobalMemory = GlobalLock(hGlobalMemory)
If lpGlobalMemory Then
ret = lstrcpy1(lpGlobalMemory, text)
Call GlobalUnlock(hGlobalMemory)
If OpenClipboard(hwnd) Then
ret = EmptyClipboard()
ret = SetClipboardData(CF_TEXT, hGlobalMemory)
ret = CloseClipboard()
End If
Else
Error ERROR_GLOBAL_LOC&, "Ошибка фиксации общей памяти ОС"
End If
Else
Error ERROR_GLOBAL_ALLOC&, "Ошибка захвата общей памяти ОС"
End If
Else
Error ERROR_WIN_HANDLE&, "Ошибка, NEMGetCurrentSubProgramWindow вернула 0"
End If
Exit Sub
error_handler:
Print "Error: " + Error$(Err)
Resume Next
End Sub

 
04/14/2011 03:29:01 PM
Ник
Регистрация: 04/24/2009
Сообщений: 150
текстовый url должен отображаться в режиме чтения в виде гипертекстовой ссылки
(по-моему, в настройках Notes достаточно взвести Make Internet URLs into hotspot,
а может быть, и этого не нужно)

 
04/14/2011 03:50:16 PM
lmed
Регистрация: 04/14/2011
Сообщений: 13
Понял, Николай!
Беру у документа NotesUrl, и пишу в буфер обмена при помощи SetClipboardDataAsString.

Как попробую, отпишусь обязательно. Спасибо!

 
04/18/2011 10:46:34 AM
lmed
Регистрация: 04/14/2011
Сообщений: 13
Попробовал. Все Ок. Вставка работает. Ссылка автоматически становится хотспотом.
Спасибо еще раз!

 
04/18/2011 10:53:54 AM
lmed
Регистрация: 04/14/2011
Сообщений: 13
У меня, правда, созданный хотспот срабатывает только когда документ в режиме просмотра. Если документ в режиме правки - хоть обкликайся, перехода не происходит. Это можно как нибудь победить?

 
Для создания сообщения необходимо
аутентифицироваться на сервере
Дополнительно
Статистика форума Именинники
Новый пользователь: Олег Изосимов
Участников: 246
Тем: 166
Сообщений: 415
Нет именинников
Статистика
Самые активные авторы Новые пользователи Наиболее просматриваемы темы
Пользователи Сообщения
Ник Норки...150
Denny71
Мэкс29
Golembiov...19
CarteBlan...17
Duchan15
lmed13
Mitka Aku...13
susinmn10
Kachinkin8
Пользователи Сообщения
Олег Изос...0
yungert0
webguru1
tsibus_s1
nataname0
URSiP0
RK5D0
Эбзеев Ру...0
nuesro1
Илья (Доц...2
Тема Автор Просмотров Ответов
"плюсы" и "минусы" создания са...Ник Норкин5759554
Обсуждаем "Сборщик почты"Duchan3485527
Первое впечатлениеDNN2564613
Экспорт из oracle в lotusslavyan2523513
На сайте, в статьях не работаю...Duchan234523
HTTP POST из кода базыDaime159744
[Domino Designer]Не могу откры...SiM22140496
Lotus Sametime Connect 8.0.2 п...HardCool137021
Lotus CMSKachinkin135123
nginx + dominoNetWood116211
 
© LOGOSPHERE.RU