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

Rund um die LCL und andere Komponenten
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 »

Hallo!

Nochmal zurück zum Fehler:

Eingabe in RichMemo1: Ärger

Wenn man nach dem RichMemo1.SaveRichText(mystream);
noch ein myStream.SaveToFile('./test2'); einfügt, so sieht das so aus:


{\rtf1\ansi\ansicp1252\deff0\deflan1033{\fonttbl{\f0\fcharset0 Liberation Sans;}}\f0\fs18 \pard\li0\sl200\slmult1 \u228 rger\f0\fs18 \par }


Das Ä wird korrekt codiert, alle anderen Buchstaben sind auch da. Sieht alles nach korrektem RTF aus.

Also muss der Fehler im LoadRichText liegen.

Winni

wp_xyz
Beiträge: 4890
Registriert: Fr 8. Apr 2011, 09:01

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

Beitrag von wp_xyz »

Ich denke, das ist schon behoben. Es gibt in svn einen Kommentar vom 20.Jan: "richmemo: adding an additional skip-character after unicode character", und ich kann den Fehler auch nicht nachvollziehen (unter gtk2), wenn ich die CCR-Version von RichMemo nehme. Die Änderungen in diesem Commit ist eine Zeile in der Datei richmemortf.pas, function GetRTFWriteText: Gegen Ende wird die Zeile

Code: Alles auswählen

else Result:=Result+'\u'+IntToStr(word(u[i]))+' '; // adding a blank "space" character replacement
ersetzt durch

Code: Alles auswählen

else Result:=Result+'\u'+IntToStr(word(u[i]))+'  '; // adding a blank "space" character replacement
(Zwei Leerzeichen am Ende der Anweisung statt einem).

Da waren aber noch weitere Änderungen, ich weiß nicht, ob dies allein reicht. Am besten du holst dir die CCR-Version (https://sourceforge.net/p/lazarus-ccr/s ... /richmemo/).

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 »

wp_xyz hat geschrieben:
Mi 5. Aug 2020, 22:31
Ich denke, das ist schon behoben. Es gibt in svn einen Kommentar vom 20.Jan: "richmemo: adding an additional skip-character after unicode character", und ich kann den Fehler auch nicht nachvollziehen (unter gtk2), wenn ich die CCR-Version von RichMemo nehme. Die Änderungen in diesem Commit ist eine Zeile in der Datei richmemortf.pas, function GetRTFWriteText: Gegen Ende wird die Zeile

Code: Alles auswählen

else Result:=Result+'\u'+IntToStr(word(u[i]))+' '; // adding a blank "space" character replacement
ersetzt durch

Code: Alles auswählen

else Result:=Result+'\u'+IntToStr(word(u[i]))+'  '; // adding a blank "space" character replacement
(Zwei Leerzeichen am Ende der Anweisung statt einem).
Ich bin sehr begeistert: Das eine Leerzeichen hat es tatsächlich gebracht! Vielen herzlichen Dank für die Hilfe, die mir viele mühsame Klimmzüge erspart!

Warf
Beiträge: 1910
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, 18:15
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.
Also ich würde sehr wahrscheinlich ein StringGrid nehmen und mittels OnDrawCell event (DefaultDraw auf False setzen) die einzelnen elemente einfach selbst zeichnen. Somit kann man die formatieren und colorieren wie man will, und hat gleichzeitig die vorteile vom StringGrid für Tabellendarstellung

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!

Falls Du sehr an dem RichMemo-Feld hängst, kannst Du sogar noch folgenden Trick machen:

Das RichMemo-Feld im StringGrid unsichtbar machen und dann den Text im RichMemo anzeigen.
Und umgekehrt: Wenn der Text im RichMemo geändert wird, dann den Text ins StringGrid-Feld übertragen.

Das hab ich schon mal mit einem Memo gemacht und es ging einwandfrei.

Winni

pluto
Lazarusforum e. V.
Beiträge: 7179
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 »

und was spricht genau gegen HTML und CSS?
Du erzeugst, die Dateien mit deinem Programm und kannst sie dann ausdrucken, vielleicht sogar mit dem HTML Panel.
Vielleicht wäre sogar ein kleiner WebServer, eine Mögliche Lösung. Der die Pläne im Passenden Format ausliefert.

Du bearbeitest ja bestimmt nicht die Stundenpläne Manuell oder? Sondern da ist doch ein Generator zwischen.
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 »

Es gibt ein sehr verbreitetes Programm zur Stundenplanerstellung - Untis - das keinen brauchbaren HTML-Export liefert. Es gibt ihn zwar, aber er erzeugt Tabellen in Tabellen, was zu allerhand Problemen und viel Handarbeit führt, wenn man die Pläne nachbearbeiten möchte (muss), außerdem gibt es Schwierigkeiten, wenn diese ineinander verschachtelten Tabellen in Joomla-Seiten eingebunden werden sollen.
Mein Programm liest den XML-Export von Untis aus und stellt das Ergebnis erst mal in einer Tabelle dar (ich hab mich in RichMemo verliebt, weil ich da problemlos einzelne Wörter kursiv und/oder fett setzen kann, mehr möchte ich nicht). Dann kann von Hand nachgearbeitet werden. Außerdem können z.B. noch Überschriften mit Klassennamen oder Gültigkeit des Plans etc. automatisch eingefügt werden. Das nachgearbeitete Ergebnis wird dann in HTML exportiert und kann direkt in Joomla (das ist für unsere Schule relevant) importiert werden.

Das Programm gibt es eigentlich schon seit 5 Jahren, aber die alte Version produziert auf aktuellen Stundenplänen immer mehr Fehlermeldungen, was vermutlich damit zu tun hat, dass unsere Stundenpläne jetzt etwas anders gestaltet werden und dass das Untis-XML natürlich nicht öffentlich dokumentiert ist. Und wie das bei Laienprogrammierern nach 5 Jahren halt so ist: man hat zwar noch den alten Quelltext, aber 1.) möchte man in einer neuen Version alles viel besser machen (RichMemos!) und 2.) weiß man sowieso nicht mehr, was man da vor 5 Jahren geschrieben hat.
Die neue Version ist jetzt aber auch schon recht weit gediehen und sollte eigentlich am Wochenende erste Ergebnisse liefern (ob das klappt, ist aber noch fraglich). Für einen Umstieg auf Stringgrid ist es daher jetzt zu spät, zumal es da ja auch keine wortweisen Formatierungsmöglichkeiten gäbe.

pluto
Lazarusforum e. V.
Beiträge: 7179
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 »

thaden hat geschrieben:Mein Programm liest den XML-Export von Untis aus und stellt das Ergebnis erst mal in einer Tabelle dar (ich hab mich in RichMemo verliebt, weil ich da problemlos einzelne Wörter kursiv und/oder fett setzen kann, mehr möchte ich nicht).
Wenn du, XML Daten hast, kannst du daraus ja "richtige" Tabellen machen. Aber gut, wenn es RichMemo sein soll....
thaden hat geschrieben:Dann kann von Hand nachgearbeitet werden. Außerdem können z.B. noch Überschriften mit Klassennamen oder Gültigkeit des Plans etc. automatisch eingefügt werden. Das nachgearbeitete Ergebnis wird dann in HTML exportiert und kann direkt in Joomla (das ist für unsere Schule relevant) importiert werden.
Gut, es wäre etwas "Arbeit", daraus ein WebServer zu erstellen....
thaden hat geschrieben:Für einen Umstieg auf Stringgrid ist es daher jetzt zu spät, zumal es da ja auch keine wortweisen Formatierungsmöglichkeiten gäbe.
Soweit ich weiß, kann man eingeschränkt auch ein Stringgrid Formatieren. Jedenfalls pro Zelle.
Wäre was für die nächste Version...
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 »

...nächste Version hoffentlich erst wieder in 5 Jahren oder so. Wer weiß, was dann alles geht. Jetzt erstmal die aktuelle Version ans Laufen kriegen und dann verfeinern, möglichst vor Schulbeginn, weil ich sonst sehr viel Handarbeit am Hals habe.

Das XML ist leider nicht in Tabellenform, sondern muss erst ausgelesen und interpretiert werden. Wenn es dich sehr interessiert, habe ich dir mal einen anonymisierten Ausschnitt (die kompletten Dateien sind immer so ca. 1MB groß) aus dem Export angehängt. - Der Ausschnitt ist die Darstellung eines Fachs in einer Klasse. Von diesen Blöcken gibt es dann halt sehr viele, die z.T. noch zwischen gerader/ungerader Kalenderwoche unterscheiden, evt. ohne feste Raumzuordnung sind und vielleicht mehrere, manchmal aber auch gar keine Lehrer*innen haben.
Dateianhänge
units-export.xml
(1.75 KiB) 73-mal heruntergeladen

pluto
Lazarusforum e. V.
Beiträge: 7179
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 »

Was ist das für ein Komischer Stundenplan. Bei mir standen da auch noch Fächer drauf....
Oben gab es eine Zeile mit den Wochentage und die ersten Spalten waren die Stunden.
Dann gab es die einzelnen fächer und in welchen Räumen das Stattfand.

aber wo ist das Problem beim parsen? Es gibt XML Klassen dafür in FPC.

Leider gibt die XML Datei nicht viel her...
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 »

Tja, was soll ich sagen - ich hätte eigentlich auch lieber einen schönen formatierten Stundenplan, statt einer XML-Datei. Und weil Untis die Daten so exportiert, wie es das nun mal tut, schreibe ich ja gerade an meinem Programm. Das Parsen ist lästig, aber kein grundsätzliches Problem, das ist bereits erledigt.

Fach steht übrigens drin:
SU_E
. Es handelt sich hier um den gesamten Englischunterricht der 5a im Schuljahr 2016/17, der findet in Raum 202 statt und das Lehrer*innenkürzel habe ich zu XXX anonymisiert.

pluto
Lazarusforum e. V.
Beiträge: 7179
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 »

Was nutzt du zum Parsen der XML Datei?
Eigentlich ist XML relativ einfach aufgebaut. Die XML Datei von dir ist leider nur ein Fragment.
Wenn du eine längere XML Datei hochladen könntest, könnte ich schon mehr damit anfangen.... kannst ja alle Lehrer Kürzel einfach ersetzten, wie du es bereits getan hast.
Gibt es außer beim Lehrer Name, bedenken beim Datenschutz ?

Kannst du auch mal zeigen, wie das Ergebnis von dir aussieht(Als Screenshot)?
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 »

Ich parse nicht mit den in Lazarus eingebauten Methoden, weil es mir schwieriger erschien, mich da einzuarbeiten als einfach die Datei Zeile für Zeile einzulesen und selber auszuwerten. Das ist aber wie gesagt schon gelöst und funktioniert.

Wenn dich die Datei sehr interessiert, kann ich mal eine anonymisierte Version produzieren, aber wenn ich die Namen alle nur durch "XXX" ersetze, hast du davon nichts, ich muss sie eher pseudonymisieren. Das kann aber was dauern bei ca 1MB und 60 bis 80 Namen.

Für den Datenschutz müsste ich eigentlich noch die Fächer pseudonymisieren, damit man nicht aus Fächerkombinationen auf Namen schließen kann, sonst sehe ich außer den Schuldaten keine schützenswerten Daten. Leider finde ich jetzt auf die Schnelle keine XML-Beispieldatei, die das ganze vielleicht schneller lösen würde.

Den aktuellen Stand der Dinge findest du im angehängten Screenshot. Jetzt muss das html generiert werden, was eigentlich nicht sehr schwierig ist. Ich hänge aber gerade an der Frage, wie ich es schaffe, html-Schnipsel in die xmlpropstorage zu schmuggeln. als .text klappt es offenbar nicht. Ich könnte natürlich ein verborgenes Memo oder so nutzen, aber vielleicht gibt es ja noch eine sauberere Lösung. [edit: es geht doch über die .text-Property. Mein Fehler lag anderswo.]
Dateianhänge
ksnip_20200807-003704.png
ksnip_20200807-003704.png (66.52 KiB) 2132 mal betrachtet

pluto
Lazarusforum e. V.
Beiträge: 7179
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 »

thaden hat geschrieben:Ich parse nicht mit den in Lazarus eingebauten Methoden, weil es mir schwieriger erschien, mich da einzuarbeiten als einfach die Datei Zeile für Zeile einzulesen und selber auszuwerten. Das ist aber wie gesagt schon gelöst und funktioniert.
Auf den ersten Blick erscheint das so, aber wenn man sich ein paar Tage damit befasst hat, geht es sehr gut und du hast einfach mehr Freiheiten.
Ich parse damit sogar HTML Dateien....
thaden hat geschrieben:Wenn dich die Datei sehr interessiert, kann ich mal eine anonymisierte Version produzieren, aber wenn ich die Namen alle nur durch "XXX" ersetze, hast du davon nichts, ich muss sie eher pseudonymisieren. Das kann aber was dauern bei ca 1MB und 60 bis 80 Namen.
Brauchst du nicht unbedingt...

Das Screenshot sieht ja schon mal gut aus...
MFG
Michael Springwald

Antworten