Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
FreePascal / Lazarus
|
AW: Gedankenaustausch zu WYSIWYG RTF Control
17. Mär 2019, 00:21
Mit diesem Thema befasse ich mich schon seit 2007 ungefähr.
Immer wieder holt mich das Thema ein. Es kommt auf deine Interne Struktur an.
In laufe der Zeit habe ich ein Konzept entwickelt, was allerdings recht aufwendig ist. Es gibt zunächst einen Statischen Teil und dann gibt es einen Dynamischen Teil.
Das ist wichtig. Denn die Schrift/Schriftgröße beeinflusst die Anzahl der Wörter die pro Zeile angezeigt werden können. Dabei spielt es keine Rolle, die Breite vom Fenster oder von einer DIN A4 Seite anhängt. Du hast immer ein Automatischen Zeilenumbruch. Bei mir ist das Wortweise.
Dann hast du e
Spannend wird es beim Dynamischen Teil, der wird jedes mal komplett neu berechnet. Bei jeder Größen Änderung vom Fenster(Das wird etwas einfacher bei einem reinen Editor)
Der Dynamische Teile besteht aus eine Line/LineItem Struktur.
Alles wird als Box betrachtet, jede Box kann nur eine Formatierung Anzeigen.
Um deine Frage zu beantworten, hole ich soweit aus.
Wenn die LineItems Struktur Zentral ist, ist deine Frage leicht zu beantworten:
Wenn du mit der Maus z.b. irgendwo hinklickst müssen in meinem Fall folgende Schritte ausgeführt werden(Grob geschrieben):
1. Welche LineItem wurde angeklickt?
2. Dann muss die Pixel breite von jedes Zeichen Einzeln berechnet werden.
3. Die Maus Position ist ja, die Klick Position von deiner "Komponente",
d.h. die Pixelbreite, pro Zeichen muss Zusammen Addiert werden und Relativ zur Box berechnet werden.
Die Box speichert(ist einfacher) die X Position sowie die Y Position.
Das Zusammenaddieren wird so lange gemacht, bis die Position größer oder gleich der Maus Position ist.
Wenn du eine Editor Komponente schreibst, wo jedes Zeichen gleich Groß ist, ist es einfach, dann kann man es berechnen.
Das Thema ist nicht ganz leicht.
Michael Springwald MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
|