![]() |
Memo mit Textobjekten gesucht
Hallo,
kennt jemand von euch eine Memo-Komponente für D2006, bei der Textteile als Objekte gehandhabt werden? Da die Frage vielleicht ein wenig wirr klingt (bin noch von gestern wach), hier noch die Erläuterung: Ich möchte einen "Textbaukasten" bereitstellen, der mit einzelnen Satzbestandteilen (aus einem TreeView) per Drag&Drop befüllt werden kann. Diese Bestandteile sollen anschließend noch in sich gekapselt sein, sollen also noch "im Stück" innerhalb des Textes verschoben werden können. Wenn der Gesamttext also "Satz 1. Satz 2. Satz 3." lautet, sollen es möglich sein, den Baustein "Satz 2." eigenständig zu verschieben, zu ändern oder zu löschen, ohne dass das Hintergrundwissen, dass der Satz 2 als eigenständiger Baustein gehandhabt wird, haben zu müssen. Ich habe es bisher mit einer Listbox versucht (habe hierbei allerdings Probleme bei der Mehrzeiligkeit, wenn ich die Texte aus dem TreeView herüberziehe, sowie mit dem Markieren des gerade eingefügten Bausteins), mit einem Treeview (hier konnte ich keine mehrzeiligen Texte einbinden) sowie mit dem Virtual StringTree (womit ich mich einfach nicht anfreunden kann). Dann habe ich noch dynamisch erzeugte Label verwendet (wobei wieder die mehrzeiligen Inhalte Probleme machten) und ein StringGrid ausprobiert (ohne Worte). Wie der geneigte Leser sieht: Es muss nicht UNBEDINGT eine Memo-Kompo sein... So langsam bin ich mit meinem Latein am Ende und kann nur noch hoffen, dass sich jemand meiner erbarmt... (und bitte, bitte nicht den Hinweis "Nimm VST" - mit dem Ding kann ich einfach nicht). Danke und Gute Nacht Opa |
AW: Memo mit Textobjekten gesucht
Ich habe mal vor 100 Jahren etwas selbst geschrieben, indem ich Adressen (also kurze Texte) zerlegt und in mehrere Panels, bzw. deren Captions geschrieben habe (für jedes Wort also ein erzeugtes Panel).
Der User konnte dann die Panels verschieben und so die Reihenfolge der Wörter ändern. Das sollte dazu dienen, die Adressen zu überarbeiten. |
AW: Memo mit Textobjekten gesucht
Ich denke auch, dass du das selbst implementieren musst.
An deiner Stelle würde ich eine Art "Verzeichniss" erstellen, in dem Verzeichnet ist, von welchem bis zu welchem Zeichen der Textbaustein xy geht. Mit der Cursorposition kannst du dann den Textbaustein auslesen und weiterverarbeiten. Z.b. über einen Button hinter den nächsten Baustein schieben ;) |
AW: Memo mit Textobjekten gesucht
Hallo,
die Idee mit den Captions hatte ich auch schon, habe es allerdings mit Labels umgesetzt. Da die Texte jedoch über mehrere Zeilen gehen können, wurde es ein wenig schwierig, da ständig irgendwo irgendwas neu berechnet werden musste. Im Moment versuche ich das Ganze mithilfe des Webbrowsers umzusetzen, indem ich die Bausteine mit Kommentaren versehe und den Quelltext auslese. Wirklich zufrieden bin ich allerdings bisher auch nicht. Falls also noch jemand eine Idee hat: Ich bin für jeden Tipp dankbar. Gruß Opa |
AW: Memo mit Textobjekten gesucht
Nun so schwer sollte das nicht sein mit TMemo, folgendes Konzept würde ich vorschlagen:
Das Memo-Feld darf allerdings primär nur zur Anzeige des Textes und zur Feststellung der Cursor-Position verwendet werden. Alle Eingaben in das Memofeld müssen umgeleitet werden in die Klasse, die alle verwendeten Textbausteine enthält. Mal ein Gedankenkonstrukt für das Einfügen eines Zeichens (ungestestet und ohne Bereichsprüfung). Weiterhin fehlt die Behandlung von DEL/BS und der Zwischenablage (Einsetzen, Ausschneiden). Die anderen Methoden müssten natürlich noch ausprogrammiert werden :)
Delphi-Quellcode:
TTextSet = class
private // Speicher auf die Memo-Referenz FMemo : TMemo; // Speicher für die Textbausteine FParts : array of string; protected // Das Memofeld mit den Text-Inhalten füllen procedure RefreshMemo; public // Das referenzierte Memo-Feld übergeben property Memo : TMemo read FMemo write SetMemo; // Ein Zeichen Key an der Stelle KeyPos einfügen procedure AddKey( Key : Char; KeyPos : integer ); // einen Textbaustein verschieben procedure MovePart( FromIndex, ToIndex : integer ); // Textbaustein hinzufügen procedure AddPart( Index : integer; const PartText : string ); // Textbaustein entfernen procedure DelPart( Index : integer ); end; procedure TTextSet.AddKey( Key : Char; KeyPos : integer ); begin // Textbaustein ermitteln idx := Low( FParts ); tpos := 0; while ( tpos + Length( FParts[ idx ] < KeyPos ) do begin Inc( tpos, Length( FParts[ idx ] ) ); Inc( idx ); end; // Zeichen im Textbaustein einfügen Insert( Key, FParts[ idx ], KeyPos - tpos ); // Das Memofeld aktualisieren RefreshMemo; // Den Cursor im Memo platzieren Memo.SelStart := KeyPos + 1; end; |
AW: Memo mit Textobjekten gesucht
Zitat:
Oder eben Dein Ansatz mit HTML und die Objekteigenschaften in Kommentaren ablegen und das Ganze in einem erweiterten WebBrowser. Die Darstellung im GUI kann ein abgeleitetes TMemo oder TRichText oder TWebBrowser sein, das im Hintergrund die Maus und den Cursor beobachtet und Deine speziellen Dinge tut. Pro Satzteil ein neues Objekt halte ich bez der Performance für problematisch, auch wenn es nur TLabels sind. PS: die WPTools können das. Userdefinierte Objekte im Text mit speziellen Verhaltensweisen meine ich. Aber die haben 1) einen Preis 2) eine ganz eigene Philosophie in der Bedienung, die manches Mal Wutausbrüche auslöst ;-) |
AW: Memo mit Textobjekten gesucht
@Sir Rufo: Den Gedanken hatte ich auch schon. Problematisch wird's, wenn die Textbausteine verändert werden können, da es dann nicht mehr funktionieren würde. Momentan habe ich knapp 1500 Bausteine, welche durch Individualisierung natürlich immens potentiert werden können...
@Connor: Momentan versuche ich die Webbrowserlösung umzusetzen, da dank HTML und CSS einige "Effekte" (wie das Hervorheben einzelner Bausteine) leichter vonstatten geht. Die WPTools habe ich mir angeschaut, aber allein schon dank des Preises hoffe ich, dass es auch noch einfachere Lösungen gibt. Zur Bedienung kann ich nichts sagen, aber das hört sich für mich so an, als wären die Komponenten für mich ähnlich dem VST einsetzbar :-) Wie gesagt: Jede Idee ist willkommen. Irgendwie muss es doch funktionieren... Gruß Opa |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz