AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung [FMX] Korrekter Umgang mit Linebreak unter verschiedenen Plattformen
Thema durchsuchen
Ansicht
Themen-Optionen

[FMX] Korrekter Umgang mit Linebreak unter verschiedenen Plattformen

Ein Thema von Rollo62 · begonnen am 8. Sep 2020 · letzter Beitrag vom 8. Sep 2020
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.096 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
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
893 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: [FMX] Korrekter Umgang mit Linebreak unter verschiedenen Plattformen

  Alt 8. Sep 2020, 11:04
Ich hatte an der Stelle Glück, dass ich in der Anwendung beim Speichern schon immer | statt #13#10 abgespeichert hatte und dies On-The-Fly beim Anzeigen ersetze. So musste ich beim Wechsel auf Delphi 10.4 nur dieses Ersetzen anpassen, damit es kompatibel wird.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.096 Beiträge
 
Delphi 12 Athens
 
#3

AW: [FMX] Korrekter Umgang mit Linebreak unter verschiedenen Plattformen

  Alt 8. Sep 2020, 11:11
Ich hatte an der Stelle Glück, dass ich in der Anwendung beim Speichern schon immer | statt #13#10 abgespeichert hatte und dies On-The-Fly beim Anzeigen ersetze. So musste ich beim Wechsel auf Delphi 10.4 nur dieses Ersetzen anpassen, damit es kompatibel wird.
Hallo Phillip, ja an so einen Platzhalter hatte ich auch gedacht,
aber warum, denn CrLf funktioniert ja auch als Platzhalter gut.
So kann ich die Daten zumindest 1:1 überall verwenden, und CrLf macht erstmal nicht viel kaputt,
das kann noch jeder Texteditor ohne Schwierigkeiten anzeigen.
Der Einzige Nachteil von CrLf wäre das ich immer zwei statt einem Zeichen ersetzen muss.

Ich frage mich aber ob das Ersetzen von Zeichen nicht generell zu Vermeiden wäre.
Vielleicht ist es auch eine Lösung das Akzeptieren von CrLf, Lf, Cr generell in die FMX-Routinen einzubauen,
denn da findet ja die Interpretation statt.
Das hiesse aber womöglich an zig Stellen in den FMX Code einzugreifen,
ich habe mir das noch nicht angesehen.
Mit viel Glück sind es ja auch nur ein paar Stellen

Geändert von Rollo62 ( 8. Sep 2020 um 11:13 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 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