Standard- Komponente für formatierte Texte?
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Standard- Komponente für formatierte Texte?
Gibt es im Standard- Lazarus irgendein Möglichkeit, einen Text irgendwie formatiert auszugeben?
Also irgendetwas, wie:
Hallo Welt
Geht das irgendwie?
(Klar, ich könnte ein Bild malen, aber das will ich eigentlich nicht unbedingt tun)
Das Problem: Ich kann hierfür KEINE Komponenten nachinstallieren, auch keine eigenen.
Also irgendetwas, wie:
Hallo Welt
Geht das irgendwie?
(Klar, ich könnte ein Bild malen, aber das will ich eigentlich nicht unbedingt tun)
Das Problem: Ich kann hierfür KEINE Komponenten nachinstallieren, auch keine eigenen.
-
- Beiträge: 732
- Registriert: Di 23. Aug 2016, 14:25
- OS, Lazarus, FPC: Windows 11
- CPU-Target: 64Bit
- Wohnort: Berlin
Re: Standard- Komponente für formatierte Texte?
Hallo am2,
das sollte mit einem RichMemo funktionieren, schau mal bitte hier rein:
https://wiki.freepascal.org/RichMemo
Die Komponente muss dann aber wohl erst installiert werden....
wenn das bei Dir nicht geht, könntest Du das mit einer PaintBox machen:
Diese findest Du oben bei den Komponenten "Additional" TPaintBox
Dann bei Ereignisse "OnPaint" z.B. den folgenden Code einsetzen:
Siro
das sollte mit einem RichMemo funktionieren, schau mal bitte hier rein:
https://wiki.freepascal.org/RichMemo
Die Komponente muss dann aber wohl erst installiert werden....
wenn das bei Dir nicht geht, könntest Du das mit einer PaintBox machen:
Diese findest Du oben bei den Komponenten "Additional" TPaintBox
Dann bei Ereignisse "OnPaint" z.B. den folgenden Code einsetzen:
Code: Alles auswählen
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
With PaintBox1.Canvas do begin
Font.Style:=[fsItalic]; // schräg stellen
Font.Height:=25; // Texthöhe einstellen
Font.Color:=clRed; // Textfarbe setzen
TextOut(20,20,'ich bin ein schräger roter Text');
Font.Style:=[fsBold,fsUnderline]; // Fetter Text unterstrichen
Font.Height:=16; // Texthöhe einstellen
Font.Color:=clBlue; // Textfarbe setzen
TextOut(20,50,'ich bin ein blauer Fetter Text unterstrichen');
Font.Style:=[]; // Normaler text
Font.Height:=30; // Texthöhe einstellen
Font.Color:=clLime; // Textfarbe setzen
TextOut(10,70,'H');
Font.Height:=14; // Texthöhe einstellen
Font.Color:=clGreen; // Textfarbe setzen
TextOut(28,80,'a');
Font.Height:=18; // Texthöhe einstellen
Font.Color:=clBlue; // Textfarbe setzen
TextOut(40,80,'l');
TextOut(45,77,'l');
Font.Height:=26; // Texthöhe einstellen
Font.Color:=clBlack; // Textfarbe setzen
TextOut(56,80,'o');
// usw.
end; // with canvas
end;
Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Also doch selber malen
Ich hatte gehofft, dass ich drum herum komme und man mit irgendwelchen HTML- Komponenten, Synedits oder was auch immer so etwas machen kann.
Ich hatte gehofft, dass ich drum herum komme und man mit irgendwelchen HTML- Komponenten, Synedits oder was auch immer so etwas machen kann.
-
- Beiträge: 1914
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Standard- Komponente für formatierte Texte?
am2 hat geschrieben:Ich hatte gehofft, dass ich drum herum komme und man mit irgendwelchen HTML- Komponenten, Synedits oder was auch immer so etwas machen kann.
Geht auch über das SynEdit, ist aber ein bisschen wie mit Kanonen auf Spatzen schießen und ich kann dir versprechen das es letzendlich mehr Aufwand ist als selbst zeichnen.
Wenn du aber keine Komponenten nachinstallieren kannst/willst, ist Lazarus generell wohl nicht die beste Option, da Lazarus praktisch nur Grundstrukturen zur verfügung stellt. Selbst das SynEdit ist eine Externe Komponente, sie wird mit Lazarus nur mitgeliefert weil Lazarus sie selbst verwendet. Lazarus ohne externe Packages ist doch schon sehr witzlos, dann solltest du eher .Net oder Java benutzen, die liefern viel mehr Komponenten standardmäßig mit.
Darf man fragen warum du keine externen Komponenten verwenden kannst?
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Ich muss mich wahrscheinlich mal mit Synedit beschäftigen ...
Es gibt mehrere Gründe, warum ich ohne Zusatzkomponenten auskommen will bzw. muss.
- Ich habe natürlich nicht überall Administratorrechte und um Lazarus neu zu kompilieren und die Exe auszutauschen, benötige ich welche.
- Meine Erfahrungen mit Neu Compilieren usw. waren recht störanfällig
- gelegentlich benutze ich Lazarus, um Anfängern die Grundzüge von Programmierung beizubringen. Es wäre dann eine zusätzliche Hürde, wenn ich mich zu stark von Zusatzkomponenten abhängig machen würde.
Lazarus ist für vieles meine erste Wahl
- Man kann auch Softwareprojekte noch warten, die man 10 Jahre nicht mehr angefasst hat
- Man kann relativ unkompliziert alle erforderlichen Steuerelemente plazieren und das Ganze dann mit Leben füllen
Nur mal so als Kurzinfo. Man kann das sicher noch weiter diskutieren, aber ich habe vor mehr als 30 Jahren mit dem Programmieren begonnen, ich bin da schon recht fest in meinen Ansichten
Es gibt mehrere Gründe, warum ich ohne Zusatzkomponenten auskommen will bzw. muss.
- Ich habe natürlich nicht überall Administratorrechte und um Lazarus neu zu kompilieren und die Exe auszutauschen, benötige ich welche.
- Meine Erfahrungen mit Neu Compilieren usw. waren recht störanfällig
- gelegentlich benutze ich Lazarus, um Anfängern die Grundzüge von Programmierung beizubringen. Es wäre dann eine zusätzliche Hürde, wenn ich mich zu stark von Zusatzkomponenten abhängig machen würde.
Lazarus ist für vieles meine erste Wahl
- Man kann auch Softwareprojekte noch warten, die man 10 Jahre nicht mehr angefasst hat
- Man kann relativ unkompliziert alle erforderlichen Steuerelemente plazieren und das Ganze dann mit Leben füllen
Nur mal so als Kurzinfo. Man kann das sicher noch weiter diskutieren, aber ich habe vor mehr als 30 Jahren mit dem Programmieren begonnen, ich bin da schon recht fest in meinen Ansichten
Re: Standard- Komponente für formatierte Texte?
Vergiss SynEdit. Das ist nicht für sowas gemacht. Nachdem du keine Komponenten installieren kannst, ist bei dir das TurboPowerIPro Package installiert? Sollte eigentlich, da darüber die chm-Hilfe-Dateien angezeigt werden. Wenn ja, müsste es eine Lasche "IPro" auf der Komponentenpalette geben. Damit könntest du HTML-Text ausgeben: Das TIpHtmlPanel aufs Formular klicken (auf Lasche "IPro") und folgenden Code eingeben:
Nicht unbedingt. Wenn du Lazarus in dein Home-Verzeichnis installierst, musst du kein Administrator sein.
[EDIT]
Eine wichtige Frage noch: Ist diese spezielle Ausgabe ein Unikat für einen bestimmten Einsatzzweck oder soll sie allgemein verwendet werden können? Im ersteren Fall würde ich dann nämlich gar kein HTML-Control verwenden, sondern den Text direkt auf den Canvas eines Panels oder einer Paintbox malen..
Code: Alles auswählen
const
TEXT1 = '<font style="color:Blue;font-size:26pt"><i>H</i>allo</font><font style="color:Red;font-size:36pt"><b> W</b>elt</font>';
TEXT2 = '<font style="font-size:10pt">G</font><font style="font-size:11pt">e</font><font style="font-size:12pt">h</font><font style="font-size:13pt">t</font> '+
'<font style="font-size:14pt">d</font><font style="font-size:15pt">a</font><font style="font-size:16pt">s</font> '+
'<font style="font-size:17pt">i</font><font style="font-size:18pt">r</font><font style="font-size:17pt">g</font><font style="font-size:16pt">e</font>' +
'<font style="font-size:15pt">n</font><font style="font-size:14pt">d</font><font style="font-size:13pt">w</font><font style="font-size:12pt" >i</font>'+
'<font style="font-size:11pt">e</font><font style="font-size:10pt">?</font>';
procedure TForm1.FormCreate(Sender: TObject);
begin
IpHtmlPanel1.SetHtmlFromStr(TEXT1 + '<br>' + TEXT2);
end;
am2 hat geschrieben:Ich habe natürlich nicht überall Administratorrechte und um Lazarus neu zu kompilieren und die Exe auszutauschen, benötige ich welche.
Nicht unbedingt. Wenn du Lazarus in dein Home-Verzeichnis installierst, musst du kein Administrator sein.
[EDIT]
Eine wichtige Frage noch: Ist diese spezielle Ausgabe ein Unikat für einen bestimmten Einsatzzweck oder soll sie allgemein verwendet werden können? Im ersteren Fall würde ich dann nämlich gar kein HTML-Control verwenden, sondern den Text direkt auf den Canvas eines Panels oder einer Paintbox malen..
Zuletzt geändert von wp_xyz am Do 29. Aug 2019, 14:29, insgesamt 2-mal geändert.
-
- Beiträge: 1914
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Standard- Komponente für formatierte Texte?
am2 hat geschrieben:Ich muss mich wahrscheinlich mal mit Synedit beschäftigen ...
Es gibt mehrere Gründe, warum ich ohne Zusatzkomponenten auskommen will bzw. muss.
- Ich habe natürlich nicht überall Administratorrechte und um Lazarus neu zu kompilieren und die Exe auszutauschen, benötige ich welche.
- Meine Erfahrungen mit Neu Compilieren usw. waren recht störanfällig
- gelegentlich benutze ich Lazarus, um Anfängern die Grundzüge von Programmierung beizubringen. Es wäre dann eine zusätzliche Hürde, wenn ich mich zu stark von Zusatzkomponenten abhängig machen würde.
Wie gesagt, SynEdit ist nicht das was du willst. SynEdit kann zwar was du willst, aber um es damit umzusetzen ists extrem umständlich und garantiert komplexer als einfach ne eigene Komponente dafür zu schreiben (muss ja nicht mal als Package sein)
Du brauchst für Lazarus keine Admin rechte. Zum einen kannst du Lazarus einfach überall hin kompilieren, zum anderen ist es zumindest auf Linux so, das wenn du Lazarus systemweit installierst, wenn du ein Package installierst, Lazarus in dein Homeverzeichnis kompiliert wird. d.h. Die grundinstallation die Jeder nutzer verwendet ist die selbe, die Packages und alles andere ist aber im Homeverzeichnis und benötigt damit keine Admin rechte (Wenn lazarus für sowas simples wie Pakete zu installieren sudo rechte bräuchte, wärs bei mir auch lang runter geflogen, ich geb doch keiner nicht sysadmin anwendung sudo rechte!).
Ansonsten kannst du Packages auch benutzen ohne sie in Lazarus zu Kompilieren. Dann kannst du zwar nicht schön Klicki Bunti im WYSIWYG editor machen, aber du kannst die Komponenten einfach vie TRichMemo.Create erstellen, und musst die Lazarus installation nie anfassen. Dafür einfach das PKG öffnen und statt auf Kompilieren und dann Installieren einmal Kompilieren und dann auf Zu Projekt Hinzufügen Klicken. Dann kannst dus Im Code ganz einfach benutzen
Zur störanfälligkeit beim Kompilieren kann ich sagen, bei manchen Packages gehts in die Hose (z.B. Indy meine alte Hassliebe. Kann alles was man je brauchen wird, bereitet dir aber so kopfschmerzen bis es läuft das du am liebsten deinen rechner aus dem Fenster schmeißen willst), sonst hatte ich nie probleme, und ich kompilier lazarus immer von hand (selbst die Stable versionen).
Zu dem Lazarus für Programmieranfänger geben, es sollte ne Möglichkeit geben Lazarus irgendwie Portable zu machen oder so, denn Lazarus ist großartig wenn es durchkonfiguriert ist (d.h. Alle wichtigen Packages wie Anchordocking, Sparta formeditor, jump to implementation, jedi code formatter, Projektgruppen, etc. installiert sind). Aber sonst ist Lazarus mMn. echt nicht der Brüller. Bei nem Kumpel hab ichs demletzt so gemacht als ichs ihm mal zeigen wollte, das ich Über teamviewer grad alles für ihn konfiguriert hab, denn ab dem Punkt ab dem es konfiguriert ist ists auch super anfängerfreundlich, aber ihm zu sagen was für Pakete er installieren muss ist absolut beschissen.
Privat stört mich das sogar richtig, da ich mir mein Lazarus komplett angepasst habe (Custom Farben für Syntax Highligting, Debug und Programming Window anordnung, Editoreinstellungen, etc.), da ich aber meinen PC alle paar monate neu aufsetze (ich bin echt gut darin ihn kaputt zu machen) und dann heists für mich immer erst mal mindestens 2 stunden (eher 3-4) Lazarus konfigurieren. Ich muss unbedingt mal schauen ob es nicht irgendwie ne möglichkeit gibt ein vorkonfiguriertes Lazarus zu erstellen, das ich dann immer direkt drauf ziehen kann.
am2 hat geschrieben:Lazarus ist für vieles meine erste Wahl
- Man kann auch Softwareprojekte noch warten, die man 10 Jahre nicht mehr angefasst hat
- Man kann relativ unkompliziert alle erforderlichen Steuerelemente plazieren und das Ganze dann mit Leben füllen
Böse Zungen würden jetzt sagen das kann man mit .Not genauso aber ich mag lazarus auch lieber. Nur in der Standardkonfiguration ist .Not doch angenehmer. Du installierst VS (ok das sind auch 10 GB oder so), hast dann aber schonmal alles an Komponenten was du dir so vorstellen kannst, wofür du bei Lazarus ne menge nachinstallieren müsstest. Aber ich mein Pakete installieren kostet nix, also was störts mich
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2641
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Standard- Komponente für formatierte Texte?
Warf hat geschrieben:Du installierst VS (ok das sind auch 10 GB oder so),
DAS ist das Hauptproblem dabei, das Ding ist fett wie ein Zuchtschwein. Und als ich letztens nach ein paar Tests das VS 2019 wieder runterwerfen wollte, musste der Uninstaller erst einmal ein 60 MiB-Update herunterladen und installieren bevor die Deinstallation möglich war.
Letztendlich hat man bei jedem Entwicklungssystem/Framework/Sprache irgendwelche Probleme. Bei Lazarus sind es auch nicht mehr als bei sauteuren Programmen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Vielen Dank für die guten Beiträge. Ich glaube, da möchte ich mich auch mal "erklären"
- Für mich ist die HTML- Komponente das, was ich suche. Tatsächlich wollte ich u.A. eine "einfache" Benutzerhilfe zu meinem Programm ausliefern und das als HTML zu machen, erscheint recht zielführend.
- Mit SynEdit will ich mich trotzdem mal beschäftigen, mal sehen, was ich damit anfangen kann. Falls jemand einen Link zu einem brauchbaren Tutorial hat - sehr gern
- Zum Thema Packages/Komponenten ... Ich habe immer keine Lust, stundenlang zu konfigurieren, einzustellen, gegenseitige Abhängigkeiten etc., daher mag ich OutOfTheBox. In mein Auto baue ich ja auch kein anderes Lenkrad ein, ich wasche es ja nicht einmal
- Ich entwickle kaum noch Software und wenn, dann muss ich es meist mit Python tun. M.E. ist der Begriff WriteOnly- Language da wirklich passend. Allerdings gehen einige Dinge wirklich bestechend einfach. Wenn ich das mal kombinieren kann, dann werde ich das sicher tun (aber da brauche ich mal etwas Ruhe)
- VS hatte ich auch schon mal überlegt (die 10 Gb stören mich im Moment weniger), aber auch hier: Da brauch ich erst mal etwas Ruhe
- Für die Lehre bin ich immer noch überzeugt, dass Lazarus/Pascal/Delphi der beste Einstieg ist. Du siehst sehr schnell, was Du tust. Die "Magie" dahinter ist gut beherrschbar. Die Häh- Effekte sind (von Grafikkomponenten abgesehen) relativ klein, Schleifen, Objektorientierung, Variablen, Konstanten, Ereignissteuerung ... das kann man alles recht gut erklären und benutzen. Alles ist in einer komfortablen IDE verbandelt, die man "OutOfTheBox" benutzen kann. Wenn man die Grundzüge kennt, dann könnten andere Sprachen und Umgebungen besser geeignet sein, das kommt darauf an, wohin die Reise gehen soll (Arduino/Raspi, Android, Web, Irgendwelche Plugins (anscheinend hat selbst meine Zahnbürste ein Python- Interface))
- Für mich ist die HTML- Komponente das, was ich suche. Tatsächlich wollte ich u.A. eine "einfache" Benutzerhilfe zu meinem Programm ausliefern und das als HTML zu machen, erscheint recht zielführend.
- Mit SynEdit will ich mich trotzdem mal beschäftigen, mal sehen, was ich damit anfangen kann. Falls jemand einen Link zu einem brauchbaren Tutorial hat - sehr gern
- Zum Thema Packages/Komponenten ... Ich habe immer keine Lust, stundenlang zu konfigurieren, einzustellen, gegenseitige Abhängigkeiten etc., daher mag ich OutOfTheBox. In mein Auto baue ich ja auch kein anderes Lenkrad ein, ich wasche es ja nicht einmal
- Ich entwickle kaum noch Software und wenn, dann muss ich es meist mit Python tun. M.E. ist der Begriff WriteOnly- Language da wirklich passend. Allerdings gehen einige Dinge wirklich bestechend einfach. Wenn ich das mal kombinieren kann, dann werde ich das sicher tun (aber da brauche ich mal etwas Ruhe)
- VS hatte ich auch schon mal überlegt (die 10 Gb stören mich im Moment weniger), aber auch hier: Da brauch ich erst mal etwas Ruhe
- Für die Lehre bin ich immer noch überzeugt, dass Lazarus/Pascal/Delphi der beste Einstieg ist. Du siehst sehr schnell, was Du tust. Die "Magie" dahinter ist gut beherrschbar. Die Häh- Effekte sind (von Grafikkomponenten abgesehen) relativ klein, Schleifen, Objektorientierung, Variablen, Konstanten, Ereignissteuerung ... das kann man alles recht gut erklären und benutzen. Alles ist in einer komfortablen IDE verbandelt, die man "OutOfTheBox" benutzen kann. Wenn man die Grundzüge kennt, dann könnten andere Sprachen und Umgebungen besser geeignet sein, das kommt darauf an, wohin die Reise gehen soll (Arduino/Raspi, Android, Web, Irgendwelche Plugins (anscheinend hat selbst meine Zahnbürste ein Python- Interface))
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Im Anhang: FillHTML()
Schreibt einen formatierten Text in eine HTML- Komponente. Nicht sonderlich einfallsreich, aber um eine Hilfe einigermaßen zu formatieren, reicht es mir.
Schreibt einen formatierten Text in eine HTML- Komponente. Nicht sonderlich einfallsreich, aber um eine Hilfe einigermaßen zu formatieren, reicht es mir.
- Dateianhänge
-
- FillHtml.pas
- (1.83 KiB) 232-mal heruntergeladen
- af0815
- Lazarusforum e. V.
- Beiträge: 6219
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Standard- Komponente für formatierte Texte?
Mittlerweile ist das installieren von Komponenten keine Hexerei und kein herumdoktorn mit Abhängigkeiten. Dank OPM.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Kurzer Nachtrag zur HTML- Komponente: Gibt es eigentlich auch eine Möglichkeit, den dargestellten Code auszulesen?
Also in "AngezeigterText" sollte dann im Grunde das drin stehen, was mit "Text" hineingeschubst wurde.
Das scheint aber nicht vorgesehen zu sein, oder habe ich da etwas übersehen?
Code: Alles auswählen
Text := '<font style="color:Blue;font-size:26pt"><i>H</i>allo</font><font style="color:Red;font-size:36pt"><b> W</b>elt</font>'
pnl.SetHtmlFromStr(text);
AngezeigterText := pnl.GetHTML()
Also in "AngezeigterText" sollte dann im Grunde das drin stehen, was mit "Text" hineingeschubst wurde.
Das scheint aber nicht vorgesehen zu sein, oder habe ich da etwas übersehen?
-
- Beiträge: 1914
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Standard- Komponente für formatierte Texte?
am2 hat geschrieben:Also in "AngezeigterText" sollte dann im Grunde das drin stehen, was mit "Text" hineingeschubst wurde.
Das scheint aber nicht vorgesehen zu sein, oder habe ich da etwas übersehen?
Vorab ich kenn die Komponente nicht, aber das ist zu erwarten. HTML ist eine DOM Struktur wie XML, wird also intern in einer Baum Datenstruktur dargestellt. Um den text wieder rausgeben zu können müsste die Komponente also sowohl den text als auch den Baum vorhalten, Außerdem sind Modifikation an der DOM Struktur nicht trivial direkt in Textänderungen zu übertragen. Was möglich wäre Text aus dem DOM zu generieren (ein so genannter prettyprinter), dabei gehen aber vorige Formatierungsoptionen (wie newlines, Kommentare, spacing, tabs, etc.) verloren. Viele Komponenten bieten auch einen PrettyPrinter (da du den zum Debugger des Parsers verwenden kannst) ich gehe mal davon aus das die Entwickler der Komponenten das nicht gemacht hat weil einfach extra aufwand ist, den er nicht brauchte, bzw. wo er gedacht hat das es niemand braucht.
Schau mal ob du an den DOM baum ran kommst, dann kannst du ihn selbst PrettyPrinten
-
- Lazarusforum e. V.
- Beiträge: 116
- Registriert: Di 21. Dez 2010, 09:59
- OS, Lazarus, FPC: Win (L 0.9.26 beta FPC 2.2.2)
- CPU-Target: 32 Bit
Re: Standard- Komponente für formatierte Texte?
Warf hat geschrieben:am2 hat geschrieben:Also in "AngezeigterText" sollte dann im Grunde das drin stehen, was mit "Text" hineingeschubst wurde.
Das scheint aber nicht vorgesehen zu sein, oder habe ich da etwas übersehen?
...Was möglich wäre Text aus dem DOM zu generieren (ein so genannter prettyprinter), dabei gehen aber vorige Formatierungsoptionen (wie newlines, Kommentare, spacing, tabs, etc.) verloren. Viele Komponenten bieten auch einen PrettyPrinter (da du den zum Debugger des Parsers verwenden kannst) ich gehe mal davon aus das die Entwickler der Komponenten das nicht gemacht hat weil einfach extra aufwand ist, den er nicht brauchte, bzw. wo er gedacht hat das es niemand braucht.
Schau mal ob du an den DOM baum ran kommst, dann kannst du ihn selbst PrettyPrinten
Erscheint mir zu aufwändig für den Moment. Dass die Formatierung verloren gegangen wäre, wäre mir egal gewesen. Es wäre nur zu Kontrollzwecken gewesen.
Für meinen konkreten Fall habe ich letztlich eine statische HTML- Seite gebastelt, die als Hilfe funktioniert (natürlich ohne Bilder), diese als Ressource in das Programm eingebunden und bei Programmstart geladen. Lässt sich relativ leicht warten und - einmal eingerichtet - macht es keine Späne. So lässt sich natürlich nicht alles verwenden, was HTML kann (kein Java- Script, keine Bilder ...), aber darauf kommt es mir auch nicht an.
Also vielen Dank an alle Helfer.
Re: Standard- Komponente für formatierte Texte?
Ja, der Text steckt in der Klasse IpHtml, die von IproHtmlPanel verwaltet wird. Ich wäre aber momentan nicht sicher, ob man an alle benötigten Daten von außerhalb der Klasse rankommt. Aber es ist kein Problem, sich den Text unabhängig vom IProPanel zu holen. Es gibt dafür in der FCL die wunderbare Unit fasthtmlparser: der durchläuft den HTML-Text Zeichen für Zeichen und merkt sich den Text zwischen den Tag-Markierungen '<' und '>'. Immer wenn ein Tag geschlossen wird, dann wird für den seit '<' gesammelten Text ein Event OnFoundTag ausgelöst, dem der gefundene Text in normaler Schreibweise ("ActualTag") und in Großschreibung ("NoCaseTag") übergeben wird. Und wenn ein Tag geöffnet wird, dann wird der seit dem letzten '>' gesammelte Text ans Event OnFoundText übergeben. Man muss also nur einen Event-Handler für OnFoundText schreiben, in dem der übergebenen String an einen Sammelstring angehängt wird. Etwas unüblich ist hier, dass der Handler das TPicture erzeugen muss, aber es nicht selbst wieder freigeben darf!
Darüber hinaus gibt es - ich glaube seit Laz 2.0 - die Unit "html2textrender" mit der man dasselbe ohne eigenen Parser erledigen kann. Allerdings funktioniert dies mit deinem Text nicht sauber, so dass ich darauf nicht näher eingehen möchte.
OK - JavaScript kann das IProHtmlPanel nicht (und das ist auch gar nicht so schlecht), aber Bilder kann es schon. Nur ist es etwas komplizierter: Du musst zusätzlich zum Panel eine TIpHtmlDataProvider Komponente aufs Formular klicken und mit der Eigenschaft "DataProvider" des Panels verbinden. Für den DataProvider schreibst du dann einen Handler für das Ereignis OnGetImage - dieser erhält die URL des aktuell anzuzeigenden Bildes und muss dieses "irgendwie" an ein TPicture übergeben. "Irgendwie" heißt: wenn die URL eine Internetadresse ist, holst du das Bild z.B. fphttpclient aus dem Internet, wenn es eine lokale Datei ist, lädst du das Bild direkt von Datei usw.
Beachte, dass dies eine der wenigen Stellen ist, an denen gegen die Regel "Alles was ich erzeuge, muss ich auch aufräumen" verstoßen wird - der Event-Handler muss das Picture erzeugen, DARF es aber auf keinen Fall zerstören, da dies im IpHTMLPanel geschieht!
Code: Alles auswählen
uses
fasthtmlparser;
uses
html2textrender,
fasthtmlparser;
type
THtmlTextParser = class(THTMLParser)
private
FSammelText: String;
procedure FoundTextHandler(AText: String);
public
constructor Create(AText: String);
property SammelText: String read FSammelText;
end;
constructor THtmlTextParser.Create(AText: String);
begin
inherited;
OnFoundText := @FoundTextHandler;
FSammelText := '';
end;
procedure THtmlTextParser.FoundTextHandler(AText: String);
begin
FSammelText := FSammelText + AText;
end;
// ---------------
function TForm1.ExtractText(const HTMLText: String): String;
var
parser: THtmlTextParser;
begin
parser := THtmlTextParser.Create(HTMLText);
try
parser.Exec;
Result := parser.SammelText;
finally
parser.Free;
end;
end;
Darüber hinaus gibt es - ich glaube seit Laz 2.0 - die Unit "html2textrender" mit der man dasselbe ohne eigenen Parser erledigen kann. Allerdings funktioniert dies mit deinem Text nicht sauber, so dass ich darauf nicht näher eingehen möchte.
am2 hat geschrieben: So lässt sich natürlich nicht alles verwenden, was HTML kann (kein Java- Script, keine Bilder ...), aber darauf kommt es mir auch nicht an.
OK - JavaScript kann das IProHtmlPanel nicht (und das ist auch gar nicht so schlecht), aber Bilder kann es schon. Nur ist es etwas komplizierter: Du musst zusätzlich zum Panel eine TIpHtmlDataProvider Komponente aufs Formular klicken und mit der Eigenschaft "DataProvider" des Panels verbinden. Für den DataProvider schreibst du dann einen Handler für das Ereignis OnGetImage - dieser erhält die URL des aktuell anzuzeigenden Bildes und muss dieses "irgendwie" an ein TPicture übergeben. "Irgendwie" heißt: wenn die URL eine Internetadresse ist, holst du das Bild z.B. fphttpclient aus dem Internet, wenn es eine lokale Datei ist, lädst du das Bild direkt von Datei usw.
Code: Alles auswählen
procedure TForm1.IpHtmlDataProvider1GetImage(Sender: TIpHtmlNode;
const URL: string; var Picture: TPicture);
begin
Picture := TPicture.Create;
Picture.LoadFromFile(URL);
end;
Beachte, dass dies eine der wenigen Stellen ist, an denen gegen die Regel "Alles was ich erzeuge, muss ich auch aufräumen" verstoßen wird - der Event-Handler muss das Picture erzeugen, DARF es aber auf keinen Fall zerstören, da dies im IpHTMLPanel geschieht!