Domino 9 und frühere Versionen > Entwicklung

RenderToRTItem in Zwischenablage

(1/4) > >>

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