AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastReport: RFT Länge ermitteln

Ein Thema von haentschman · begonnen am 9. Feb 2023 · letzter Beitrag vom 13. Feb 2023
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#1

FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 09:18
Hallöle...

SOLL:
Ich will ein Child Band entsprechend dem INHALT (Textzeichen = 0) eines RTF Feldes ausblenden.

Das Datenfeld ist gefüllt. Auch bei leerer Anzahl von Zeichen sind ja Steuerzeichen drin...normal.

Bei den fixen RTF Feldern habe ich mir im Delphi procedure gemacht die über die .Lines die Zeichen emittelt, und die eine "VisibleChild" Variable Tue oder False einstellt. Im Report werte ich dann die Variable aus.

Nun habe ich aber RTF Felder in den Detaildaten...da kann ich mit der Variable nix anfangen.

Problem:
Egal welches Event z.B. procedure RichPositionOnAfterData(Sender: TfrxComponent); ich nehme, die RichPosition.RichEdit.Lines sind immer leer. Das Feld hat zu diesem Zeitpunkt den RTF Text zur Verfügung.

Frage:
Wie komme ich an die Lines?

PS: Fastreport Forum ist dürftig und hat keine Antwort.

Danke

Geändert von haentschman ( 9. Feb 2023 um 09:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#2

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 09:45
Hat das RichText-Control des FastReport auch sowas, wie ein Delphi-Referenz durchsuchenTRichEdit.PlainText,
womit man steuern kann, wie das Streaming arbeitet?


Bzw. eigentlich .Lines.PlainText, was im Lines.SaveToStream/LoadFromStream steuert, ob beim EM_STREAMIN/EM_STREAMOUT ein SF_TEXT+SFUNICODE oder SF_RTF verwendet wird.
Alles Andere verwendet z.B. EM_GETLINE, WM_GETTEXT und Dergleichen, welches nur auf Text und nicht auf den PlainText (RTF) zugreift.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#3

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 10:00
Danke...

Zitat:
Hat das RichText-Control des FastReport auch sowas, wie ein Delphi-Referenz durchsuchenTRichEdit.PlainText,
JA. Aber das nützt mir nix, weil ich das RTF als RTF mit Formartierungen anzeige. Ich brauche nur die Anzahl der Zeichen für das Aus/Einblenden des Childs bei leerem Text.

Wie macht man aus einem Feld einen Stream? Meine Versuche die Lines über einen Stream einzulesen...
Delphi-Quellcode:
var
  Stream: TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
   (<DataPosition."PositionRtf">).SaveToStream(Stream); // falsch
   RichPositions.RichEdit.Lines.LoadFromStream(Stream);
...
...wann werden die RichEdit.Lines von FR eingelesen?

Geändert von haentschman ( 9. Feb 2023 um 10:10 Uhr)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#4

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 11:38
Nun habe ich aber RTF Felder in den Detaildaten...da kann ich mit der Variable nix anfangen.
Statt ner Reportvariablen ne Reportfunktion?

Code:
IsEmpty(<DataPosition."PositionRtf">)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#5

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 12:24
IsEmpty kennt FR nicht. Selbst dann...im Datenfeld (leerer Text = 0 Zeichen) steht "{\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{ \f0\fnil\fcharset0 Arial;}} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 \pard\fs18\lang1031\par }" drin.
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#6

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 13:01
Hi,
diese Links sollten dir weiterhelfen:

RTF to plain text:
https://www.delphipraxis.net/767804-post12.html

Using Custom Functions in a Report:
https://www.fast-report.com/document..._to_report.htm

Alex
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#7

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 16:09
Danke...

Das Erste kommt mir bekannt vor. So ähnlich habe ich das mit den Variablen gemacht. Custom Functions ... fürs nächste Mal.

Inzwischen habe ich eine FastReport Lösung:

Dummy TfrxRichView im Detail Band
Delphi-Quellcode:
procedure DetailDataOnBeforePrint(Sender: TfrxComponent);
begin
  Dummy.RichEdit.Lines.Clear;
  Dummy.RichEdit.Lines.Add(<DataPosition."TEILRtf">);
  // Achtung! Lines.Text funktioniert nicht! Da wird der RTF string in die Lines geschrieben. Mit Lines.Add wird der RTF Text als PlainText ausgegeben.
  Child.Visible := Length(Dummy.RichEdit.Lines.Text) > 2; // Offset für immer einen LineFeed ... warum auch immer.
end;
Fehlinformation

Geändert von haentschman (10. Feb 2023 um 07:42 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#8

AW: FastReport: RFT Länge ermitteln

  Alt 9. Feb 2023, 19:13
Ich will ein Child Band entsprechend dem INHALT (Textzeichen = 0) eines RTF Feldes ausblenden.
Delphi-Quellcode:
procedure DetailDataOnBeforePrint(Sender: TfrxComponent);
begin
  Child.Visible := (Dummy.RichEdit.Lines.Count > 0);
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#9

AW: FastReport: RFT Länge ermitteln

  Alt 10. Feb 2023, 05:36
Danke...

(Dummy.RichEdit.Lines.Count > 0); Funktioniert nicht. Weil 5 Lines keinen Inhalt haben können...sondern nur LineFeeds. Ich will aber die Zeile ausgeblendet haben bei leerem -> Text = '' Lines.

PS:
Meine Variante von gestern funktioniert nicht, weil Fastreport selbst im "FastScript" Bugs hat! Oder kann mir das jemand logisch erklären? Siehe Bilder!

Erklärung:
...der Block soll entscheiden ob das Child2 ausgeblendet wird. Der Code soll in der letzten Zeile, was auch die erste Zeile ist, wenn kein Text drin ist sondern nur LineFeeds, die Zeile entfernen. Dann ist Lines.Count = 0.
1. Breakpoints rot
2. die gelbe Linie ist die aktuelle Zeile
3. Bild 1 vor Ausführung, Bild nach der Ausführung Er darf die Bedingung nicht auführen weil Bedingung = False ist!

Fehler im Debugger FastReport:
1. niemals im Debugger RichEdit.Lines.Text (habe ich gestern kurzzeitig gesehen...daher mein übereiltes Statement von gestern )
2. Ablaufsteuerung funktioniert nicht

...so kann ich nicht arbeiten. Oder was habe ich übersehen?

PS: Mail an FastReport Support ist raus.
Miniaturansicht angehängter Grafiken
before.png   after.png   lines.png  

Geändert von haentschman (10. Feb 2023 um 07:42 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.430 Beiträge
 
Delphi 7 Professional
 
#10

AW: FastReport: RTF Länge ermitteln

  Alt 10. Feb 2023, 12:52
  Child.Visible := Length(Dummy.RichEdit.Lines.Text) > 2; // Offset für immer einen LineFeed ... warum auch immer.
Für die Ausgabe von Text werden bei TStrings-Nachfolgern die einzelnen Zeilen "zusammengedaddelt" und am Ende wird immer ein Zeilenumbruch drangepappt, deshalb ist die Länge von Lines.Text (unter Windows) immer mindestens = 2.

Alternative:   Child.Visible := Length(Trim(Dummy.RichEdit.Lines.Text)) = 0;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:02 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