AGB  ·  Datenschutz  ·  Impressum  







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

[FastReport] per Code zeichnen

Ein Thema von stahli · begonnen am 29. Okt 2013 · letzter Beitrag vom 29. Jul 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#1

[FastReport] per Code zeichnen

  Alt 29. Okt 2013, 21:07
Ich versuche mit FastReport (Emba Edition, VCL) per Code "zu zeichnen".

Ausreichende Infos finde ich dazu nicht. Ein gefundenes Beispiel habe ich mal anzupassen versucht.
Kann man nur Objekte platzieren oder auch direkt auf den Canvas zeichnen?

In meinem Test wird ein Text überraschend "gelöscht", wenn ich mehr als eine Treppenstufe zeichne und den Text daher teilw. überzeichne (siehe Screenshot).

Hat jemand mehr Infos und Erfahrungen mit dynamischen (komplett berechneten und "gezeichneten") Reports unter FastReport?

Ich könnte mir vorstellen, "Zeichenfunktionen" zu realisieren, die dann Objekte entsprechend auszurichten.
Z.B. könnten SetPos(X,Y); LineTo(X.Y); Rect(X,Y,W,H,Text); eine Linie und ein Memo generieren und ausrichten.
Im Code hätte man das Gefühl zu zeichnen und ich könnte die etwa meine alten VPE-Anweisungen (mein bisheriger Reportgenerator) weiter verwenden.

Allerdings müsste ich dazu zunächst das Konzept von FastReport-Code verstehen.


EDIT: Code vergessen

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  DataPage: TfrxDataPage;
  Page: TfrxReportPage;
  Band: TfrxBand;
  DataBand: TfrxMasterData;
  Memo: TfrxMemoView;
  Line: TfrxLineView;
  I: Integer;
begin
  { clear report }
  frxReport1.Clear;
  { add dataset to list of datasets accessible in report }
  // frxReport1.DataSets.Add(frxDBDataSet1);
  { add "Data" page }
  DataPage := TfrxDataPage.Create(frxReport1);
  { add page }
  Page := TfrxReportPage.Create(frxReport1);
  { create a unique name }
  Page.CreateUniqueName;
  { set sizes of fields, paper and orientation to defaults }
  Page.SetDefaults;
  { change paper orientation }
  // Page.Orientation := poLandscape;
  { add report title band }
  Band := TfrxReportTitle.Create(Page);
  Band.CreateUniqueName;
  { only “Top” coordinate and height of band need setting
    both in pixels }

  Band.Top := 0;
  Band.Height := 20;
  { add object to report title band }
  Memo := TfrxMemoView.Create(Band);
  Memo.CreateUniqueName;
  Memo.Text :=
    'Hello FastReport! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
  Memo.Height := 20;
  { this object will be stretched to band’s width }
  Memo.Align := baWidth;
  { add masterdata band }
  DataBand := TfrxMasterData.Create(Page);
  DataBand.CreateUniqueName;
  // DataBand.DataSet := frxDBDataSet1;
  { “Top” should be greater than previously added band’s top + height }
  DataBand.Top := 100;
  DataBand.Height := 20;
  { add object on masterdata }
  Memo := TfrxMemoView.Create(DataBand);
  Memo.CreateUniqueName;
  { connect to data }
  // Memo.DataSet := frxDBDataSet1;
  Memo.DataField := 'CustNo';
  Memo.SetBounds(0, 0, 100, 20);
  { align text to object’s right margin }
  Memo.HAlign := haRight;
  { show report }

  for I := 0 to 50 do
  begin
    Line := TfrxLineView.Create(Band);
    Line.CreateUniqueName;
    Line.Left := I * 10;
    Line.Top := I * 10;
    Line.Width := 10;
    Line.Height := 1;
    Line := TfrxLineView.Create(Band);
    Line.CreateUniqueName;
    Line.Left := I * 10 + 10;
    Line.Top := I * 10;
    Line.Width := 1;
    Line.Height := 10;
    // Break;
  end;

  frxReport1.ShowReport;
end;
Angehängte Grafiken
Dateityp: png frdyn.png (23,1 KB, 58x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (29. Okt 2013 um 21:26 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: [FastReport] per Code zeichnen

  Alt 29. Okt 2013, 21:46
Ich weiss, dass es zumindest in RaveReports eine Image-Komponente gibt. Sollte es in FR etwas ähnliches geben, würde ich mir im Programm lieber einfach ein Bitmap malen und es dem Report in das Image übergeben. (Ich kann mir vorstellen, dass manuelles Zeichnen auf den nackten Canvas nicht wirklich vorgesehen ist.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: [FastReport] per Code zeichnen

  Alt 29. Okt 2013, 21:47
Reportgeneratoren haben aber doch ihre eigenen internen Paint-, Repaint- und Refreshmethoden, mittels derer sie den darzustellenden Text und/oder die darzustellenden Grafiken auf Ausgabe-Canvas zeichnen. Deshalb, so vermute ich, werden auch deine außerhalb dieser Methoden gezeichneten Linien und Kreise wieder gelöscht, sobald ein Anlaß zum Refresh oder Repaint besteht. Der Reportgenerator holt sich die Infos, was er darstellen soll, ja aus irgendwelchen Datenmengen, die ihm als Quelle vorgesetzt werden.

Vielleicht ist es möglich, die Darstellung einer solchen Auffälligkeit wie der im Bild dargestellten roten Umrandung anders zu lösen, z.B. durch rote Fettschrift. Ich kenne FastReport leider nicht, da bei meinem RadStudio2009 nur RaveReport dabei war und ich für den Zukauf eines besseren Reports kein Geld übrig habe.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: [FastReport] per Code zeichnen

  Alt 29. Okt 2013, 22:01
Vielleicht muss ich nochmal konkretisieren.

In ein Bitmap will ich nicht zeichnen. Es soll letztlich eine PDF erzeugt werden, in der man später Text suchen kann.
"Zeichnen auf Canvas" meinte ich etwas allgemeiner - also nicht unbedingt den Canvas der Komponente, sondern eher Zeichnen "auf die Page", ohne Objekte erzeugen zu müssen.

Der Screenshot beinhaltet zwei Reportvarianten. Der hintere Report zeichnet den Text und zwei Linien - soweit ok.
Der vordere zeichnet mehrere Linien (bzw. positioniert mehrere Linienobjekte) in Form einer Treppe, wodurch der Text komischerweise gelöscht wird.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.395 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: [FastReport] per Code zeichnen

  Alt 29. Okt 2013, 22:08
Tach,

also FR kann schon auch zeichnen.. ich habe das 2004/2005 verwendet um Steuercodes für Kouvertiermaschinen auszugeben. Allerdings hatte ich da nicht das Problem mit überzeichnen. Wobei ich meine, dass ich damals den Report selbst zusammengebaut habe (OnManualBuild im FR Desinger) - dazu brauchst Du aber halt die Edition mit Scripting...

Bei so einem Problem würde ich empfehlen direkt bei FR einen Support-case aufzumachen, Demoprojekt rein und beschreiben. Wenn das ein Fehler ist fixen die das evtl. andernfalls haben die sicherlich einen Tipp auf Lager was Du besser machen kannst...
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: [FastReport] per Code zeichnen

  Alt 30. Okt 2013, 06:40
Man kann doch eine eigene FR-Komponente bauen.

Ich hab das mal für einen Datamatrix-Code machen müssen. Das ist ja im Prinzip das Gleiche. Das Schöne wäre dann, das Du die Ergebnisse im Designer siehst.

Vom Programmieraufwand ist das nur unwesentlich mehr Arbeit. Ich hatte für die Datamatrix-Komponente den Quelltext für das Rendern in eine TBitmap.Canvas gekauft und dann den FR-Wrapper gebastelt.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [FastReport] per Code zeichnen

  Alt 18. Nov 2013, 23:23
So, FastReport (also der Support) hat mir etwas geholfen und so habe ich schon mal einen akzeptablen Ansatz erreicht.

Schön ist, dass man Objekte auch mit negativem Offset positionieren kann und so einen großen Report auf mehrere Seiten aufteilen kann.

Insgesamt ist das Verständnis für die Details etwas schwierig zu erlernen. Details zu den Komponenteneigenschaften sind etwas mühsam zu sammeln. Der Code liegt mir ja (noch) nicht vor.

Ist mal jemand so nett, meinen Report in eine PDF zu exportieren (evtl. sogar mit der FMX-Variante)? Ich würde gern mal sehen, wie das dann konkret aussieht?

Ich spendiere für jede PDF ein virtuelles Bier. Also los geht´s ...
Angehängte Grafiken
Dateityp: png frdyn3.png (8,5 KB, 68x aufgerufen)
Angehängte Dateien
Dateityp: zip VCL_FR_Test.zip (111,5 KB, 33x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (19. Nov 2013 um 11:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: [FastReport] per Code zeichnen

  Alt 28. Jul 2014, 19:13
Hmm, ich muss nochmal etwas ausholen...

Den Render-Wunsch habe ich inzwischen aufgegeben und wollte jetzt alternativ die komplexen Turnierbäume in ein bzw. mehrere Bitmaps zeichnen und diese dann in den Report einbinden.
Ein mittelgroßer Baum erreicht schon ca. 3000*4000 Pixel (als komplette Übersicht). Das Bitmap würde ich dann nochmal in Abschnitte teilen und die Abschnitte als Detaildrucke auf einzelne Seiten aufteilen.

Der Windows-Viewer zeigt das Bitmap wie erwartet schön skaliert an und druckt es entsprechend.

Eingebunden im FastReport werden die Linien aber nicht mehr vernünftig gerendert und auch nicht mehr brauchbar gedruckt. Lesbar muss auf der Übersichtsseite enthaltener Text später natürlich nicht sein, aber die Struktur sollte erkennbar sein.

Gibt es hier bezüglich der Render-Qualität Abhilfe (sowohl für die Preview als auch für Druck und PDF-Ausgabe) oder kann ich mir FR für den Zweck abschminken?


PS: Die VPE (Virtual Print Engine) war wohl doch nicht sooo schlecht. Aber ein Tausender für ein Win8-fähiges Update kann ich mir doch nicht leisten. Ich werde doch mal nochmal beim Hersteller anfragen, ob da was geht...
Angehängte Grafiken
Dateityp: jpg bmp1.jpg (35,8 KB, 29x aufgerufen)
Dateityp: jpg bmp2.jpg (29,7 KB, 29x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: [FastReport] per Code zeichnen

  Alt 28. Jul 2014, 20:08
Kann man das nicht als WMF oder EMF irgendwie hinbekommen?
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#10

AW: [FastReport] per Code zeichnen

  Alt 29. Jul 2014, 10:14
ginge auch mit Excel
  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 04:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz