Discussion:
Word Wrap in RichEdit
(zu alt für eine Antwort)
Manfred Polak
2017-10-01 22:44:26 UTC
Permalink
Moin!

Mein neulich hier erwähntes Datenbankprojekt mit Nachschlagewerken
nimmt konkrete Formen an. Dabei tritt jetzt folgendes Problem auf. In
einem DBGrid steht eine Liste mit Titeln von Artikeln, die in Gestalt
von Rich Text in der Datenbank liegen. Bei Doppelklick auf einen Titel
geht ein neues Formular mit einem RichEdit auf, und der betreffende
Artikel wird darin angezeigt. Aber dabei funktioniert Word Wrap nicht
richtig.

Hier mal zwei Screenshots. Wenn für das RichEdit die Eigenschaft
WordWrap deaktiviert ist, sieht das so aus:

Loading Image...

Und mit Word Wrap so:

Loading Image...

Und das ist Murks. Es ist nicht so, dass es überhaupt kein Word Wrap
gibt, denn dann würden die beiden Bilder ja gleich sein. Aber der
Umbruch erfolgt nicht am tatsächlichen Fensterrand, sondern viel
weiter rechts. Und je mehr ich das Fenster in die Breite ziehe, desto
kleiner wird der verschluckte Anteil. Wenn ich das Fenster maximiere,
dann sehe ich auch den ganzen Text. Aber das ist natürlich Sch... zum
Lesen.

Was ist da los? Liegt das am Rich Text, an den Properties des RichEdit
oder an der Art, wie ich es befülle? Letzteres mache ich so:

procedure TForm1.DBGrid1DblClick(Sender: TObject);
var EssayNr, Essay: string;
begin
EssayNr := DBGrid1.SelectedField.DataSet.FieldByName('EssayNr').AsString;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('select EssayText from Essay where EssayNr = ' + EssayNr);
DataModule2.ADOQuery1.Open;
while not DataModule2.AdoQuery1.eof do
begin
Essay := DataModule2.AdoQuery1.FieldByname('EssayText').AsString;
DataModule2.AdoQuery1.Next;
end;
Form3.Caption := 'Kindlers Literaturlexikon ' +
DBGrid1.SelectedField.DataSet.FieldByName('EssayTitel').AsString;
Form3.Show;
Form3.RichEdit1.Text := Essay;
end;

Merkwürdig ist auch, dass es bei längeren Texten keine vertikale
Scrollbar gibt, obwohl ich das aktiviert habe. Aber wenigstens kann
ich mit dem Mausrad scrollen, so dass das kein echtes Problem ist.
Falls es eine Rolle spielt, geschrieben und kompiliert wurde das mit
Turbo Delphi von 2006. In der aktuellen Starter Edition fehlen ja die
Datenbankkomponenten.


Manfred
Achim Kalwa
2017-10-02 11:01:51 UTC
Permalink
Moin,
Hier mal zwei Screenshots. Wenn für das RichEdit die Eigenschaft > WordWrap deaktiviert ist, sieht das so aus:> >
http://home.mnet-online.de/polak/Kindler_1.png> > Und mit Word Wrap so:>
http://home.mnet-online.de/polak/Kindler_2.png
Wie breit ist denn das RichEdit auf dem Form? Platziere mal das RichEdit
links oben auf dem Form (so bei 10, 10); und ziehe dann die untere
rechte Ecke das RichEdits bis in die Nähe der Form-Ecke. Dann im
RichEdit die Eigenschaft "Anchors" auf Left, Top, Right, Bottom setzen.
Merkwürdig ist auch, dass es bei längeren Texten keine vertikale
Scrollbar gibt, obwohl ich das aktiviert habe. Aber wenigstens kann
ich mit dem Mausrad scrollen, so dass das kein echtes Problem ist.
Dass Du den vertikalen ScrollBar nicht siehst (obwohl aktiviert) deutet
ebenfalls darauf hin, dass das RichEdit breiter ist als das Form.
Was ist da los? Liegt das am Rich Text, an den Properties des RichEdit
An Deinem Code liegt es nicht; aber der ist dennoch unglücklich
formuliert. Liefert die SQL-Abfrage "select EssayText from..." wirklich
mehr als einen Treffer? Also ist die EssayNr nicht eindeutig? In Deinem
Code überliest Du mittels while-Schleife alle gefundenen Einträge bis
auf den Letzten; dessen Daten verwendest Du für die Anzeige.
Ich würde erwarten, dass die SQL-Abfrage nur genau einen Treffer
liefert. Dann kannst Du Dir die while-Schleife und AdQuery1.Next sparen.


Gruß
Achim
Manfred Polak
2017-10-02 14:01:01 UTC
Permalink
Post by Achim Kalwa
Wie breit ist denn das RichEdit auf dem Form? Platziere mal das RichEdit
links oben auf dem Form (so bei 10, 10); und ziehe dann die untere
rechte Ecke das RichEdits bis in die Nähe der Form-Ecke. Dann im
RichEdit die Eigenschaft "Anchors" auf Left, Top, Right, Bottom setzen.
Das RichEdit sollte das gesamte Form ausfüllen, und die Anchors waren
bereits gesetzt. Aber beim Zurechtziehen des RichEdit bin ich offenbar
rechts über das Ziel hinausgeschossen, ohne es zu merken. Und auf
die Idee, nachträglich die Width von Form und RichEdit zu vergleichen,
bin ich nicht gekommen. Jetzt passt es.
Post by Achim Kalwa
Dass Du den vertikalen ScrollBar nicht siehst (obwohl aktiviert) deutet
ebenfalls darauf hin, dass das RichEdit breiter ist als das Form.
Bingo, Scrollbar ist jetzt auch da. Schon mal danke dafür.
Post by Achim Kalwa
An Deinem Code liegt es nicht; aber der ist dennoch unglücklich
formuliert. Liefert die SQL-Abfrage "select EssayText from..." wirklich
mehr als einen Treffer?
Nein, nur einen.
Post by Achim Kalwa
Also ist die EssayNr nicht eindeutig? In Deinem
Code überliest Du mittels while-Schleife alle gefundenen Einträge bis
auf den Letzten; dessen Daten verwendest Du für die Anzeige.
Ich würde erwarten, dass die SQL-Abfrage nur genau einen Treffer
liefert.
So ist es.
Post by Achim Kalwa
Dann kannst Du Dir die while-Schleife und AdQuery1.Next sparen.
Das war auch meine ursprüngliche Idee, aber da bekam ich eine
Fehlermeldung: "Inkompatible Typen: 'string' und 'procedure,
untyped pointer or untyped parameter'". Ich weiß jetzt nicht mehr
genau, wie ich das gemacht hatte. Wie ich neulich schon schrieb, ist
Datenbankprogrammierung noch Neuland für mich. Wahrscheinlich
war ich mit meinem urprünglichen Versuch nur knapp neben der
richtigen Idee. Jedenfalls habe ich es mir jetzt nochmal angeschaut
und die Schleife weggelassen, und es funktioniert jetzt auch.
Manchmal braucht man halt einen kleinen Umweg.


Manfred

Loading...