Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi RichEdit.Text wird überschrieben (https://www.delphipraxis.net/20220-richedit-text-wird-ueberschrieben.html)

himitsu 14. Apr 2004 21:41


RichEdit.Text wird überschrieben
 
Ja, schonwieder ich :(


Also ich weise der Eigenschaft Richedit.Text in OnCreate (TForm) einen Wert zu, ums genauer zu sagen, übergeb' ich einen String im RichTextFormat.

Allerdings wird beim 1. Anzeigen der Komponente der zugewiesene Wert durch den noch in Lines stehenden Text ersetzt und das, was in Lines steht wird angezeigt. (auch wenn nichts in Lines steht / Lines = '')
Wenn ich dann zur Laufzeit was zuweise. dann geht alles super, nur eben nicht vorm 1. Anzeigen der Komponente.

Ich hab's auch schon statt Text, mit SetText versucht.
Refresh und co. hilf auch nichts.

Wenn etwas über Linnes zugewiesen wird, dann geht es auch.
Meinen String kann ich aber wegen des RichTextFormats auch nicht an Lines.Text, oder Lines.Add übergeben, wenn ich's so versuche, dann kommt ein Laufzeitfehler.

Christian Seehase 14. Apr 2004 21:45

Re: RichEdit.Text wird überschrieben
 
Moin Himitsu,

ist das ein fester Text oder kann der variieren?

himitsu 14. Apr 2004 21:54

Re: RichEdit.Text wird überschrieben
 
Der kann variieren - wir beim Programm start aus einem Array gelesen und wärend der Laufzeit auch mal geändert, also es wird ein anderer String aus'm Array geladen.

[EDIT]
Ahhh, hab jetzt durch Zufall 'ne Möglichkeit rausgefunden.

RichEdit überschreibt nicht nur beim 1. Anzeigen (einlesen von Lines), sondern generell beim 1. Lese-/Schreibzugriff auf Lines den Wert in Text.

Also hab' ich jetzt einfach in OnCreate (TForm)
Delphi-Quellcode:
RichEdit3.Lines.Clear;
reingeschrieben, vor'm Zuweisen des Strings an Text.
Delphi-Quellcode:
S := RichEdit3.Lines.Text
hätte auch ausgereicht, aber das Andere ist einfacher, da ich eh keine freie Stringvariable hab.



Warum die Eigenschaft Text überhaupt "einfach" beim 1. Mal übergangen wird, ist mir dennoch ein Rätsel :gruebel:

Christian Seehase 15. Apr 2004 15:48

Re: RichEdit.Text wird überschrieben
 
Moin Himitsu,

die Eigenschaft Text wird beim Lesen aus den Lines zusammengebaut.
Beim Schreiben werden dann die Lines aus dem an Text übergebenen Wert neu erzeugt.
Text existiert also nicht für sich, sondern ist nur für den zusammengefassten Zugriff auf Lines zuständig.

himitsu 15. Apr 2004 17:09

Re: RichEdit.Text wird überschrieben
 
Es ist aber dennoch etwas Eigenartiges dran, denn nachdem die Lines ausgelesen, oder geändert wurden (entweder durch einen Zugriff auf Lines, oder durch anzeigen der Komponente) kann ich Text was zuweien und es geht, davor geht nicht's. Es schein sogar so, als wenn RichEdit die Zuweisung an Text sogar einfach übersieht?

Wenn vorher etwas in Text geschrieben wird, dann ist es auch genauso, wie es reingeschrieben wird drin - auch mit den ganzen Formatierungsbefehlen des RichTextFormats.

Wenn aber später etwas in Text geschrieben wird, dann werden die Formatierungsbefehle daraus entfernt und es ist nur noch der reine Text in .Text drin. Die Formatierungen werden dann anscheinend an die entsprechenden Stellen (Attributes) verschoben.

Christian Seehase 15. Apr 2004 18:24

Re: RichEdit.Text wird überschrieben
 
Moin Himitsu,

könntest Du nicht einfach einen kleine Umweg machen?
Den Inhalt des Arrays in einen (Memory)Stream schreiben, und dann RichEdit.Lines aus dem Stream laden?

Dann müsste die Formatierung eigentlich erhalten bleiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz