Experimenteller Prototyp einer RichEdit Variante Text Manger Komponente mit den Aufgaben eines Editors.
Ich habe schon verschiedene Wege und Test Projekte zu diesem Thema erstellt und versucht umzusetzen. Mein letzter versuch war der PlEdit. Das Projekt geht auch in eine andere Richtig. Das Ziel ist es eine Komponente zu erstellen mit der Soruce-Code geschrieben werden kann.
Jetzt habe ich jedoch ein anders Ziel beim TextManger. Das Ziel ist es eine art RichEdit Komponente zu erstellen. Die aber nicht Kompatibel sein muss mit der von Delphi. Es währe Vorteilhaft, aber für mich kein unmittelbares Ziel.
Diese Idee ist zwar nicht schlecht, verbraucht aber recht viel speicher Platzt(ram) wenn größere Texte Geladen werden sollen. Es gibt hier auch einige Vorteile. Ich habe mehrmals versucht dieses Prinzip umzusetzen. Mein letzter ist PlEdit der auch recht viele Fortschritte macht und es sieht auch so aus, als ob er „Fertig“ wird, eines Tages.
Ich habe auch versucht auf Bases einer TStringList eine Editor Komponente zu schreiben. PlEdit basierte am Anfang tatsächlich auf eine TStringList. Aber das habe ich dann irgendwann in laufe der Zeit geändern. Bei der TStringList Variante ist das Hauptproblem das meines Erachtens beim Zeichnen ständig alles Geparst werden muss. Oder man überlegt sich eine Einfache Klassen Struktur in der ein Text rein geladen wird, wenn ein Text geladen wird und der User kann mithilfe bestimmte Methoden und Eigenschaften(Property) einfach die Text Formatierungen Modifizieren. Allerdings würde dieses Vorgehen mit Sicherheit auch mehr Speicher Platzt beanspruchen als andere Lösungen, weil der Text doppelt im Speicher gehalten werden müsste.
Diese Idee habe ich schon öfter ausprobiert. Erst gestern habe ich wieder versucht diese Idee umzusetzen. Die Umsetzung bisher gefällt mir recht gut und es klappt auch bisher alles.
Das Prinzip dieser Idee ist ganz einfach. Erstmal muss geklärt werden was es heißt Objekte/Klassen zu minimieren.
Wir nehmen z.b. diesen Text:
Das Wetter ist heute Schön.
Wie ist das Wetter ?
Das währen jetzt für mich 7 Objekte.
heuteEs gibt zwei Objekte arten in der Liste, der eine ist einfach der Text an sich zusammen mit dem Style, also dem Aussehen. Und einmal der Zeilenumbruch, wobei hier unterschieden werden könnte zwischen zwei arten, einmal der Manuel vom User eingefügte Zeilenumbruch und einmal der Weiche vom System eingefügte Zeilenumbruch. Der Vorteil ist hier halt, dass es relativ leicht sein sollte eine art Wordwarp Funktion einzubauen wie z.b. in Word, OpenOffice oder auch in HTML Browsern gibt. Der Text wird solange gelesen bis er an der Breite des Sichtbaren Fensters stößt und dort umgebrochen wird.
Auch beim einfügen von Manuellen Zeilenumbrüchen sollte es einfacher werden, da einfach nur eine „Text“ Marke eingefügt werden muss, somit kann ich überall in der Zeile so eine Marke einfügen und der Text wird Automatisch umgebrochen, bei meinem PlEdit muss ich unterscheiden zwischen drei Möglichkeiten: a) der Cusor steht am Anfang der Zeile b) der Cursor Steht Mittendrin c) Der Cursor steht am Rande der Zeile. Das währe hier nicht der Fall.
Das Haupt Problem ist bisher immer noch das Scrollen. Dank meines PlEdit Komponente ist mir jedoch vieles Klar geworden wie das umgesetzt werden kann. Ich nehme eine Buffer Variable von Typ TBitMap. Weiß ihr bei jeder Änderung eine neue Größe zu. Zeichnet dort den Sichtbaren Teile vom Text rein. Den Sichtbaren teil vom Text muss ich erst suchen in der Objekte Liste. Fertig. Theoretisch. Aber aus Erfahrung weiß ich das es nicht so einfach sein wird
Ich möchte erstmal gerne folgende Formatierungen einbauen um ein Text zu gestalten:
später möchte ich noch
Erstmal möchte ich nur ein einfache ini oder XML Datei laden können, später natürlich möchte auch andere Formate laden können wie z.b. die OpenOffice Wormate, word, rtf, pdf, html und soweiter. Ich möchte den Weg nehmen den ich bei meinem Paint2 Projekt gegangen bin: Dort habe ich eine Basses Klasse erstellt, die alles zu verfügung gestellt hat was beim laden eines Textes notwendig ist. Somit kann ich für jedes Neue Format einfach von dieses Basses Klasse ableiten. Außerdem soll es noch eine art Dateiverwaltungs Klasse geben, die sich darum kümmert das die Richtige Klasse erstellt wird beim richtigen Datei Format. D.H. der User ruft nur auf: LoadFromFile und z.b. anhand der Dateiendung erkennt das Programm das Format, später soll es noch den Header untersuchen, ob das wirklich das richtige Format.
Mein Ziel ist es eine art Umgebung zu erstellen in den recht viele Datei Formate rein geladen werden soll. Erstmal stecke ich meine Ziele natürlich nicht so hoch sondern Relativ gering. Siehe punkt 2.1 ersten abschnitt
.
Ich möchte schritt weise vorgehen. Mit den Einfachsten anfangen und erstmal für eine optimale Klassen Struktur entscheiden. Ich denke das ist beiden Projekt besonders Wichtig. Wenn man nicht 1000 Mal neu Anfangen möchte.
Die Struktur sollte einfach und gleichzeitig erweiterbar/Anpassungsfähig sein. Bevor ich überhaupt richtig Anfangen kann. Das Thema RichEdit Komponenten finde ich recht Spanend und hoffe sehr das ich eines entfernten Tages auch soweit bin eine Fertig zu haben. Den namen „Text Manger“ gefällt mir eigentlich recht gut. Der Name hebt sich von den anderen recht gut ab finde ich.
Damit der User jeder Taste Ändern kann soll es extra für diese Aufgabe einen Tastenmanger geben. Den habe ich schon für mein PlEdit erstellt.
Der User soll die Möglichkeit haben, dass Erschnungs Bild der Kompletten Komponenten nach seinen Bedürfnissen anzupassen. Voreingestellt sollte die System Einstellungen sein.