Tabulator in Rich-Text-Feldern

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Hinzufügen eines Feldes mit dem Datentyp Langer Text und dem Textformat Rich-Text

Bild 1: Hinzufügen eines Feldes mit dem Datentyp Langer Text und dem Textformat Rich-Text

Ein Kunde fragte, ob es möglich ist, im Text von Memofeldern im Rich-Text-Format auch das Tabulator-Zeichen einzugeben und damit eine strukturiertere Darstellung von Inhalten zu erreichen – vor allem für die Ausgabe in Berichten. Dazu sind mir einige Ideen gekommen, von denen sich aber nicht alle so einfach umsetzen ließen, wie es gedacht war. Schließlich hat sich aber doch noch eine sehr gut programmierbare Lösung herauskristallisiert.

In der Beispieldatenbank legen wir zunächst eine Tabelle an, die neben dem Primärschlüsselfeld TextID noch die Felder Betreff mit dem Datentyp Kurzer Text und das Feld Inhalt mit dem Datentyp Langer Text enthält (siehe Bild 1). Für dieses Feld stellen wir außerdem die Eigenschaft Textformat auf Rich-Text ein.

Hinzufügen eines Feldes mit dem Datentyp Langer Text und dem Textformat Rich-Text

Bild 1: Hinzufügen eines Feldes mit dem Datentyp Langer Text und dem Textformat Rich-Text

Danach erstellen wir ein Formular, das wir über die Eigenschaft Datensatzquelle an die Tabelle tblTexte binden. Danach ziehen wir alle Felder dieser Tabelle aus der Feldliste in den Detailbereich des Formularentwurfs. Das Feld Inhalt gestalten wir etwas größer und stellen seine Eigenschaften Horizontaler Anker und Vertikaler Anker auf Beide ein, damit es seine Größe mit der des Formulars verändert (siehe Bild 2).

Formular zur Anzeige des Rich-Text-Feldes

Bild 2: Formular zur Anzeige des Rich-Text-Feldes

Normales Tabulatur-Verhalten

Danach wird es interessant. Wir wechseln in die Formularansicht des Formulars und setzen den Fokus in das Textfeld, das an das Feld Inhalt gebunden ist und dessen Namen wir zuvor noch auf txtInhalt ändern.

Wenn wir nun ein paar Zeichen eingeben und dann die Tabulator-Taste drücken, erhalten wir das standardmäßige Verhalten: Access verschiebt schlicht den Fokus auf das nächste Steuer-element, in diesem Fall auf das Feld TextID, und wechselt im gleichen Zuge den Datensatz, da unser Feld txtInhalt das letzte Steuer-element in der Aktivierreihenfolge ist (siehe Bild 3).

Die Tabulator-Taste im letzten Feld der Aktivierreihenfolge wechselt zum nächsten Datensatz.

Bild 3: Die Tabulator-Taste im letzten Feld der Aktivierreihenfolge wechselt zum nächsten Datensatz.

Tabulator-Taste abfangen

Wir müssen also eine Möglichkeit finden, die Tabulator-Taste abzufangen, wenn sich der Fokus gerade im Textfeld txtInhalt befindet. Dann soll ein Tabulator-Zeichen in den Text eingefügt und die eigentliche Funktion der Tabulator-Taste unterbunden werden.

Dies erledigen wir mit einer passenden Ereignisprozedur. Wir müssen nur noch das passende Ereignis finden. Dabei handelt es sich vermutlich um das Ereignis Bei Taste auf oder Bei Taste ab. Um das Tabulator-Zeichen zum richtigen Zeitpunkt einzufügen, schauen wir uns an, wann eines der anderen Zeichen im Textfeld ausgegeben wird – beim Herabdrücken der Taste oder beim Loslassen.

Ein kurzes Experiment zeigt schnell, dass herkömmliche Zeichen immer direkt beim Herunterdrücken der Taste ausgegeben werden. Also verwenden wir das Ereignis Bei Taste ab. Für dieses stellen wir den Wert auf [Ereignisprozedur] ein und klicken dann auf die Schaltfläche mit den drei Punkten () rechts von der Eigenschaft.

Die im nun erscheinenden VBA-Editor erscheinende Ereignisprozedur ergänzen wir um eine Anweisung, die den Wert des Parameters KeyCode dieser Ereignisprozedur im Direktbereich des VBA-Editors ausgibt:

Private Sub Inhalt_KeyDown(KeyCode As Integer, _
         Shift As Integer)
     Debug.Print KeyCode
End Sub

Damit wechseln wir wieder in die Formularansicht und betätigen im Textfeld txtInhalt die Tabulator-Taste, um den Wert für KeyCode für diese Taste zu ermitteln. Das Ergebnis lautet 9.

Wollen wir die eigentliche Funktion der Tabulator-Taste unterbinden, müssen wir also in der Prozedur prüfen, ob der Parameter KeyCode dem Wert 9 entspricht. Das erledigen wir in einer Select Case-Bedingung. Damit die übliche Funktion der Tabulator-Taste nicht ausgeführt wird, stellen wir KeyCode in diesem Fall auf den Wert 0 fest. Dies sieht dann in der Ereignisprozedur txtInhalt_KeyDown wie folgt aus:

Private Sub Inhalt_KeyDown(KeyCode As Integer, _
         Shift As Integer)
     Select Case KeyCode
         Case 9
             KeyCode = 0
     End Select
End Sub

Damit können Sie nun zumindest schon einmal die Tabulator-Taste im Textfeld txtInhalt betätigen, ohne dass das Formular direkt zum nächsten Datensatz wechselt – auch wenn noch kein Tabulator-Zeichen erscheint.

Tabulatur-Zeichen einfügen

Fehlt nur noch ein wenig Code, mit dem wir immer dann, wenn der Benutzer die Tabulator-Taste betätigt, ein Tabulator-Zeichen im Text des Textfeldes unterbringen.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar