Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#1

[FMX] Korrekter Umgang mit Linebreak unter verschiedenen Plattformen

  Alt 8. Sep 2020, 10:38
Hallo zusammen,

ja nach Platform gibt es unterschiedliche Linebreaks, also Windows CrLf, eigentlich alle anderen Platformen nutzen nur jeweils ein Zeichen Cr bzw. Lf.

Um das zu kapseln gibt es die sLinebreak Konstante, die das jeweils gültige LineBreak für die Plattform enthält.

Soweit, so gut.

Ich hatte bisher immer Multiline-Strings mit CrLf als generellen Marker definiert, zum Definieren von Variablen, zum Speichern, für Felder in DB.

Das wurde auch immer gut verarbeitet, und bei der Anzeige richtig dargestellt.

In neueren Versionen gibt es da aber Fehler bei der Zeilendarstellung,
also CrLf wird als zwei Zeilen interpretiert.
Das wäre auch verständlich, weil beide Zeichen ja im Prinzip eine neue Zeile einleiten können.

Jetzt frage ich mich wie man am Besten damit umgehen soll.

Ich tendiere das so zu handhaben, wie bisher.
# Im Speicher, File, DB, Netzwerk wird mit dem generischen CrLf gespeichert.
# Bei der Anzeige werden die generischen CrLf in das jeweilige sLineBreak just-in-time konvertiert.

Das hat den Vorteil das ich Daten generell auf allen Platformen gleich halte.
Es gibt aber den Nachteil das ich bei jedem Anzeigen das generische CrLf ersetzen muss (ausser bei Windows).

Das Ersetzen z.B. so:
    LTxt := StringReplace( LTxt, CrLf, sLineBreak, [TReplaceFlags.rfReplaceAll]);
Ich frage mich ob es da vielleicht bessere Methoden gibt um das CrLf zu berücksichtigen.

Man könnte z.B. das just-in-time Konvertieren nur einmal durchführen, ö.ä.,
aber ich fürchte der Verwaltungsaufwand und Fehlermöglichkeiten dafür werden viel höher.

Es wäre auch denkbar einen speziellen "MultiLine String" Typ dafür anzulegen,
auch das hätte gewisse Vor- und Nachteile.

Wie könnte man das Ganze optimieren ?
  Mit Zitat antworten Zitat