Domino 9 und frühere Versionen > Entwicklung
RenderToRTItem in Zwischenablage
TMC:
Hi,
ich suche eine einigermaßen elegante Möglichkeit, den kompletten Dok-Inhalt aus einer Ansicht heraus oder bei geöffnetem Dokument in die Zwischenablage zu kopieren.
Schön wäre es dabei, die RenderToRTItem - Methode benutzen zu können.
Also:
Call doc.RenderToRTItem( Clipboard )
Allerdings soll der Inhalt in der Zwischenablage landen, und per Ctrl+V in ein beliebiges RT-Feld kopierbar sein.
Ich könnte mir auch vorstellen man muss so über ein temporäres Dokument arbeiten, dort in ein RTItem den Inhalt kopieren und dann den RT-Item in die Zwischenablage (per API??) ?
Any idea?
Danke,
Matthias
Glombi:
Am einfachsten so:
@Command([EditSelectAll]);
@Command([EditCopy]);
Du musst dafür sorgen, dass das Dokument geöffnet ist. Wenn Du ansagt, aus welchem Kontext das gestartet wird, kann man den Code erweitern.
Es wird alles in die Zwischenablage kopiert, was "sichtbar für die Zwischenablage" ist.
Andreas
TMC:
Danke Andreas, daran hab ich auch schon gedacht, da müsste aber ein Forward in meinem Fall vorgeschalten werden. Also nicht sehr elegant.....
Kontext:
Z.B. klassisches Mailfile oder jede andere DB:
User markiert ein Dokument (oder eben das aktuell geöffnete), klickt auf einen Button, und hat den Inhalt in der Zwischenablage (nicht das Dok, sondern eben den Inhalt von RenderToRTItem).
Daher meine Idee, das per Script umzusetzen.
Matthias
TMC:
Nachtrag:
Mir würde auch schon eine Methodik reichen, wie ich (wohl dann per API) den Inhalt eines RT-Feldes ins Clipboard bekomme.
Für ein reines Textfeld nutze ich immer folgende Sub:
--- Code: ---Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01
Const SRCCOPY = &HCC0020
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Sub SetClipboardText(text As String)
Dim hwnd As Long
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim ret As Variant
On Error Goto error_handler
hwnd = NEMGetCurrentSubProgramWindow()
If hwnd Then
hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
If hGlobalMemory Then
lpGlobalMemory = GlobalLock(hGlobalMemory)
If lpGlobalMemory Then
ret = lstrcpy(lpGlobalMemory, text)
Call GlobalUnlock(hGlobalMemory)
If OpenClipboard(hwnd) Then
ret = EmptyClipboard()
ret = SetClipboardData(CF_TEXT, hGlobalMemory)
ret = CloseClipboard()
End If
Else
Msgbox "Can't allocated global memory pointer.", 32, "Error"
End If
Else
Msgbox "Can't allocated global memory handle.", 32, "Error"
End If
Else
Msgbox "Can't get window handle.", 32, "Error"
End If
Exit Sub
error_handler:
Print "Error: " + Error$(Err)
Resume Next
End Sub
--- Ende Code ---
Glombi:
Wenn ich es richtig verstehe, willst Du den Inhalt eines Dokuments in die Zwischenablage kopieren. Das geht mit dem 2-zeiler, den ich gepostet habe.
Wenn Du in einer Ansicht bist, müsste das Dokument geöffnet werden -
@Command([EditDocument];"0");
@Command([EditSelectAll]);
@Command([EditCopy]);
@Command([FileCloseWindow])
Ein Forward brauchst Du nicht.
Amdreas
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln