RichMemo und (Memory-)Stream und ...Umlaute

Rund um die LCL und andere Komponenten
thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

Liebes Forum,
bis jetzt habe ich immer nur durch Mitlesen profitiert, aber mein aktuelles Problem kriege ich durch Forumsuche und Googeln leider nicht gelöst:

Ich möchte gerne den Inhalt vieler RichMemos speichern und später wieder herstellen können. Das ist mit einem MemoryStream und SaveRichText/LoadRichText im Prinzip möglich, leider geht dabei nach jedem Umlaut immer ein Zeichen verloren. Wenn ich "Verändern" kopiere, kommt "Verädern" (ohne das n) an.

Das angehängte Miniprojekt sollte das Problem verdeutlichen: Wenn ich in das linke RichMemo etwas eintippe und dann den Button klicke, kommt rechts eine verstümmelte Version an.

Ich habe mir schon die Finger und Augen wundgegoogelt, zu Umlauten und Kodierung gibt es ja Unmengen zu lesen - aber eine Lösung habe ich nicht gefunden.

Irgendwelche Ideen?
richmemotest.zip
(128.33 KiB) 91-mal heruntergeladen

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von pluto »

Bei mir unter Linux mint 19.3, klappt es Problemlos. Ich verwende Lazarus V2.1.0.
MFG
Michael Springwald

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

..oh, sorry: vergessen zu erwähnen:

Debian unstable, Gtk2, Lazarus 2.0.8.+dfsg1.

2.1 ist in Debian noch nicht angekommen... auch nicht in Ubuntu.

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

...habe mir gerade auf einen anderen Rechner die neuesten debs von der Lazarus-Seite (lazarus-project_2.0.10-0_amd64.deb, fpc-laz_3.2.0-1_amd64.deb, fpc-src_3.2.0-1_amd64.deb) heruntergeladen und installiert, dann Richmemo aus dem Paketmanager in Lazarus nachinstalliert und das Problem tritt noch immer auf. Nicht der Umlaut selber geht verloren, sondern das Zeichen nach dem Umlaut.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Warf »

Unter windows 10 tritt das ganze auch nicht auf

PS: in deinem beispiel fehlt ein myStream.Seek(0, soFromBeginning); zwischen dem save und dem load damit es funktioniert

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Winni »

Hi!

Hab gerade die Demo runtergeladen und unter Suse Tumbleweed /Lin64, fpc 3.04, Lazarus 2.010 laufen lassen.

Ich kann den Fehler bestätigen: keine Umlaute und der Buchstabe danach geht auch in die Wicken.

* Bug Report schreiben
* Und in der Zwischenzeit nicht so modernes Zeugs wie Streams benutzen:

Code: Alles auswählen

RichMemo1.Lines.SaveToFile('./test');
RichMemo2.Lines.LoadFromFile('./test');      
Funktioniert einwandfrei!!

Winni

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

Bugreport... ich weiß ja nicht mal, ob das Problem beim Stream oder beim Richmemo liegt.

Liebend gerne würde ich ja auf den Stream verzichten - aber leider benötige ich den nicht, um auf die Festplatte zu schreiben, sondern um den Inhalt von RichMemos schnell austauschen und wiederherstellen zu können. Im Originalprojekt geht es um Stundenpläne für eine Schule; da sollen die Stunden (z.B. 5Tage mal 14 Stunden) in je ein RichMemo eingetragen werden. Da es ja sehr viele Klassen gibt, von denen immer nur eine dargestellt wird, müssen die Inhalte der nicht dargestellten Klassen irgendwo zwischengelagert werden.

Komisch übrigens: Der Umlaut selber ist bei mir vorhanden.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Warf »

thaden hat geschrieben: Mi 5. Aug 2020, 14:06 Bugreport... ich weiß ja nicht mal, ob das Problem beim Stream oder beim Richmemo liegt.
Dann finds raus ;)

1. du kannst einfach so n string in einen memorystream schreiben und wieder lesen und testen ob es funktioniert
2. du kannst den text vom richmemo in den memory stream schreiben lassen und als string rauslesen lassen und schauen obs funktioniert
3. du kannst nen string in den memorystream schreiben und mit dem richmemo auslesen lassen und schauen obs funktioniert
4. du könntest mal schauen obs am widgetset liegt, denn anscheinend funktioniert es mit windows forms bei mir und bei pluto unter einem noch unbekannten ws auch. Du solltest das ganze also auch mal auf verschiedenen widgetsets probieren

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Winni »

thaden hat geschrieben: Mi 5. Aug 2020, 14:06 - aber leider benötige ich den nicht, um auf die Festplatte zu schreiben, sondern um den Inhalt von RichMemos schnell austauschen und wiederherstellen zu können.

Hi!

Hast Du es wirklich so eilig????

Meine Lösung mit

Code: Alles auswählen

RichMemo1.Lines.SaveToFile('./test');
RichMemo2.Lines.LoadFromFile('./test');  
dauert auf meinem Rechner 0.114 Millisekunden.
Da Du Lehrer bist, darfst Du Dir selbst ausrechnen, wieviel Sekunden das sind.

Wir leben hier nicht mehr 1980 mit IDE-Platten ohne Cache!
Immer diese Hetze.

Winni

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Warf »

Winni hat geschrieben: Mi 5. Aug 2020, 14:33 Wir leben hier nicht mehr 1980 mit IDE-Platten ohne Cache!
Immer diese Hetze.

Winni
Man sollte aber wenigstens ein Temporäres verzeichnis anlegen, damit man nicht die platte mit dateien zumüllt. Dann liegt die datei sogar auch (wahrscheinlich, kommt aufs os an) im ram und die zugriffszeiten sind nicht viel schlechter als die von nem memorystream

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

Winni hat geschrieben: Mi 5. Aug 2020, 14:33 Hast Du es wirklich so eilig????
Es geht um ca. 25 Stundenplände mit je 6 x 14 Stunden, also 25x6x14=2100 Streams (oder halt Dateien). Das scheint mir etwas viel des Guten, wenn auch möglicherweise selbst das kein Zeitproblem wäre.

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

Ich habe die Variante mit den Dateien gerade ausprobiert - sie funktioniert, aber sie speichert nicht die Formatierungen, auf die es mir ja gerade ankommt.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von Warf »

Mal ne ganz dumme Frage, warum benutzt dur dafür überhaupt Richmemos?

Wenn ich mich an meine Schulzeit zurückerinnere waren Stundenpläne immer in Tabellenform, wäre eine Tabulare Komponente (z.B. StringGrid) nicht da deutlich besser geeignet?

thaden
Beiträge: 16
Registriert: Mi 15. Aug 2012, 10:14
OS, Lazarus, FPC: Debian unstable, Lazarus 2.0.8+dfsg-1, fpc-3.0.4
CPU-Target: AMD64
Wohnort: Aachen

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von thaden »

Es sind in der Tat Tabellen, und ich hatte eine ältere Version auch mal mit einem StringGrid angefangen und bin dann auf Memos und jetzt RichMemos umgestiegen. Ich glaube, an den StringGrids störte außer der fehlenden Formatierung auch der schwierigere Umgang mit Mehrzeilern.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: RichMemo und (Memory-)Stream und ...Umlaute

Beitrag von pluto »

Ich würde sie "einfach" nach HTML und CSS Exportieren und mit einem Browser deiner Wahl ausdrucken lassen.
Das ist das einfachste. Für HTML und einfachstes CSS könntest du das HTML Panel nutzen...

Es gebe da, nach das KMemo, aber ich meine, dass kann keine Tabellen.
MFG
Michael Springwald

Antworten