Gesamt in einer String-Variable? Als Liste? Direkt im Speicher? Es wäre in den meisten Fällen für kurze Eingaben, aber größere Texte sollten natürlich auch ohne Einbrüche verarbeitet werden können.
Text Editor
Text Editor
Möchte via Canvas ein reguläres Text Editor - Steuerelement schreiben. Allerdings ist diese Art von Steuerelement doch etwas speziell
. Bevor ich jetzt mit der besten Theorie anfange, wollte ich mal in die Runde fragen, ob jemand damit Erfahrungen hat wie der Text am besten gehandhabt wird.
Gesamt in einer String-Variable? Als Liste? Direkt im Speicher? Es wäre in den meisten Fällen für kurze Eingaben, aber größere Texte sollten natürlich auch ohne Einbrüche verarbeitet werden können.
Gesamt in einer String-Variable? Als Liste? Direkt im Speicher? Es wäre in den meisten Fällen für kurze Eingaben, aber größere Texte sollten natürlich auch ohne Einbrüche verarbeitet werden können.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Text Editor
2 Dimensionalles SpeicherArray sowie extra Variablen, die Cursorpostition, Selektionen usw. festhalten.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Text Editor
Als erstes solltest du mal eine (für deinen Zweck) geeignete Prozedur für den (automatischen) Zeilenumbruch schreiben.
Das heißt, eine Prozedur, der man zB einen String und eine FontID übergibt, und welche dann die resultierenden Zeilen-Strings zurückgibt, jenachdem, wie der Text aussieht und das Canvas breit ist.
Das heißt, eine Prozedur, der man zB einen String und eine FontID übergibt, und welche dann die resultierenden Zeilen-Strings zurückgibt, jenachdem, wie der Text aussieht und das Canvas breit ist.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Text Editor
Doppelt verkettet Liste für die Strings, ein Element pro Zeile. Dazu eine Struktur, die Informationen über das DokumentcOoki3druqs hat geschrieben:Gesamt in einer String-Variable? Als Liste? Direkt im Speicher? Es wäre in den meisten Fällen für kurze Eingaben, aber größere Texte sollten natürlich auch ohne Einbrüche verarbeitet werden können.
speichert, z.B. Cursorposition, ListIndex der obersten Zeile, Dokument- und Dateiname, usw.
CreateDocument() erstellt und initialisiert diese Struktur. Vorteil ist, Du kannst 20 Dokumente erstellen (also 20 Files öffnen),
brauchst aber nur 1 CanvasGadget zu öffnen. Austausch der Document-Struktur und neu zeichnen, schon wird eine
andere Datei zum editieren angezeigt.
Bei der doppelt verketteten Liste mit den Strings kommt es noch darauf an, welche Features Du haben möchtest.
Soll das ganze Dokument nur einen Font und eine Farbe haben, kannst Du das in Document speichern.
Sollen unterschiedliche Fonts, Farben, Styles (Bold, Italic, ..) gemischt werden, musst Du diese Zusatzinformationen
noch speichern. Entweder direkt im String wie "Hallo [ u][col=$445566]Welt[/col][ /u]!", oder performanter in einem
anderen Linkedlist-Eintrag pro Zeile. Oder gleich jeden Char einzeln, mit Optionen pro Char (Style, Farbe, usw).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Text Editor
Seid ihr mal so lieb und könnt ihr mal ein Beispiel bringen.Doppelt verkettet Liste für die Strings, ein Element pro Zeile. Dazu eine Struktur, die Informationen über das Dokument
speichert
Hatte erst vor, es in den Anfängerbereich zu posten.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Re: Text Editor
Den Zeilenumbruch (falls angewendet) sowie Formatierungen sind kein Problem. Komplexer wird es dann, wenn Zeilen-übergreifend Text selektiert wird und dann beispielsweise durch "Einfügen" überschrieben. Deshalb ist die Handhabung grundlegend.
Ein gesamter Pool wäre da einfacher, da sich alles am Stück behandeln lässt. Allerdings wird die PB interne String-Verarbeitung bei großen Texten immer langsamer, da beim hinzuketten soweit ich weis der gesamte neu aufgebaut wird.
Für den Zeilenumbruch wäre sicher eine Liste am bequemsten gewesen. Ich würde mich sehr freuen wenn sich jemand daran beteiligen möchte, da ich mit anderen Steuerelementen doch noch sehr ausgelastet bin. Das Canvas kann dann wie erwähnt direkt mit dem ScrollArea gekoppelt werden.
Wichtig wäre noch das von Anfang an Einzüge mit einberechnet werden, damit der Editor theoretisch als Image in einem anderen Canvas eingesetzt werden kann.
Ein gesamter Pool wäre da einfacher, da sich alles am Stück behandeln lässt. Allerdings wird die PB interne String-Verarbeitung bei großen Texten immer langsamer, da beim hinzuketten soweit ich weis der gesamte neu aufgebaut wird.
Für den Zeilenumbruch wäre sicher eine Liste am bequemsten gewesen. Ich würde mich sehr freuen wenn sich jemand daran beteiligen möchte, da ich mit anderen Steuerelementen doch noch sehr ausgelastet bin. Das Canvas kann dann wie erwähnt direkt mit dem ScrollArea gekoppelt werden.
Wichtig wäre noch das von Anfang an Einzüge mit einberechnet werden, damit der Editor theoretisch als Image in einem anderen Canvas eingesetzt werden kann.