Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 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;
Miniaturansicht angehängter Grafiken
frdyn.png  
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