Hallo,
es gibt doch in VB 6 etliche dieser Tasten-code-Konstanten, mittels derer ich Tastatureingaben auswerten kann. Z.B. "vbkeyBack " wenn die
Backspace (Rücklösch)-Taste gedrückt wurde.
Aber wie ist es mit Tastenkombinationen? Wer kann mir sagen, wie ich z.b. die Kombinationen für strg-c oder strg-v ermitteln kann?
wo wertest du denn die Tastureingaben aus?
Wenn du auf der Form zum Bsp. die KeyPreview Eigenschaft auf True setzt, so löst du jedesmal beim Druck einer Taste das Ereigniss Form_KeyDown aus wobei du als Parameter Shift und Keycode erhaelst.
um nun noch herauszufinden ob die Taste Alt oder Strg gedrueckt wurde, mache dich dem Parameter Shift zu nutze
shift = 1 --\> Shift Taste wurde gedrueckt
shift = 2 --\> Strg Taste wurde gedrueckt
shift = 4 --\> ALT Taste wurde gedrueckt
Wie du nun unschwer erkennen kannst, du somit ziemlich jede Tastenkombination erkennen!
Beispiel:
Private Sub Form\_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 2 And KeyCode = vbKeyC Then MsgBox "STRG + C wurde gedrueckt"
If Shift = 2 And KeyCode = vbKeyV Then MsgBox "STRG + V wurde gedrueckt"
If Shift = 6 And KeyCode = vbKeyV Then MsgBox "STRG + ALT + V wurde gedrueckt"
End Sub
MFG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Anno,
viele Dank für die ausführliche Übersicht der Tasten-Codes…
Zur Auswertung: die gedrückten Tasten werden im KeyPress-Ereignis ausgewertet. Wie also kann ich dort ermitteln ob, z.B. ein Einfügevorgang mittels Strg-V erfolgen soll?
Dank für Deine Mühe,
viele Dank für die ausführliche Übersicht der Tasten-Codes…
Zur Auswertung: die gedrückten Tasten werden im
KeyPress-Ereignis ausgewertet. Wie also kann ich dort
ermitteln ob, z.B. ein Einfügevorgang mittels Strg-V erfolgen
soll?
Generell könntest Du Dir einfach folgende Zeile ins KeyPress schreiben: Msgbox "Taste: "& KeyAscii. Dann drückst Du einfach die Tasten, die Du gerne hättest, und bekommst die ASCII-Codes, die Du auswerten kannst, in der Message Box angezeigt.
Weiterhin generell solltest Du aber eher KeyDown verwenden, weil Du hier wirklich jede Taste genau incl. möglicher Zusatztasten abfangen kannst; KeyAscii = 13 könnte z. B. die Return-Taste sein oder Strg+M, was u. U. (D)einer Programmlogik nach unterschiedliche Bedeutung haben kann (z. B. „normaler“ Zeilenumbruch bei Return, Strg+M als Hotkey für irgendwas anderes).
Zuguterletzt: Wenn es nur um die standardmäßigen Windows-Tastaturkürzel (Kopieren, Einfügen) geht, würde ich so was gar nicht per Code behandeln, sondern einfach das funktionierende und bestehende nehmen.
Hallo Manfred,
Danke für Deine Tips
Mir geht es ganz konkret um folgendes,
ich muss verhindern, das bestimmte Eingaben in eine Textbox erfolgen können. Über das Key-Press-Ereignis habe ich exakt definiert, welche Tastatureingaben akzeptiert und welche abgelehnt werden.
Nun möchte ich zusätzlich verhindern, dass die abzuweisenden Eingaben durch das Einfügen aus der Zwischenablage in die Textbox gelangen können.
Daher meine Frage nach den Tasten-Code-Konstanten für Tastenkombinationen.
Zuguterletzt: Wenn es nur um die standardmäßigen
Windows-Tastaturkürzel (Kopieren, Einfügen) geht, würde ich so
was gar nicht per Code behandeln, sondern einfach das
funktionierende und bestehende nehmen.
Danke für Deine Tips
Mir geht es ganz konkret um folgendes,
ich muss verhindern, das bestimmte Eingaben in eine Textbox
erfolgen können. Über das Key-Press-Ereignis habe ich exakt
definiert, welche Tastatureingaben akzeptiert und welche
abgelehnt werden.
Nun möchte ich zusätzlich verhindern, dass die abzuweisenden
Eingaben durch das Einfügen aus der Zwischenablage in die
Textbox gelangen können.
Daher meine Frage nach den Tasten-Code-Konstanten für
Tastenkombinationen.
Wie gesagt, bau Dir die Messagebox rein, die die Codes ausgibt. Mache ich auch immer so.
Achte aber dann auch darauf, dass bestimmte Aktionen auch mit der Maus ausgeführt werden können (Kontextmenüs rechte Maustaste) etc.
ok das habe ich verstanden. Aber generell würde es so klappen.
Mit dem Keypress Ereigniss kannst du in dem Fall nichts anfangen! da du dort nicht die CTRL Taste abfragen kannst.
Mache dir das Ereigniss KeyDown zu nutzen. Dort kannst du abfragen ob auch die CTRL Taste gedrueckt wurde.
Aber nun mal ein bsp
Du hast eine text in der zwischenablage. Du drueckst nun STRG+V zum einfügen! Du kannst dies abfangen und irgendwelchen Quelltext fortsetzen, aber zu dem Zeitpunkt wurde der text noch nicht eingefuegt!
Erst nach verlassen des Ereignisses wird der text eingefuegt, durch Windows.
Um das vorhaben zu realsieren poste ich dir ein kleines Demo, wie du es verhindern kannst.
Desweiteren hat Manfred auch gesagt das du an das Kontexmenu denken musst.( rechte Maustaste ins textfeld)
Aber dieses abzuschalten bedarf keiner grossen muehe
so nun ein bsp. wie du STRG+V unterbindest
Dim delete As Boolean 'Flag ob der text gelöscht werden soll
Dim oldtext As String 'Alter text wird gespeichert
Private Sub Text1\_Change()
If delete Then 'wenn gelöscht werden soll
delete = Not (delete) 'Delete auf false setzen
Text1.Text = oldtext 'Alten Text zuweisen
Text1.SelStart = Len(Text1) 'Cursor ans textende setzen
End If
End Sub
Private Sub Text1\_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = 2 And KeyCode = vbKeyV Then 'Wenn STRG +V dann
delete = True 'Delete auf true setzen
oldtext = Text1.Text 'Den Inhalt von text1 in oldtext speichern
End If
End Sub
ok das habe ich verstanden. Aber generell würde es so klappen.
Mit dem Keypress Ereigniss kannst du in dem Fall nichts
anfangen! da du dort nicht die CTRL Taste abfragen kannst.
Hallo Anno-Alex ,
noch einmal Dank für deine Anregungen, aber warum kann ich STRG-V nicht im KeyPress -Ereignis abfangen? STRG allein geht nicht, das stimmt schon. Aber ich habe, so wie Manfred es auch vorgeschlagen hatte, mir den Ascii-Wert für Strg-V anzeigen lassen, und dieser ist „22“ und im Vergleich dazu hat „v“ den Wert „118“. Also sollte das auch so möglich sein?
Dein Tipp mit dem Sichern des alten Textes ist übrigens klasse gewesen.
Hallo Manfred,
Danke für die Hinweise mit der MsgBox und dem Kontextmenü.
Allerdings darf dieses in meiner Anwendung nicht abgeschaltet
werden. Der Nutzer soll nämlich in seinem gewohnten Look - And-Feel
keineswegs eingeschränkt werden.
ok das wusste ich nicht. Ich daechte das du dort nur den ersten Tastendruck mitgeteilt bekommst. also entweder das v oder die strg taste. Aber ich habe es gerade mal probiert und gesehen das es klappt.
Wieder was dazu gelernt
Sicher kannst du das nun auch über dieses ereigniss machen.
Welchen Weg du nun nimmst, liegt an dir
MFG Alex
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Danke für die Hinweise mit der MsgBox und dem Kontextmenü.
Allerdings darf dieses in meiner Anwendung nicht abgeschaltet
werden. Der Nutzer soll nämlich in seinem gewohnten Look -
And-Feel keineswegs eingeschränkt werden.
Du kannst das ggf. auch nur für einzelne Steuerelemente abschalten, in dem Du eigene (auch leere) Kontextmenüs erzeugst und denen zuweist. Andernfalls kommt halt das Abfangen der Einfügeoperation per Maus, wenn es nicht erlaubt sein soll. Wobei das Verbieten vom Einfügen dann ja auch nicht „Look-and-feel“ wäre