Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.
Tabulator in Rich-Text-Feldern
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.
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).
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 Steuerelement, in diesem Fall auf das Feld TextID, und wechselt im gleichen Zuge den Datensatz, da unser Feld txtInhalt das letzte Steuerelement in der Aktivierreihenfolge ist (siehe Bild 3).
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:
Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.