Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Textausgabe mit Formatierungen (https://www.delphipraxis.net/132232-textausgabe-mit-formatierungen.html)

mani64 8. Apr 2009 11:32


Textausgabe mit Formatierungen
 
Hallo,

es ist schon ein Weilchen her, dass ich mit Pascal programmiert habe. Auch mein Delphi ist eine ältere Version (5.0).
Ich würde gerne folgendes realisieren, weiss aber nicht, wie ich es angehen soll:

Ich habe eine Textdatei (als Logfile von einem PC-Spiel erstellt), die gewisse Textformatierungen enthält (z.B. "Escape" - also ASCII 27 - und danach ein "G" bedeutet, dass der folgende Text grün dargestellt werden soll; oder [u] bedeutet, dass der Text unterstrichen werden soll).

Ich möchte nun gerne, diese Textdatei auf dem Bildschirm ausgeben und die Formatierung dabei natürlich umsetzen. Wie gehe ich diese Sache an?
Kann ich dafür z.B. TMemo verwenden? Was muss ich abändern? Oder muss ich die ganze Ausgabe selbst herstellen (mit TextOut) und dann auch alle Cursor-Bewegungen selbst kontrollieren? Der Text braucht nicht editiert zu werden, allerdings hätte ich gerne eine Suchfunktion dabei.

Vielen Dank für Hinweise

Luckie 8. Apr 2009 11:54

Re: Textausgabe mit Formatierungen
 
Da wirst du wohl die Logdatei selber parsen müssen und dann in einem RichEdit formatiert ausgeben.

mani64 8. Apr 2009 12:10

Re: Textausgabe mit Formatierungen
 
Ja, das mit dem Parsen war mir klar. TMemo kann wohl Text nicht unterschiedlich färben, sondern nur einheitlich darstellen.
TRichEdit - hm, das RTF wirkt auf mich sehr kompliziert; damit hab ich noch nicht gearbeitet.

Danke für die Antwort

TheMiller 8. Apr 2009 12:27

Re: Textausgabe mit Formatierungen
 
Dann speicher den Inhalt des RichEdit mit der Base64-Codierung. Es gibt hier eine Base64.pas. Damit kannst du die Formatierung mit speichern und anschließend mit laden!

mani64 8. Apr 2009 12:35

Re: Textausgabe mit Formatierungen
 
Nein, nein, ich brauch den Logfile nicht zu speichern, ich will ihn nur ausgeben. Ich muss nur noch raus bekommen, wie ich dann z.B. von der Farbe schwarz auf Farbe grün umschalte, um ein Wort in grün auszugeben, und wie ich wieder zurück wechsle.

p80286 8. Apr 2009 12:39

Re: Textausgabe mit Formatierungen
 
Hallo Mani64,

die Alternative zu luckies vorschlag wäre natürlich auf einem Canvas mit textout zu arbeiten. Was aber eigentlich nur zu Lernzwecken zu empfehlen ist.

Von RTF solltest Du Dich nicht schrecken lassen, da RTF ja "nur" das Speicherformat ist.
Im Prinzip gehst Du so vor:

Text in Richedit laden
suche Grün
Text der Grün sein soll mit Selstart/sellength markieren
mit SelAttributes grün einfärben
fertig

das wiederholst Du so lange bis es keine Formatierungsanweisungen mehr in Deinem Text gibt.

Gruß
K-H

Klaus01 8. Apr 2009 13:15

Re: Textausgabe mit Formatierungen
 
.. auch wenn es vielleicht keiner lesen will,
aber das sollte auch via TStringGrid (draw).

Grüße
Klaus

mani64 8. Apr 2009 14:19

Re: Textausgabe mit Formatierungen
 
Mit TStringGrid? und dann den ganzen Text in eine Zelle schreiben - oder wie? Wieviel Text kann denn eine Zelle fassen? Der logfile kann schon mehrere MB groß werden.

Luckie 8. Apr 2009 14:21

Re: Textausgabe mit Formatierungen
 
also ich würde ein StringGrid eher für ungeeignet halten.

p80286 8. Apr 2009 14:30

Re: Textausgabe mit Formatierungen
 
Hallo Zusammen,

naja wenn das Logfile "augenscheinlich" formatiert ist, wäre ein Stringgrid vielleicht keine schlechte Idee, aber Grün und Fett und.... muß trotzdem umgesetzt werden oder dann doch nicht?

Gruß
K-H

Klaus01 8. Apr 2009 21:17

Re: Textausgabe mit Formatierungen
 
Zitat:

Zitat von mani64
Mit TStringGrid? und dann den ganzen Text in eine Zelle schreiben - oder wie? Wieviel Text kann denn eine Zelle fassen? Der logfile kann schon mehrere MB groß werden.

Ein LogFile ist soweit ich sie keine (wenn sie lesbar sind) zeilenorientert.
Es muss also ncht das ganze LogFile in eine Zelle geschrieben werden.
Auch ist eine Zeile eines LogFiles meistens strukturiert,
hier würde sich anbieten ein jedes Feld in eine Zelle zu schreiben.

Auch muss das StringGid nicht das ganze LogFile beinhalten
sondern nur den sichtbaren/lesbaren Ausschnitt.

Grüße
Klaus

mani64 8. Apr 2009 21:58

Re: Textausgabe mit Formatierungen
 
Hi,

danke für alle eure Ideen. Ich glaube, ich versuche es doch mal mit einem TConversion-Objekt. So viel muss ich gar nicht Umwandeln, ich verwende ja nur einige wenige Formatierungen, die ich dann in RTF-Schlüsselwörter umsetzen muss.
Brauche ich dafür zwei verschiedene Streams? Einen, in den Conversion den logfile einliest und einen als Ausgabe, der dann an Richedit.lines weiter gegeben wird?
Hat damit jemand Erfahrung? Nach dem, was in der Hilfe steht, soll die Konvertierung danach immer automatisch erfolgen (für alle files mit der gleichen Dateikennung).

Ach, hab noch ein zweites Problem: Das PC-Spiel schreibt kontinuierlich in den Logfile, den ich mir gleichzeitig (übers Netzwerk) auf dem Laptop anschauen will. Das müsste doch eigentlich gehen, ich will ja nur Lesen, das Spiel nur schreiben. Wie bekomme ich mit, dass der file wieder länger geworden ist, wenn ich ihn normal erzeuge mit FileStream.Create(<Datei>, fmOpenRead OR fmShareDenyRead) - lässt sich das so kombinieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 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