Autor Thema: Feldinhalt in Zwischenablage ohne Dok. zu öffnen  (Gelesen 3423 mal)

Offline mexi

  • Frischling
  • *
  • Beiträge: 5
Hallo Leute,

ich möchte den Inhalt eines Feldes aus einem DB-Dokument in die Zwischenablage kopieren ohne das betreffende Dokument zu öffnen. Z.B. benötige ich immer wieder einen schnellen Zugriff auf das Thema einer Mail.

Leider habe ich das bisher nur mit einem Zwischenschritt hinbekommen. Ich führe einen Agenten aus und kann dann das Thema über die rechte Maustaste oder STRG+C in die Zwischenablage einfügen.

Der Agent hat folgenden Inhalt:

Sub Initialize
     Dim session As NotesSession
     Dim doc As NotesDocument
     Dim strSubject As String
     Dim strDummy As String
     Set session = New NotesSession
     Set doc = session.DocumentContext
     
     strSubject = doc.Subject(0)
     strDummy = Inputbox$("Nun: STRG + C drücken","Mailsubject in Zwischenablage",strSubject)
End Sub


Vielleicht gibt es ja einen noch eleganteren und vorallem schnelleren Weg, um an die gewünschten Daten zu kommen.

Beste Grüße sendet

mexi aus Kölle
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Domino Server 5.0.8 - Client 5.0.10

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Feldinhalt in Zwischenablage ohne Dok. zu öffn
« Antwort #1 am: 19.09.02 - 08:15:47 »
Hi,

ich glaube nicht, dass das mit normalen Notes-Funktionen machbar ist. Mit Hilfe der C-API oder VB könnte es viellecht machbar sein.


Axel
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Feldinhalt in Zwischenablage ohne Dok. zu öffn
« Antwort #2 am: 19.09.02 - 09:01:19 »
Hier der Code:

'Deklaration
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 Click(Source As Button)
     Dim s As New NotesSession
     Dim ws As New NotesUIWorkspace
     Dim db As NotesDatabase
     Dim uiDoc As NotesUIDocument
     Dim plainText As String
     Set db = s.CurrentDatabase
     Set uiDoc = ws.CurrentDocument
     plainText = uiDoc.FieldGetText("Subject")
     setclipboardtext(plainText)
     Msgbox "Copied to clipboard.", 0+64, "Successful"
End Sub


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


Du kannst den Code im Click leicht anpassen, so dass du auch aus einer Ansicht heraus das Feld abgreifen kannst.

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline mexi

  • Frischling
  • *
  • Beiträge: 5
Re: Feldinhalt in Zwischenablage ohne Dok. zu öffn
« Antwort #3 am: 19.09.02 - 11:00:46 »
hi eknori,

danke für den code. leider klappt es nur wenn eine beliebige mail geöffnet ist. es wird immer die letzte genommen. wenn keine offen ist erscheint die notes meldung 'object variale not set'. leider brauche ich genau diese funktion, also subject ohne öffnen eines eintrags in zwischenablage zu kopieren.

ich habe den code so übernommen wie gepostet. ok? oder muss da was geändert werden?
was meinst du mit
Zitat
du kannst den code im click leicht anpassen...

ich glaub ich bin zu dumm(y).  ???

mexi
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Domino Server 5.0.8 - Client 5.0.10

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Feldinhalt in Zwischenablage ohne Dok. zu öffn
« Antwort #4 am: 19.09.02 - 11:11:49 »
hier der Code für eine Aktion in einer Ansicht

Sub Click(Source As Button)
     Dim session As NotesSession
     Dim doc As NotesDocument
     Dim strSubject As String
     Dim strDummy As String
     Set session = New NotesSession
     Set doc = session.DocumentContext
     SetClipboardText(doc.Subject(0) )
End Sub

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline mexi

  • Frischling
  • *
  • Beiträge: 5
Re: Feldinhalt in Zwischenablage ohne Dok. zu öffn
« Antwort #5 am: 19.09.02 - 11:31:54 »
:D super. danke dir eknori. es klappt einwandfrei.

mexi
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Domino Server 5.0.8 - Client 5.0.10

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz