none
Strg + V abfangen. Prüfen, ob Text in der Zwischenablage

    Frage

  • Hallo,

    ich möchte in meiner RTF-Box 2 Sachen verhindern.

    1.) Das durch Strg + "-" der Inhalt gelöscht wird. Das funktioniert folgendermaßen:

     

    If (Shift And acCtrlMask) > 0 And (KeyCode = vbKeySubtract Or KeyCode = 189) Then
      MsgBox "Strg - wurde deaktiviert", vbInformation + vbOKOnly, "Kein STRG + Minus"
      DoCmd.CancelEvent
      Exit Sub
    End If
    

     


    2.) Wollte ich verhindern das mittels Strg + v Bilder eingefügt werden können. Also wollte ich erstmal abfangen ob Strg + v gedrückt wurde. Dies versuchte ich so:

     

     If (Shift And acCtrlMask) > 0 And (KeyCode = vbKeyV Or KeyCode = 86) Then   <br/>
       MsgBox "Einfügen mit Strg + v nicht möglich!", vbInformation + vbOKOnly, "Kein STRG + v"
      DoCmd.CancelEvent
      Exit Sub
    End If
    

    Das klappt aber nicht. Meine Frage ist nun, wie kann ich prüfen was in der Zwischenablage ist. Ist es kein Bild soll das Einfügen mit Strg + V möglich sein. Anderenfalls soll eine MsgBox erscheinen, das das einfügen von Bildern nicht erwünscht ist.

    Hat jmd. eine Idee?

     

     

    Dienstag, 21. September 2010 12:20

Antworten

  • Hallo vba_newsbie,

    vba_newsbie schrieb folgendes:

    DANKE

    Anbei ein kleiner Test zusammengestellt aus:
    http://www.vb-archiv.de/api/api_getclipboarddata.html

    Aufruf mit:

    If IsClibboardText=True then
      'Zwischenablage enthält Text
    Else
      'Zwischenablage enthält keinen Text
    End If

    Hier wäre noch ein Code (Einfügen in ein Standardmodul) dafür:

    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As
    Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function EnumClipboardFormats Lib "user32" ( _
      ByVal wFormat As Long) As Long
    Private Declare Function CountClipboardFormats Lib "user32" () As Long
    Private Declare Function GetClipboardData Lib "user32" ( _
      ByVal wFormat As Long) As Long
    Private Declare Function GetClipboardFormatName Lib "user32" _
      Alias "GetClipboardFormatNameA" ( _
      ByVal wFormat As Long, _
      ByVal lpString As String, _
       ByVal nMaxCount As Long) As Long
    Private Declare Function lstrlen Lib "kernel32" _
      Alias "lstrlenA" ( _
      ByVal lpString As Any) As Long
    Private Declare Function lstrcpy Lib "kernel32" _
      Alias "lstrcpyA" ( _
      ByVal lpString1 As Any, _
      ByVal lpString2 As Any) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As
    Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" ( _
      ByVal hMem As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" ( _
      ByVal hdc As Long, _
      ByVal hObject As Long) As Long
    
    ' BitBlt dwRop-Konstante
    Private Const SRCCOPY = &HCC0020
    
    ' Zwischenablage Format-Konstanten
    Private Const CF_BITMAP = 2 ' Das Objekt in der Zwischenablage ist ein
    Handle eines Bitmaps
    Private Const CF_DIB = 8  ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer %BITMAPINFO%-Struktur
    Private Const CF_DIBV5 = 17 ' (Win 2000/XP) Das  Objekt in der
    Zwischenablage
    ' ist ein Handle zu einer %BITMAPV5HEADER%-Struktur
    Private Const CF_DIF = 5 ' Das Objekt in der Zwischenablage ist ein
    ' "Software Arts' Data Interchange Format"
    Private Const CF_DSPBITMAP = &H82 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Bitmap in einem privaten Format
    Private Const CF_DSPENHMETAFILE = &H8E ' Das Objekt in der
    Zwischenablage ist ein Handle
    ' zu einer Enhanced Metadatei in einem privaten Format
    Private Const CF_DSPMETAFILEPICT = &H83 ' Das Objekt in der
    Zwischenablage ist ein Handle
    ' zu einer Meta Grafik in einem privaten Format
    Private Const CF_DSPTEXT = &H81 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einem String in einem privaten Format
    Private Const CF_ENHMETAFILE = 14 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einer Enhanced Metadatei
    Private Const CF_GDIOBJFIRST = &H300 ' Das Objekt in der
    Zwischenablage ist  ein GID-Object
    ' (wird beim Leeren der Zwischenablage nicht gelöscht)
    Private Const CF_GDIOBJLAST = &H3FF ' Das Objekt in der Zwischenablage
    ist ein GID-Object
    ' (wird beim Leeren der Zwischenablage nicht gelöscht)
    Private Const CF_HDROP = 15 ' Das Objekt in der Zwischenablage ist
    eine
    ' Liste von Dateihandles
    Private Const CF_LOCALE = 16 ' Das Objekt in der Zwischenablage ist
    eine Sprach-ID,
    ' die für Text-Strings in der Zwischenablage benutzt wurde
    Private Const CF_METAFILEPICT = 3 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Metafile Bild
    Private Const CF_OEMTEXT = 7 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einem OEM-String
    Private Const CF_OWNERDISPLAY = &H80 ' Das Objekt in der
    Zwischenablage ist
    ' ein benutzerdefinierter Anzeigetyp
    Private Const CF_PALETTE = 9 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einer Palette
    Private Const CF_PENDATA = 10 ' Das Objekt der Zwischenablage sind
    Daten zu
    ' einem Microsoft Pen Extensions
    Private Const CF_PRIVATEFIRST = &H200 ' Das Objekt in der
    Zwischenablage ist
    ' ein privates Handle
    Private Const CF_PRIVATELAST = &H2FF ' Das Objekt in der
    Zwischenablage ist
    ' ein privates Handle
    Private Const CF_RIFF = 11 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer Audiodatei
    Private Const CF_SYLK = 4 ' Das Objekt in der Zwischenablage ist ein
    ' symbolischer Link
    Private Const CF_TEXT = 1 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einem String
    Private Const CF_WAVE = 12 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer Wavedatei
    Private Const CF_TIFF = 6 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einem Tiff-Bitmap
    Private Const CF_UNICODETEXT = 13 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Unicode-String
    
    Public Function IsClibboardText() As Boolean
    
    Dim bolResult As Boolean
    bolResult = False
    
    Dim hTmpStr As Long
    Dim pTmpStr As Long
    Dim TmpStr As String
    
    ' Zwischenablage öffnen
    Call OpenClipboard(0)
    ' Anzahl der verschiedenen Formate der Zwischenablage ermitteln
    'Debug.Print "Anzahl verschiedender Clipboard-Formate: " &
    CountClipboardFormats()
    
    ' Prüfen, welche Datenformate sich in der
    ' Zwischenablage befinden
    For i = 0 To CountClipboardFormats - 1
    
      lngformat = EnumClipboardFormats(lngformat)
      If lngformat = 0 Then Exit For
    
      ' Format auswerten
    
      Select Case lngformat
        Case CF_TEXT
            ' Handle zum String ermitteln
            hTmpStr = GetClipboardData(CF_TEXT)
            ' Pointer des Strings ermitteln
            pTmpStr = GlobalLock(hTmpStr)
            ' String in eine Variable kopieren
            TmpStr = Space(lstrlen(ByVal pTmpStr))
            Call lstrcpy(TmpStr, ByVal pTmpStr)
            'Debug.Print " text aus der Zwischenablage: " & TmpStr
            ' Pointer zerstören um Ressourcen zu sparen
            GlobalUnlock hTmpStr
            Call CloseClipboard
            bolResult = True
            IsClibboardText = bolResult
            Exit Function
    
        Case Else
    
      End Select
    
    Next i
    
    IsClibboardText = bolResult
    
    Call CloseClipboard
    
    End Function

    Gruß
    Gunter


    ________________________________________________________
    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 08:30
    Moderator
  • Hallo vba_newsbie,

    vba_newsbie schrieb folgendes:

    Ich habe nich eine zweite Frage. Wie kann man überprüfen, ob in der Windows-Zwischenablage sich ein Bild befindet?

    Mittels API:
    http://www.vbarchiv.net/workshop/workshop_25-die-zwischenablage-im-griff.html

    Gruß
    Gunter


    ________________________________________________________
    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 07:50
    Moderator

Alle Antworten

  • Hallo,

    vba_newsbie wrote:

      DoCmd.CancelEvent

    ich möchte in meiner RTF-Box 2 Sachen verhindern.
    [...]
    2.) Wollte ich verhindern das mittels Strg + v Bilder eingefügt werden
    können. Also wollte ich erstmal abfangen ob Strg + v gedrückt wurde.
    Dies versuchte ich so:
     
     If (Shift And acCtrlMask) > 0 And (KeyCode = vbKeyV Or KeyCode = 86) Then   <br/>
       MsgBox "Einfügen mit Strg + v nicht möglich!", vbInformation + vbOKOnly, "Kein STRG + v"

    Da fehlt ein

      KeyCode = 0

    Ansonsten wird die Tastenkombination trotzdem ausgefuehrt.

      Exit Sub
    End If

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Dienstag, 21. September 2010 16:31
    Moderator
  • Hallo Peter,

    danke für Deine Antwort.

    Ich habe meinen Versuch geändert:

    If (Shift = acCtrlMask) And (KeyCode = vbKeyV Or KeyCode = 86) Then
      MsgBox "Das Einfügen von Bildern ist nicht gestattet!", vbInformation + vbOKOnly, "Hinweis"
      KeyCode = 0
      Exit Sub
    End If
    

    Aber Strg + V wird nicht verhindert. Was ich komisch finde ist, das das Blocekn von Strg und von v sepparat funktioniert.

    Aber die Tastenkombination Strg + v wird nicht blockiert. Kann das daran liegen das Strg+v eine Windowssache ist?

     

    Mittwoch, 22. September 2010 09:20
  • Hallo,

    vba_newsbie wrote:

    Ich habe meinen Versuch geändert:

    If (Shift = acCtrlMask) And (KeyCode = vbKeyV Or KeyCode = 86) Then
      MsgBox "Das Einfügen von Bildern ist nicht gestattet!", vbInformation + vbOKOnly, "Hinweis"
      KeyCode = 0
      Exit Sub
    End If

    Aber Strg + V wird nicht verhindert. Was ich komisch finde ist, das das
    Blocekn von Strg und von v sepparat funktioniert.

    Aber die Tastenkombination Strg + v wird nicht blockiert. Kann das daran
    liegen das Strg+v eine Windowssache ist?

    Bei mir funktioniert folgendes:

    1. Formular-Eigenschaft Tastenvorschau = Nein (Ja/Nein waere aber egal) 2. Ereignis ist MeineTextbox_KeyDown

    Private Sub MeineTextbox_KeyDown(KeyCode As Integer, Shift As Integer)
        If Shift = 2 And (KeyCode = vbKeyV Or KeyCode = vbKeyInsert) Then
            MsgBox "Finger wech!", vbOKOnly
            KeyCode = 0
            Exit Sub
        End If
    End Sub

    Es wird nichts eingefuegt.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 22. September 2010 12:33
    Moderator
  • Stimmt mit einer "normalen" TextBox funktioniert es. Aber leider gibt es bei der RTF-Box das Eriegnis KeyDown nicht. Und wenn ich den Skript auf Form_Keydown lege geht das Einfügen trotzdem.
    Mittwoch, 22. September 2010 13:28
  • Hallo,

    vba_newsbie wrote:

    Stimmt mit einer "normalen" TextBox funktioniert es. Aber leider gibt es
    bei der RTF-Box das Eriegnis KeyDown nicht. Und wenn ich den Skript auf
    Form_Keydown lege geht das Einfügen trotzdem.

    Welche Access-Version setzt du ein und von welcher RTF-Box sprechen wir
    eigentlich? Ich von A10 (oder A07) Memofeld mit Rich-Text=Yes.
    Solltest du ein 3rd-Party RTF-Control einsetzen, muesstest du dich
    entsprechend dort schlau machen.

    Wenn du Form_KeyDown verwenden willst, gilt, dass KeyPreview
    (Tastenvorschau) auf Yes stehen muss. Bei mir funktioniert auch das,
    allerdings gilt auch hier die Aussage nur fuer Onboard-Controls.

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    Mittwoch, 22. September 2010 13:42
    Moderator
  • Guten Morgen,

     

    wir sprechen in der Tat von Access 2003. Das RTF Feld ist das von M. Lebans.Leider supportet er keine Access-Anfragen mehr. Deswegen stelle ich meine Fragen auch hier in das Forum.

    Siehst Du sonst noch irgendeine Möglichkeit, Tastatureingaben abzufangen?

    Ich habe nich eine zweite Frage. Wie kann man überprüfen, ob in der Windows-Zwischenablage sich ein Bild befindet? Wenn das der Fall ist möchte ich das Einfügen mittels Strg+V verhindern.

     

    Gruß

    Frank

     

    Donnerstag, 23. September 2010 06:55
  • Hallo vba_newsbie,

    vba_newsbie schrieb folgendes:

    Ich habe nich eine zweite Frage. Wie kann man überprüfen, ob in der Windows-Zwischenablage sich ein Bild befindet?

    Mittels API:
    http://www.vbarchiv.net/workshop/workshop_25-die-zwischenablage-im-griff.html

    Gruß
    Gunter


    ________________________________________________________
    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 07:50
    Moderator
  • Hallo Gunter,

     

    DANKE

     

    Gruß

    Frank

    Donnerstag, 23. September 2010 08:06
  • Hallo vba_newsbie,

    vba_newsbie schrieb folgendes:

    DANKE

    Anbei ein kleiner Test zusammengestellt aus:
    http://www.vb-archiv.de/api/api_getclipboarddata.html

    Aufruf mit:

    If IsClibboardText=True then
      'Zwischenablage enthält Text
    Else
      'Zwischenablage enthält keinen Text
    End If

    Hier wäre noch ein Code (Einfügen in ein Standardmodul) dafür:

    Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As
    Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function EnumClipboardFormats Lib "user32" ( _
      ByVal wFormat As Long) As Long
    Private Declare Function CountClipboardFormats Lib "user32" () As Long
    Private Declare Function GetClipboardData Lib "user32" ( _
      ByVal wFormat As Long) As Long
    Private Declare Function GetClipboardFormatName Lib "user32" _
      Alias "GetClipboardFormatNameA" ( _
      ByVal wFormat As Long, _
      ByVal lpString As String, _
       ByVal nMaxCount As Long) As Long
    Private Declare Function lstrlen Lib "kernel32" _
      Alias "lstrlenA" ( _
      ByVal lpString As Any) As Long
    Private Declare Function lstrcpy Lib "kernel32" _
      Alias "lstrcpyA" ( _
      ByVal lpString1 As Any, _
      ByVal lpString2 As Any) As Long
    Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As
    Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" ( _
      ByVal hMem As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" ( _
      ByVal hdc As Long, _
      ByVal hObject As Long) As Long
    
    ' BitBlt dwRop-Konstante
    Private Const SRCCOPY = &HCC0020
    
    ' Zwischenablage Format-Konstanten
    Private Const CF_BITMAP = 2 ' Das Objekt in der Zwischenablage ist ein
    Handle eines Bitmaps
    Private Const CF_DIB = 8  ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer %BITMAPINFO%-Struktur
    Private Const CF_DIBV5 = 17 ' (Win 2000/XP) Das  Objekt in der
    Zwischenablage
    ' ist ein Handle zu einer %BITMAPV5HEADER%-Struktur
    Private Const CF_DIF = 5 ' Das Objekt in der Zwischenablage ist ein
    ' "Software Arts' Data Interchange Format"
    Private Const CF_DSPBITMAP = &H82 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Bitmap in einem privaten Format
    Private Const CF_DSPENHMETAFILE = &H8E ' Das Objekt in der
    Zwischenablage ist ein Handle
    ' zu einer Enhanced Metadatei in einem privaten Format
    Private Const CF_DSPMETAFILEPICT = &H83 ' Das Objekt in der
    Zwischenablage ist ein Handle
    ' zu einer Meta Grafik in einem privaten Format
    Private Const CF_DSPTEXT = &H81 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einem String in einem privaten Format
    Private Const CF_ENHMETAFILE = 14 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einer Enhanced Metadatei
    Private Const CF_GDIOBJFIRST = &H300 ' Das Objekt in der
    Zwischenablage ist  ein GID-Object
    ' (wird beim Leeren der Zwischenablage nicht gelöscht)
    Private Const CF_GDIOBJLAST = &H3FF ' Das Objekt in der Zwischenablage
    ist ein GID-Object
    ' (wird beim Leeren der Zwischenablage nicht gelöscht)
    Private Const CF_HDROP = 15 ' Das Objekt in der Zwischenablage ist
    eine
    ' Liste von Dateihandles
    Private Const CF_LOCALE = 16 ' Das Objekt in der Zwischenablage ist
    eine Sprach-ID,
    ' die für Text-Strings in der Zwischenablage benutzt wurde
    Private Const CF_METAFILEPICT = 3 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Metafile Bild
    Private Const CF_OEMTEXT = 7 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einem OEM-String
    Private Const CF_OWNERDISPLAY = &H80 ' Das Objekt in der
    Zwischenablage ist
    ' ein benutzerdefinierter Anzeigetyp
    Private Const CF_PALETTE = 9 ' Das Objekt in der Zwischenablage ist
    ein
    ' Handle zu einer Palette
    Private Const CF_PENDATA = 10 ' Das Objekt der Zwischenablage sind
    Daten zu
    ' einem Microsoft Pen Extensions
    Private Const CF_PRIVATEFIRST = &H200 ' Das Objekt in der
    Zwischenablage ist
    ' ein privates Handle
    Private Const CF_PRIVATELAST = &H2FF ' Das Objekt in der
    Zwischenablage ist
    ' ein privates Handle
    Private Const CF_RIFF = 11 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer Audiodatei
    Private Const CF_SYLK = 4 ' Das Objekt in der Zwischenablage ist ein
    ' symbolischer Link
    Private Const CF_TEXT = 1 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einem String
    Private Const CF_WAVE = 12 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einer Wavedatei
    Private Const CF_TIFF = 6 ' Das Objekt in der Zwischenablage ist ein
    Handle
    ' zu einem Tiff-Bitmap
    Private Const CF_UNICODETEXT = 13 ' Das Objekt in der Zwischenablage
    ist ein
    ' Handle zu einem Unicode-String
    
    Public Function IsClibboardText() As Boolean
    
    Dim bolResult As Boolean
    bolResult = False
    
    Dim hTmpStr As Long
    Dim pTmpStr As Long
    Dim TmpStr As String
    
    ' Zwischenablage öffnen
    Call OpenClipboard(0)
    ' Anzahl der verschiedenen Formate der Zwischenablage ermitteln
    'Debug.Print "Anzahl verschiedender Clipboard-Formate: " &
    CountClipboardFormats()
    
    ' Prüfen, welche Datenformate sich in der
    ' Zwischenablage befinden
    For i = 0 To CountClipboardFormats - 1
    
      lngformat = EnumClipboardFormats(lngformat)
      If lngformat = 0 Then Exit For
    
      ' Format auswerten
    
      Select Case lngformat
        Case CF_TEXT
            ' Handle zum String ermitteln
            hTmpStr = GetClipboardData(CF_TEXT)
            ' Pointer des Strings ermitteln
            pTmpStr = GlobalLock(hTmpStr)
            ' String in eine Variable kopieren
            TmpStr = Space(lstrlen(ByVal pTmpStr))
            Call lstrcpy(TmpStr, ByVal pTmpStr)
            'Debug.Print " text aus der Zwischenablage: " & TmpStr
            ' Pointer zerstören um Ressourcen zu sparen
            GlobalUnlock hTmpStr
            Call CloseClipboard
            bolResult = True
            IsClibboardText = bolResult
            Exit Function
    
        Case Else
    
      End Select
    
    Next i
    
    IsClibboardText = bolResult
    
    Call CloseClipboard
    
    End Function

    Gruß
    Gunter


    ________________________________________________________
    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 08:30
    Moderator
  • Hallo Gutnther,

    super Sache, nochmals Danke. Aber bevor ich das so Testen kann, muss ich ja erstmal herausbekommen aber Strg + v gedrückt wurde.

     

    ich versuche das momentan folgendermaßen:

     

    Private Sub Form_KeyDown(KeyCode As Integer, _
       Shift As Integer)
      Dim intShiftDown As Integer, intAltDown As Integer
      Dim intCtrlDown As Integer   <br/>
    <br/>
        intShiftDown = (Shift And acShiftMask) > 0
      intAltDown = (Shift And acAltMask) > 0
      intCtrlDown = (Shift And acCtrlMask) > 0  <br/>
    <br/>
       If intCtrlDown Then
        If KeyCode = vbKeyV Then
          MsgBox "Stop", vbInformation + vbOKOnly, "Hinweis"
          'KeyCode = 0
          Exit Sub
        End If
      End If   
    End Sub
    
    
    Leider klappt das NICHT. Wenn ich strg drücke bekommt er mit und eine TestMsgBox kommt auch richt. Wenn ich strg + v drücke drücke steht im KeyCode die 17. Da sollte doch aber die 86 für das "v" stehen.

    Donnerstag, 23. September 2010 08:37
  • Hallo vba_newsbie,

    vba_newsbie schrieb folgendes:

    ...Leider klappt das NICHT. Wenn ich strg drücke bekommt er mit und eine TestMsgBox kommt auch richt. Wenn ich strg + v drücke drücke steht im KeyCode die 17. Da sollte doch aber die 86 für das "v" stehen.

    Habe Deinen Code in einem leeren A2003 Formular getestet. Bei mir
    kommt bei [STRG]+[V] Deine Msgbox "Stop"

    Gruß
    Gunter


    ________________________________________________________
    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 08:55
    Moderator
  • Am 23.09.2010 schrieb vba_newsbie:

    Leider klappt das NICHT. Wenn ich strg drücke bekommt er mit und eine TestMsgBox kommt auch richt. Wenn ich strg + v drücke drücke steht im KeyCode die 17. Da sollte doch aber die 86 für das "v" stehen.

    Benutzt Du Textbox von MS oder die von Lebans?

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Donnerstag, 23. September 2010 10:06
  • Hallo Winfried,

    Winfried Sonntag [MVP] schrieb folgendes:

    Am 23.09.2010 schrieb vba_newsbie:

    Leider klappt das NICHT. Wenn ich strg drücke bekommt er mit und eine TestMsgBox kommt auch richt. Wenn ich strg + v drücke drücke steht im KeyCode die 17. Da sollte doch aber die 86 für das "v" stehen.

    Benutzt Du Textbox von MS oder die von Lebans?

    vba_newbie schrieb (08:55):
    wir sprechen in der Tat von Access 2003. Das RTF Feld ist das von M. Lebans.Leider supportet er keine Access-Anfragen mehr. Deswegen stelle
    ich meine Fragen auch hier in das Forum.

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 10:28
    Moderator
  • Am 23.09.2010 schrieb Gunter Avenius [MVP]:

    Winfried Sonntag [MVP] schrieb folgendes:

    Am 23.09.2010 schrieb vba_newsbie:

    Leider klappt das NICHT. Wenn ich strg drücke bekommt er mit und eine TestMsgBox kommt auch richt. Wenn ich strg + v drücke drücke steht im KeyCode die 17. Da sollte doch aber die 86 für das "v" stehen.

    Benutzt Du Textbox von MS oder die von Lebans?

    vba_newbie schrieb (08:55):
    wir sprechen in der Tat von Access 2003. Das RTF Feld ist das von M. Lebans.Leider supportet er keine Access-Anfragen mehr. Deswegen stelle
    ich meine Fragen auch hier in das Forum.

    Das hatte ich schon gelesen, ich wollte nur nochmal nachfragen, ob er
    den erneuten Test mit der von MS oder mit der von Lebans gemacht hat.
    Nicht das Du mit der von MS testest und er mit der von Lebans. ;)

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Donnerstag, 23. September 2010 10:39
  • Hallo Winfried,

    Winfried Sonntag [MVP] schrieb folgendes:
    ...

    Das hatte ich schon gelesen, ich wollte nur nochmal nachfragen, ob er
    den erneuten Test mit der von MS oder mit der von Lebans gemacht hat.
    Nicht das Du mit der von MS testest und er mit der von Lebans. ;)

    Ich habe ohne RTF Control getestet.

    Habe Deinen Code in einem leeren A2003 Formular getestet.

    Gruß
    Gunter


    Access FAQ: http://www.donkarl.com

          http://www.avenius.de - http://www.AccessRibbon.de
    http://www.ribboncreator.de - http://www.ribboncreator2010.de

    Donnerstag, 23. September 2010 10:43
    Moderator
  • Hallo Gunther,

     

    in der Tat funktioniert das Abfangen von [Strg]+[V] auf einem leerem Formular. Das heißt ja das es an dem RTF Feld liegen muss.

    Übrigends habe ich gerade mal versucht das MS RTF feld auf meinem Formular einzufügen, und da kam eine Fehlermeldung:

     

    MS Office Access unterstützt dieses ActiveX-Steuerelement nicht!

     

    Aber zurück zum Thema. Nun werde ich es wohl anders versuchen müssen [Strg]+[V] abzufangen. Gibts da auch mit API ne Möglichkeit?

     

    Gruß

    Frank

    Donnerstag, 23. September 2010 11:16
  • Hallo,

     

    ich habe es nun hinbekommen, dass das RTF-Feld [strg]+[v] abfängt. Hier mein Code:

     

    Private Sub txtRTF_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
    
    Dim boolCtrlDown As Boolean
    
    boolCtrlDown = (Shift And acCtrlMask) > 0
    
      If KeyCode = vbKeyV Then
      'If KeyCode = 17 Then 'Bei Druck auf [Strg] wird geprüft, ob sich Text in der Zwischenablage befindet
      'If Shift = 2 And (KeyCode = vbKeyV Or KeyCode = 86) Then
        
        If IsClibboardText = True Then
        'Zwischenablage enthält Text
        MsgBox "Text in der ZA", vbInformation + vbOKOnly, "Hinweis"
        
        Else
        'Zwischenablage enthält keinen Text
        MsgBox "NUR TEXT", vbCritical + vbOKOnly, "Hinweis"
        KeyCode = 0
        End If
      End If <br/>
    End Sub
    

    Nun habe ich folgendes Problem. Wenn Text in der Zwischenablage (ZA) kommt die Meldung. bestätige ich die mit OK soll der Text aus der ZA eingefügt werden. Klappt aber nicht, es wird "v" eingefügt.

    Beim Else-Zweig also kein Text in der ZA kommt auch richtigerweise die MsgBox. Nach betstigen des OK Buttons soll ja nichts eingefügt werden. Deshalb ja KeyCode = 0. Aber es wird das "v" eingefügt.

    Wer weiß woran das liegt und kann mir helfen?

    Gruß

    Frank

    Mittwoch, 29. September 2010 13:30
  • Hi @ll,

     

    das Einfügen des Textes, wenn sich denn welcher in der Zwischenablage (Za) befindet, klappt nun einwandfrei.

    Befindet sich ein Bild in der Za kommt, wie ja auch gewünscht, kommt eine Mitteilung. Der KeyCode wird auf 0 gesetzt. Beim Drücken des OK - Buttons wird ein "v" in das RFT-Feld geschrieben. Und das kann ich mir nicht erklären.

    Wie verhindere ich das Einfügen des "v"

    Freitag, 1. Oktober 2010 07:44
  • Hallo,

    hat keiner eine Idee?

    Gruss + schönes WE

    Frank

    Freitag, 1. Oktober 2010 15:23
  • Für alle die möglicherweise auch mal benötigen

    um bei dem RTF2 Feld von Lebans  [Strg]+[v] abzufangen:

     

    If letzterKeCode = 17 And KeyCode = 86 Then

    Msg "[STRG]+[V]"

    End If

     

    Was allerdings immer noch passiert ist, das noch dem Ok-Drücken der Messagboxein "V" eingefügt wird!

    Freitag, 17. Dezember 2010 12:38
  • Am 17.12.2010 schrieb vba_newsbie:

    If letzterKeCode = 17 And KeyCode = 86 Then

        Keycode = 0

    Msg "[STRG]+[V]"

    End If

     

    Was allerdings immer noch passiert ist, das noch dem Ok-Drücken der Messagboxein "V" eingefügt wird!

    Setz vor der Messagebox den Keycode auf 0.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Freitag, 17. Dezember 2010 13:01
  • If letzterKeCode = 17 And KeyCode = 86 Then

    KeyCode = 0
    MsgBox "[STRG]+[V]"

    End If

     

    es wird trotzdem ein V in die RTFBox geschrieben.

    Freitag, 17. Dezember 2010 14:37
  • Am 17.12.2010 schrieb vba_newsbie:

    If letzterKeCode = 17 And KeyCode = 86 Then

    KeyCode = 0
    MsgBox "[STRG]+[V]"

    End If

    es wird trotzdem ein V in die RTFBox geschrieben.

    In welchem Ereignis steht der o.g. Code? Welche Funktionen/Subs gibts
    sonst noch mit welchem Code in dem Formular?

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Freitag, 17. Dezember 2010 15:07
  • im rtf_keydown. damit soll strg + v abgefangen werden!
    Samstag, 18. Dezember 2010 16:52
  • Hallo,

     

    das Problem ist gelöst. Und zawr habe ich es mit dem Change-Event "gelöst". Wird Text + Bild eingefügt wird das mit Undo-Rückgängig gemacht inclusive dem V

    Dienstag, 21. Dezember 2010 10:11