Moin, Moin,
um meinen kleinen Editor auf Basis des RichEdits etwas komfortabler zu gestalten, versuche ich eine Tabulator-Funktionalität bereitzustellen.
Zuerst habe ich versucht, mit SendMessage() und EM_SETTABSTOPS die Tabulatorpositionen zu setzen. Ohne jeden Erfolg.
MSDN sagt, dass auf diesem Wege die Tabulatorpositionen in einem "MultiLineControl" gesetzt werden. Da das aber offenbar nicht funktioniert, gehe ich im Augenblick davon aus, dass TRichEdit (im Gegensatz zu TMemo) kein MultiLineControl ist, auf dass diese Aussage zutrifft. Ist das korrekt, oder habe ich etwas falsch gemacht?
Ein (erster) Blick in die Delphi-Hilfe brachte dann die Erkenntnis, dass Tabulatoren mit RichEdit.Paragraph.Tab[Idx]:=~~ gesetzt werden können. Ok, intern wird dann SendMessage() mit EM_SETPARAFORMAT verwendet, um die Tabulatorpositionen zu setzen.
Nun beobachte ich aber ein mir seltsam erscheinendes Verhalten, und das ist der eigentliche Grund meiner Nachfrage an dieser Stelle:
Ich erwarte, nun für jeden Absatz (Paragraph) individuelle Tabulatorpositionen setzen zu können, bevor im Absatz Text manuell erfasst wird und diese Tabulatorpositionen
danach durch Einfügen von Tabs (TabTaste) während der Eingabe anspringen zu können. Also ganz so, wie man es z.B. in Word machen kann. Bei dieser Vorgehensweise haben die gesetzten Tabulatorpositionen aber keinerlei Auswirkung; es werden immer nur die Default-Positionen angesprungen?!
Nur in der entgegengesetzten Reihenfolge funktioniert es: Zuerst im Absatz den Text inklusive Tabs erfassen, dann die Tabulatorpositionen neu setzen - nun wird der Text wie erwartet ausgerichtet. Aber diese Reihenfolge ist leider total unkomfortabel!
Fragen:
Mache ich da etwas falsch, oder ist dieses absonderliche Verhalten eine Eigenart des RichEdits?
Ist das Verhalten im RTF-Format begründet, dass die Festlegung von Tabulatorpositionen nur bestehenden Text (d.h. bereits vorhandene TabStops) ausrichten kann?
Wie/Wo werden die Default-Tabstops definiert?