Einzelnen Beitrag anzeigen

hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

TextInputCanvas - konzeptionelle Gedanken, Vorgehensweise, Umsetzung

  Alt 19. Jan 2017, 13:28
Liebe Mitglieder,

an dieser Stelle geht es um konzeptionelle Gedanken und Vorgehensweisen zur Erstellung eines graphischen Texteingabe-Editors. Ich weiß, es gibt das Memofeld und auch das RichEdit, ich möchte aber auch um des Lernens halber das ganze gern mal selbst anpacken.

Was ist angedacht? Ein grafischer Eingabeeditor für Texte. An sich geht es um so etwas wie es OpenOffice und MS Word machen. Buchstaben (Character) sollen via Tastatur auf einem Canvas eingetippt werden können. Dabei kann jeder Buchstabe anders aussehen (Schriftart, Schriftgröße, Farbe, Hintergrundfarbe, Fett, Kursiv, Unterstrichen, Durchgestrichen, Hochgestellt, Tiefgestellt, Umrandet, Schattiert etc.). Es gibt das schier endlose Varianten.

Wie realisiert man nun so etwas? Einige Gedanken dazu:
  • Zeilen bestehen aus 0..* Zeichen (Characters)
  • Ist die Breite aller Zeichen einer Zeile größer als die Breite des Canvas, so erfolgt ein Zeilenumbruch
  • Absätze (Paragraphs) sind eine durch erzwungene Zeilenumbrüche definiert
  • Da jeder Buchstabe unterschiedliche Eigenschaften (Schrift) haben kann, ergibt sich die Zeilenhöhe aus dem Buchstaben mit der größten Schriftart, vorausgesetzt, er ist nicht hoch-/tiefgestellt

Wenn man nun einem Canvas die Maße einer DIN A4 Seite gibt, muss man ja kalkulieren, wieviel und welcher Zeilen/Absätze auf dieser darstellbar sind, bis eine neue Seite eingefügt wird. Wie kalkuliert man das? Wie kann man CharAtPosXY realisieren.

Das ganze sieht ja danach aus, als müsste man, wie immer eigentlich, Darstellung und Struktur unabhängig voneinander angehen.

Also der Text (die Eingabe) muss irgendwo gespeichert werden (TextStorage).
Zur Darstellung muss dann geschaut werden, ob dem Text ein Style (Eigenschaften) zugewiesen sind.

Wie könnte man so etwas realisieren. Das schwierige wird ja auch sein, dass innerhalb eines Textbereiches (TextRange mit StartPosition, Length) wieder ein neues Style zugewiesen werden kann.

Ich hoffe, ich habe nicht zu kryptisch geschrieben. Ich hoffe auf Input bezüglich der Struktur und Herangehensweise für solch eine Spielerei.

Beste Grüße
  Mit Zitat antworten Zitat