FAQ
Licensing issues .NET Ultimate FastReport VCL

FastReport VCL

Bieten wir die technische Unterstützung für FastReport VCL an?

Ja, für Kunden mit einem gültigen Abonnement

Gibt es irgendwo eine Richtlinie für die technische Unterstützung?

Ja, sie ist unter diesem Link zu finden: Richtlinie für die technische Unterstützung

Wo Sie den FastReport VCL technischen Support kontaktieren können?

Anfragen können von Benutzern per E-Mail an support@fastreport.ru, über das Kontaktformular auf der Website des Kundenpanels, über den Online-Chat oder per Telefon +7(800)551-75-80 gestellt werden.

Gibt es kostenpflichtige Erweiterungen der FastReport VCL Funktionen?

Ja, auf vertraglicher Grundlage.

Muss die FastReport VCL Lizenzdatei an das zu entwickelnde Produkt angehängt werden?

Durch die Registrierung einer Softwarelizenz erhalten Sie das Recht, Ihre eigenen Anwendungsprogramme unter Verwendung der im Produkt enthaltenen Software zu schreiben und zu kompilieren. Alle Kopien der Software, die Sie erstellen und weitergeben, müssen einen Hinweis auf das Urheberrecht des Lizenzgebers enthalten. Weitere Informationen finden Sie in der Lizenzvereinbarung.

Bitte erläutern Sie im Detail, worin der Unterschied zwischen den Hauptlizenztypen besteht?

Grundsätzlich haben unsere Produkte drei Lizenztypen: Single License ist eine Lizenz für eine Benutzerstation, für einen Entwickler. Team License ist eine Lizenz für 4 Benutzerstationen, enthält zusätzlich eine Lizenz für den Build-Server. Site License ist eine Lizenz für unbegrenzte Anzahl von Benutzerstationen, die geografisch in einem Standort registriert sind, enthält zusätzlich eine Lizenz für den Build-Server.

Wie viel kostet die Verlängerung meiner FastReport VCL Lizenz? Und was bekomme ich dafür?

Sie können Ihre Lizenz in Ihrem Bedienfeld verlängern. Die Verlängerung umfasst den technischen Support und die Produktaktualisierungen. Sie ist zum halben Vollpreis pro Jahr erhältlich. Wenn Ihre Lizenz abgelaufen ist, haben Sie zwei Möglichkeiten: - Verlängerung der Lizenz. Dadurch erhalten Sie weiterhin den technischen Support und die Produktaktualisierungen. – Weitere Verwendung von FastReport VCL. In diesem Fall können Sie die neuesten Produktaktualisierungen nicht nutzen und keinen technischen Support erhalten.

Ist es möglich, FastReport VCL auf einem Server zu verwenden?

Ja, auf einem Server unter Windows, wenn Sie die IDE von Embarcadero verwenden oder wenn Sie Lazarus verwenden, auf einem Server unter Windows, unter Linux (Multithreading-Einschränkungen), enthält FastReport VCL ab der Enterprise-Version eine Reihe von Serverkomponenten

Welche IDE-Versionen unterstützt das FastReport VCL Produkt?

Mit der Veröffentlichung von FastReport VCL 2023.2 werden IDEs nur ab Delphi 2010 und bis zu den aktuellsten Versionen unterstützt.

Wie kann man FastReport VCL in mehreren Threads verwenden?

Bevor Sie den Bericht ausführen, müssen Sie Folgendes installieren: TfrxReport.EngineOptions.EnableThreadSafe := True; TfrxReport.EngineOptions.SilentMode := True;

Wie lässt sich die Verwendung der globalen Datensatzliste bei der Verwendung von TfrxReport in einem Thread deaktivieren?

Standardmäßig verwendet FR eine globale Datensatzliste, die im frxClass-Modul initialisiert wird. Wenn eine Instanz von TfrxDBDDataset erstellt wird, wird sie zu dieser Liste hinzugefügt. Aus diesem Grund ist es nicht möglich, Datensätze mit denselben Namen zu verwenden (auch nicht in verschiedenen Threads). Um die lokale Datensatzliste zu verwenden, müssen Sie den folgenden Code verwenden (ab Version 4.5.46): frxReport.EngineOptions.UseGlobalDataSetList := False; frxReport.EnabledDataSets.Clear(); frxReport.EnabledDataSets.Add(frxDataSet); frxReport.LoadFromFile(ReportName);

In einem Bericht muss man einen Text in eine TfrxMemoView mit fester Breite schreiben und dabei die Schriftgröße reduzieren. Wie kann man das implementieren?

Verwenden Sie im Handler die TfrxMemoView.CalcWidth Funktion

TfrxMemoView.OnAfterData: procedure Memo1OnAfterData(Sender: TfrxComponent); begin Memo1.Font.Size:=10; if Memo1.CalcWidth>Memo1.Width-Memo1.GapX*2 then Memo1.Font.Size:=Trunc(Memo1.Font.Size*((Memo1.Width-Memo1.GapX*2)/Memo1.CalcWidth)); end;

Ist es möglich, die Lokalisierung des Designers und des Vorschaufensters dynamisch zu ändern?

Erstellen Sie eine Sprachdatei mit dem mkall.bat Dienstprogramm (das sich im Verzeichnis language befindet) und verbinden Sie die Sprache dynamisch: uses frxRes; frxResources.LoadFromFile('english.xml');

Wie kann man ein Array von Variablen von Delphi nach FR übertragen?

Verwenden Sie den folgenden Code: var a: variant; begin a := VarArrayOf([1,2,3]); frxReport1.Script.Variables['a'] := a; end;

Wie können Sie eine Datensatznavigation codieren, die mit einem Bericht, aber nicht mit einem Band im Berichtsskript verbunden ist?

Verwenden Sie den folgenden Code: var DS: TfrxDataSet; begin DS:=Report.GetDataset('Items'); DS.First; while not DS.Eof do begin ShowMessage(DS.Value('Part Name')); DS.NEXT; end; end.

Wie konvertiert man Berichte von Report Builder in Fast Report?

Fügen Sie das Modul ConverterRB2FR zum uses Arbeitsbereich hinzu. Zur Laufzeit ist es im Fast Report-Berichtsdesigner möglich, Report Builder-Berichte zu öffnen und sie im Fast Report-Format erneut zu speichern.

Im Skript versuche ich, Memo-Ränder zu setzen: Memo1.Frame.Typ := [ftLeft, ftRight, ftTop, ftBottom]. Eine Fehlermeldung wird angezeigt.

Das Fast Report-Skript unterstützt keine Sätze. Sie müssen folgendes machen: Memo1.Frame.Typ := ftLeft + ftRight + ftTop + ftBottom;

Beim Kompilieren des Projekts wird die Meldung 'Class TfrxButtonControl not found' angezeigt (TfrxRichView, TfrxCrossView, TfrxOLEView,TfrxBarCodeView, TfrxCheckBoxView, TfrxGradientView, TfrxChartView, TfrxADOQuery usw.).

Fügen Sie die TfrxDialogControls-Komponente (TfrxRichObject, TfrxCrossObject, TfrxOLEObject, TfrxBarCodeObject, TfrxCheckBoxObject, TfrxGradientObject, frxChartObject, TfrxADOComponents usw.) aus der Palette der Fast-Report-Komponenten zum Bericht hinzu oder fügen Sie die Module frxDCtrl, frxRich, frxCross, frxOLE, frxBarcode, frxChBox, frxGradient, frxChart, frxADOComponents zum uses-Arbeitsbereich hinzu

Wie kann ich meinen eigenen Berichtsnamen in den Titel des Vorschaufensters einfügen?

Um Ihren Berichtsnamen in den Titel einzufügen, führen Sie Folgendes aus: frxReport1.ReportOptions.Name := 'Mein Bericht';

Der Objektinspektor (Datenbaum, Standardsymbolleiste) ist in meinem Berichtsdesigner verschwunden

Gehen Sie im Designer zum Menü Ansicht|Einstellungen und klicken Sie auf die Schaltfläche Einstellungen wiederherstellen

Wie kann ich den letzten Datensatz aus der Datenbank auf eine separate Seite stellen?

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
 if MasterData1.DataSet.RecNo = MasterData1.DataSet.RecordCount-1 then Engine.NewPage;
end;

Wie konvertiert man Berichte von QuickReport in Fast Report?

Fügen Sie das Modul ConverterQR2FR zum uses Arbeitsbereich hinzu und: conv := TConverterQr2Fr.Create; conv.Source := QuickRep1; conv.Target := FReport; conv.Convert; FReport.SaveToFile('converted_fromQR.fr3');

In der Vorschau unterscheiden sich die Texte, die in TfrxMemoView und in TfrxRichView angezeigt werden, obwohl Schriftart und -größe gleich sind.

Setzen Sie die Eigenschaft TfrxRichView.Wysiwyg auf False.

Nach dem Schließen des Vorschaufensters in Delphi können die Werte von Berichtsvariablen nicht abgerufen werden

Bevor Sie einen Bericht erstellen, fügen Sie folgendes hinzu: frxReport1.EngineOptions.DestroyForms:=False;

Wie lädt man eine RTF-Datei in TfrxRichView in einem Skript hoch?

Verwenden Sie den folgenden Code: Rich1.RichEdit.Lines.LoadFromFile()

Wie kann ich die Erstellung eines Berichts abbrechen?

Verwenden Sie den folgenden Code: frxReport1.Engine.StopReport;

Wie kann ich die Spalten nicht von oben nach unten, sondern von links nach rechts anzeigen lassen?

Wenn Sie die Anzahl der Spalten für eine Seite festlegen, werden die Datensätze von unten nach oben angezeigt, und wenn Sie die Anzahl der Spalten für ein Band festlegen, werden die Datensätze von links nach rechts angezeigt.

Wie kann ich dem Vorschaufenster eine Schaltfläche hinzufügen?

Verwenden Sie den folgenden Code: ``` uses frxClass, frxPreview, ComCtrls, ToolWin, Buttons; ... procedure TForm1.ButtonClick(Sender: TObject); begin ShowMessage('My Button pressed'); end;

procedure TForm1.frxReport1Preview(Sender: TObject); var Button: TSpeedButton; begin // Hinzufügen einer neuen Schaltfläche Button := TSpeedButton.Create(TfrxPreviewForm(frxReport1.PreviewForm).ToolBar); Button.Parent:=TfrxPreviewForm(frxReport1.PreviewForm).ToolBar; Button.Caption:='My Button'; Button.Width:=60; Button.Left:=650; // Handler der neuen Schaltfläche Button.OnClick:=ButtonClick; end; ``` Sie können einer Standardvorschau auch eine Schaltfläche nicht über das OnPreview-Ereignis, sondern über das OnEndDoc hinzufügen. Diese Option ist in zwei Fällen nützlich: 1) Wenn der Handler dieser Schaltfläche etwas mit den Vorschaudaten macht. In diesem Fall ist es unerwünscht, eine Schaltfläche über das OnPreview zu erstellen, da sie während der Berichtserstellung aktiv ist. 2) Wenn die zusätzliche Schaltfläche in Abhängigkeit von einer Bedingung erscheinen soll, die im Vorschaudialog (frxDialogPage) festgelegt ist.

++++++++++++ Für die Schaltfläche PDF-Export ``` uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, frxClass, frxExportPDF, frxPreview, frxDsgnIntf, Menus; type TForm1 = class(TForm) frxReport1: TfrxReport; frxPDFExport1: TfrxPDFExport; SaveDialog1: TSaveDialog; procedure FormCreate(Sender: TObject); procedure frxReport1Preview(Sender: TObject); procedure PDFExport(Sender: TObject); private { Private declarations } public { Public declarations } end;

var Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.PDFExport(Sender: TObject); begin if SaveDialog1.Execute then begin frxPDFExport1.FileName:=SaveDialog1.FileName; TfrxPreview(frxReport1.Preview).Export(frxPDFExport1); end; end; procedure TForm1.FormCreate(Sender: TObject); begin frxReport1.ShowReport; end; procedure TForm1.frxReport1Preview(Sender: TObject); var i, j, mi: integer; begin TfrxPreviewForm(frxReport1.PreviewForm).PdfB.OnClick:=PDFExport; for i := 0 to frxExportFilters.Count - 1 do begin if TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName = 'TfrxPDFExport' then mi:=i; end; TfrxPreviewForm(frxReport1.PreviewForm).ExportPopup.Items[mi].OnClick:=PDFExport; for i:=0 to TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items.Count-1 do begin if TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i].Caption=TfrxPreviewForm(frxReport1.PreviewForm).ExportB.Hint then begin for j:=0 to TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i].Count-1 do if TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i][j].Caption=TfrxPreviewForm(frxReport1.PreviewForm).ExportPopup.Items[mi].Caption then TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i][j].OnClick:=PDFExport; end; if TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i].Caption=TfrxPreviewForm(frxReport1.PreviewForm).PdfB.Hint then TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[i].OnClick:=PDFExport; end; end; end. ```

Wie kann man den Schaltflächen-Handler im Standard-Vorschaufenster überschreiben?

Verwenden Sie den Code ``` procedure TForm1.frxReport1Progress(Sender: TfrxReport; ProgressType: TfrxProgressType; Progress: Integer;) begin if Progress > 1 then frxReport1.Engine.StopReport; end;

procedure TForm1.Button1Click(Sender: TObject); begin frxReport1.PrepareReport(); while frxReport1.PreviewPages.Count > 1 do frxReport1.PreviewPages.DeletePage(1); frxReport1.ShowPreparedReport; end; ```

Die TfrxPreview-Komponente verfügt über kein Bedienfeld mit Schaltflächen, das dem des Standardvorschaufensters ähnelt. Ist es möglich, ein eigenes Bedienfeld zu erstellen, das dem Standard- Bedienfeld ähnelt?

Natürlich können Sie das. Sie können ein Bedienfeld mit Schaltflächen erstellen und die folgenden TfrxPreview-Methoden für jede frxPreview1.Print Schaltfläche verwenden; frxPreview1.LoadFromFile; frxPreview1.SaveToFile; frxPreview1.Export(Filter); frxPreview1.Find; frxPreview1.Zoom:=frxPreview1.Zoom + 0.25; frxPreview1.Zoom:=frxPreview1.Zoom - 0.25; frxPreview1.OutlineVisible := frxPreview1.OutlineVisible; frxPreview1.ThumbnailVisible:=not frxPreview1.ThumbnailVisible; frxPreview1.PageSetupDlg; frxPreview1.Edit; frxPreview1.First; frxPreview1.Prior; frxPreview1.PageNo := 1; frxPreview1.Next; frxPreview1.Last;

Wie kann die Bearbeitung von TfrxRichView, TfrxPictureView im Vorschaufenster über die Standard-Bearbeitungsdialoge von TfrxRichView, TfrxPictureView implementiert werden?

Verwenden Sie den Code ``` uses frxRich, frxRichEditor, frxDesgn;

procedure TForm1.frxReport1ClickObject(Sender: TfrxView; Button: TMouseButton; Shift: TShiftState; var Modified: Boolean); begin if Sender is TfrxRichView then with TfrxRichEditorForm.Create(Form1) do begin RichView := TfrxRichView(Sender); Modified := ShowModal = mrOk; Free; end; end;

uses frxDesgn, frxEditPicture;

procedure TForm1.frxReport1ClickObject(Sender: TfrxView; Button: TMouseButton; Shift: TShiftState; var Modified: Boolean); begin if Sender is TfrxPictureView then with TfrxPictureEditorForm.Create(Form1) do begin Image.Picture.Assign(TfrxPictureView(Sender).Picture); Modified := ShowModal = mrOk; if Modified then TfrxPictureView(Sender).Picture.Assign(Image.Picture); Free; end; end; ```

Wie kann ich eine Schaltfläche im Menü des Designers ausblenden?

Ähnlich wie beim Vorschaufenster: ``` procedure TForm1.frxDesigner1Show(Sender: TObject); begin if Sender is TfrxDesignerForm then begin TfrxDesignerForm(Sender).OpenB.Visible := False; end; end;

procedure TForm1.frxDesigner1Show(Sender: TObject); var i: integer; begin if Sender is TfrxDesignerForm then begin for i:=0 to TfrxDesignerForm(Sender).ObjectsTB1.ButtonCount-1 do if TfrxDesignerForm(Sender).ObjectsTB1.Buttons[i].ImageIndex in [30, 32] then // die Schaltflächen ERSCHEINUNGSBILD KOPIEREN und SERVICE TEXT sind ausgeblendet TfrxDesignerForm(Sender).ObjectsTB1.Buttons[i].Visible:=False; TfrxDesignerForm(Sender).DataTree.FunctionsTree.Visible:=False; TfrxDesignerForm(Sender).DataTree.ClassesTree.Visible:=False; end; end; ```

Wenn Sie im Designer einen Text in ein Memo eingeben und die Schriftgröße auf 6 pt einstellen, ist der Text im Memo unlesbar

Gehen Sie im Designer in das Menü Ansicht|Einstellungen und deaktivieren Sie die Option Objektschrift verwenden

Die Farben in den Bandüberschriften sind verschwunden. Was muss ich machen?

Aktivieren Sie im Designer im Menü Ansicht-Einstellungen die Option "Bandüberschriften anzeigen"

Ich habe einen Bericht mit dem Wizard erstellt. Jetzt kann ich die Farbe und die Schriftart der Berichtselemente nicht mehr ändern

Der Wizard hat den Bericht mithilfe von Stilen erstellt. Sie müssen entweder den entsprechenden Stil ändern oder den Objektstil löschen

Wie kann ich den Papiertyp beim Drucken eines Berichts ändern?

Auf alle Felder der DEVMODE-Struktur kann über das OnPrintPage-Ereignis zugegriffen werden. Um beispielsweise das Feld DM_MEDIATYPE zu ändern, können Sie diesen Code verwenden (gleiches gilt für andere Felder): ``` uses frxprinter;

procedure frxReport1PrintPage(Page: TfrxReportPage; CopyNo: Integer); procedure ChangeMediaType(mType: Integer); begin if frxPrinters.Printer is TfrxPrinter then with TfrxPrinter(frxPrinters.Printer) do begin DeviceMode.dmFields := DeviceMode.dmFields or DMMEDIATYPE; DeviceMode.dmMediaType := mType; SetPrintParams(Page.PaperSize, Page.PaperWidth, Page.PaperHeight, Page.Orientation, Page.Bin, Integer(Page.Duplex), frxReport1.PrintOptions.Copies); end; end; begin if idx = 0 then ChangeMediaType(DMMEDIATRANSPARENCY) else if idx = 1 then ChangeMediaType(DMMEDIAGLOSSY) else ChangeMediaType(DMMEDIASTANDARD); inc(idx); end; ```

Wie kann ich die Verbindungszeichenfolge für TfrxADODataBase ändern, um eine Fehlermeldung zu vermeiden, wenn sich die Verbindungszeichenfolge des Benutzers von der Verbindungszeichenfolge unterscheidet, die der Entwickler in der Berichtsvorlage festgelegt hat?

Um diese Funktion zu implementieren, müssen Sie die Verbindung während des Ladens des Berichts im Ereignis TfrxReport.OnBeforeConnect blockieren ``` var Form1: TForm1; Connect: Boolean;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject); begin Connect:=False; frxReport1.LoadFromFile('C:\test.fr3'); Connect:=True; TfrxADODataBase(frxReport1.FindObject('ADODatabase1')).Connected := False; TfrxADODataBase(frxReport1.FindObject('ADODatabase1')).DatabaseName := 'Provider=Microsoft.Jet.OLEDB.4.0; User ID=Admin; Data Source=C:\Program Files\FastReports\FastReport 4\Demos\Main\demo.mdb'; TfrxADODataBase(frxReport1.FindObject('ADODatabase1')).Connected := True; frxReport1.ShowReport(); end;

procedure TForm1.frxReport1BeforeConnect(Sender: TfrxCustomDatabase; var Connected: Boolean); begin if not Connect then Connected:=False; end; ```

Ist es möglich, einen Text (z. B. ein Wasserzeichen) zu bereits generierten Seiten hinzuzufügen?

Sie können einen Text sowohl in der Vorschau im TfrxReport.OnEndDoc-Ereignis procedure TForm1.frxReport1EndDoc(Sender: TObject); var p: TfrxReportPage; m: TfrxMemoView; i: integer; begin frxReport1.Preview.Lock; for i := 0 to frxReport1.PreviewPages.Count - 1 do begin p:=TfrxReportPage(frxReport1.PreviewPages.Page[i]); m:=TfrxMemoView.Create(p); m.CreateUniqueName; m.SetBounds(0, 0, (p.PaperWidth - p.RightMargin - p.LeftMargin) * fr01cm, (p.PaperHeight - p.TopMargin - p.BottomMargin) * fr01cm); m.Text := 'Demo'; m.Rotation := 45; m.Font.Size := 128; m.VAlign := vaCenter; m.HAlign := haCenter; frxReport1.PreviewPages.ModifyPage(i,p); end; frxReport1.Preview.UnLock; end; // als auch direkt vor dem Drucken der Seite im TfrxReport.OnPrintPage Ereignis hinzufügen procedure TForm1.frxReport1PrintPage(Page: TfrxReportPage; CopyNo: Integer); var m: TfrxMemoView; begin m:=TfrxMemoView.Create(page); m.CreateUniqueName; m.SetBounds(0, 0, (page.PaperWidth - page.RightMargin - page.LeftMargin) * fr01cm, (page.PaperHeight - page.TopMargin - page.BottomMargin) * fr01cm); m.Text := 'Demo'; m.Rotation := 45; m.Font.Size := 128; m.VAlign := vaCenter; m.HAlign := haCenter; end;

In dem Bericht werden zwei TfrxReportPages erzeugt. Die erste Seite zeigt die Daten für die Vorderseite des Blattes, die zweite Seite die Daten für die Rückseite. Für den Duplexdruck ist es notwendig, die Vorder- und Rückseite abwechselnd auszugeben. Wie kann dies realisiert werden?

Sie können die Vorschauseiten nach der Berichterstellung neu sortieren: var i, j: integer; page : TfrxReportPage; begin frxReport1.PrepareReport(); j := frxReport1.PreviewPages.Count div 2; page := TfrxReportPage.Create(nil); for i := 0 to j - 2 do begin page.AssignAll(frxReport1.PreviewPages.Page[j + i]); frxReport1.PreviewPages.AddEmptyPage(i * 2 + 1); frxReport1.PreviewPages.ModifyPage(i * 2 + 1, page); frxReport1.PreviewPages.DeletePage(j + i + 1); end; page.Free; frxReport1.ShowPreparedReport; end;

Das Skript kann die Verbindungsparameter zu ADODataBase nicht ändern, die Anwendung gibt die Fehlermeldung "Operation is not allowed because object is open" aus. In Version 3 war dies möglich. Wie lässt sich das Problem mit der Änderung der Datenbankverbindungsdaten lösen?

Versuchen Sie, ADODataBase.Connected=False zu setzen, bevor Sie die Verbindungsparameter ändern, und stellen Sie dann die Verbindung wieder her

Wie kann man eine Spalte in DBCrossView softwareseitig ausblenden?

Versuchen Sie einfach, die Breite=0 zu setzen procedure Cross1OnCalcWidth(ColumnIndex: Integer; ColumnValues: Variant; var Width: Extended); begin if ColumnIndex=0 then Width:=0; end;

Wie kann man leere Zellen am Ende der Seite ausgeben, wenn MasterData1 3-5 Datenzeilen enthält?

Fügen Sie ein weiteres MasterData2 mit leeren Zellen zum Bericht hinzu und steuern Sie den Wert von MasterData2.RowCount im Skript im Fußzeilendaten Handler

Wie kann ich das Drucken von MasterData so oft wie erforderlich wiederholen? Die Anzahl wird in einem der Datensatzfelder angegeben.

Fügen Sie dem Bericht ein DetailData-Band hinzu. Setzen Sie DetailData.RowCount=1 (Dies ist obligatorisch!) Legen Sie im Ereignis MasterData1OnBeforePrint DetailData.RowCount:= fest. Platzieren Sie im DetailData-Band ein Memo mit Feldern aus dem mit MasterData verknüpften Datensatz. Setzen Sie die MasterData-Höhe auf 0: MasterData.Height=0

Wie kann ich auf RTF-Text zugreifen? (so etwas string s:=Rich.RichText.Lines.RTF)

Wenn Sie im gegebenen Code auf TfrxRichView klicken, wird dessen Inhalt in Memo1 im Dialogformular kopiert: procedure Rich1OnPreviewClick(Sender: TfrxView; Button: TMouseButton; Shift: Integer; var Modified: Boolean); var st: TMemorystream; begin st:=TMemoryStream.Create; Rich1.RichEdit.StreamFormat := 0; Rich1.RichEdit.Lines.SaveToStream(st); st.Position := 0; Memo1.Lines.LoadFromStream(st); st.Free; DialogPage1.ShowModal; end;

Im Berichtsskript werden die Werte für Page1.PaperHeight, Page1.TopMargin usw. in mm angegeben, während die Werte für die Objekthöhe in Pixel angegeben werden. Wie rechnet man mm in Pixel um?

Verwenden Sie im Skript die Konstanten fr01cm (zur Umrechnung von mm in Pixel) und fr1cm (zur Umrechnung von cm in Pixel)

Im Berichtsskript muss ich den Dateinamen für den Exportfilter festlegen, aber die Exportfilterklassen fehlen im Skript. Wie kann ich sie hinzufügen?

In Delphi: frxReport1.Script.AddClass(TfrxCustomExportFilter, 'TComponent'); frxReport1.Script.AddClass(TfrxCustomImageExport, 'TfrxCustomExportFilter'); frxReport1.Script.AddClass(TfrxBMPExport, 'TfrxCustomImageExport'); frxReport1.Script.AddClass(TfrxRTFExport, 'TfrxCustomExportFilter'); ... frxReport1.Script.AddObject('frxRTFExport1',frxRTFExport1); frxReport1.Script.AddObject('frxBMPExport1',frxBMPExport1); ... Im Script: Code frxRTFExport1.FileName := 'myFilename.rtf'; `

Wie kann ich die SendToBack-Funktion zu einem Skript hinzufügen?

Verwenden Sie den folgenden Code constructor TFunctions.Create(AScript: TfsScript); begin inherited Create(AScript); with AScript do begin with TfsClassVariable(Find('TfrxView')) do AddMethod('procedure SendToBack',CallMethod); end; end; initialization fsRTTIModules.Add(TFunctions);

Ist es möglich, den Schriftstil in TfrxMemoView je nach dem Status der Gruppenüberschrift (reduziert/erweitert) zu ändern?

Dazu müssen Sie im Berichtsskript eine benutzerdefinierte Funktion registrieren, die den Status der Gruppenüberschrift zurückgibt function TForm1.frxReport1UserFunction(const MethodName: String; var Params: Variant): Variant; begin if MethodName = 'CHECKDRILLSTATE' then Result := frxReport1.DrillState.IndexOf(Params[0]); end; procedure TForm1.FormShow(Sender: TObject); begin frxReport1.AddFunction('function CheckDrillState(DrillName : string): integer'); end; und im Berichtsskript selbst den Status der Gruppenüberschrift prüfen und den erforderlichen Schriftstil einstellen procedure GroupHeader1OnBeforePrint(Sender: TfrxComponent); begin if CheckDrillState(GroupHeader1.DrillName) <> - 1 then Memo6.Font.Style := fsBold else Memo6.Font.Style := 0; end;

Erstellung einer Liste von Funktionen:

Verwenden Sie den folgenden Code ``` unit Unit1;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, frxClass, fsitools, fsxml, frxRes, frxrcDesgn, frxDesgn, ComCtrls;

type TForm1 = class(TForm) frxReport1: TfrxReport; TreeView1: TTreeView; procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end;

var Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormShow(Sender: TObject); var XML: TfsXMLDocument; procedure SetImageIndex(Node: TTreeNode; Index: Integer); begin Node.ImageIndex := Index; Node.StateIndex := Index; Node.SelectedIndex := Index; end; procedure AddFunctions(xi: TfsXMLItem; Root: TTreeNode); var i: Integer; Node: TTreeNode; s: String; begin s := xi.Prop['text']; if xi.Count = 0 then s := Copy(s, Pos(' ', s) + 1, 255) else { function } s := frxResources.Get(s); { category } if CompareText(s, 'hidden') = 0 then Exit; Node := TreeView1.Items.AddChild(Root, s); if xi.Count = 0 then Node.Data := xi; if Root = nil then Node.Text := frxResources.Get('dtFunc'); if xi.Count = 0 then SetImageIndex(Node, 52) else SetImageIndex(Node, 66); for i := 0 to xi.Count - 1 do AddFunctions(xi[i], Node); end; begin XML := TfsXMLDocument.Create; TreeView1.Images := frxResources.MainButtonImages; frxReport1.Script.AddRTTI; GenerateXMLContents(frxReport1.Script, XML.Root); TreeView1.Items.BeginUpdate; TreeView1.Items.Clear; AddFunctions(XML.Root.FindItem('Functions'), nil); TreeView1.FullExpand; TreeView1.TopItem := TreeView1.Items[0]; TreeView1.Items.EndUpdate; end; end. ```

Ich möchte bestimmte Seiten des Berichts je nach den bestimmten Bedingungen im Skript ein- oder ausblenden, aber der Code Page1.Visible := False blendet die Page1 nicht aus

Sie können die Sichtbarkeit der Berichtsseiten vor dem Beginn der Berichterstellung festlegen, z. B. in der Hauptprozedur des Berichts. Ihr Code wird in Page1.OnBeforePrint nicht funktionieren.

Erstellung eines Berichts, in dem zu Beginn seiner Ausführung ein Dialogfeld angezeigt wird

Erstellen Sie einen Bericht, in dem zu Beginn seiner Ausführung ein Dialogfeld angezeigt wird. Wählen Sie In diesem Dialogfeld eine von zwei Optionen aus: den aktuellen Bericht weiter auszuführen oder daraus einen neuen Bericht aufzurufen. Wenn ein neuer Bericht aufgerufen wird, muss das Vorschauformular des ersten Berichts geschlossen werden. Andernfalls kommt es zum folgenden: Wenn Sie den zweiten Bericht vom ersten Bericht aus aufrufen, funktioniert er und zeigt die Daten an, und wenn Sie das Vorschaufenster des zweiten Berichts schließen, sehen Sie ein leeres Vorschaufenster des ersten Berichts. Als nächstes verwenden Sie eine benutzerdefinierte Funktion in Delphi: procedure TForm1.FormCreate(Sender: TObject); begin frxReport1.AddFunction('function CloseReport'); frxReport1.LoadFromFile('testReport1.fr3'); frxReport1.ShowReport(); end; function TForm1.frxReport1UserFunction(const MethodName: String; var Params: Variant): Variant; begin if MethodName='CLOSEREPORT' then frxReport1.PreviewForm.Close; end; //im Script: procedure Button1OnClick(Sender: TfrxComponent); var rep: TfrxReport; begin rep := TfrxReport.Create(Report); rep.EngineOptions := Report.EngineOptions; rep.LoadFromFile('TestReport2.fr3'); rep.ShowReport; CloseReport; end;

In der FastReport2-Version ist es beim Erstellen von MasterBand möglich, ein virtuelles DataSet auszuwählen. In FR4 gibt es diese Option nicht

Legen Sie die RowCount-Eigenschaft des Bandes fest

Funktioniert FastReport mit Delphi XE7, um eine 64-Bit-Anwendung zu erstellen?

Ja

Wie kann ich die Seitennummer auf der Rückseite jedes Berichtsblatts drucken?

Nur durch das Hinzufügen einer Seite mit einer Seitennummer. Sie können einen Bericht erstellen, die gleiche Anzahl von Seiten mit Nummern hinzufügen und sie dann neu sortieren var i, j: integer; page : TfrxReportPage; begin j := frxReport1.PreviewPages.Count div 2; page := TfrxReportPage.Create(nil); for i := 0 to j - 2 do begin page.AssignAll(frxReport1.PreviewPages.Page[j + i]); frxReport1.PreviewPages.AddEmptyPage(i * 2 + 1); frxReport1.PreviewPages.ModifyPage(i * 2 + 1, page); frxReport1.PreviewPages.DeletePage(j + i + 1); end; page.Free; frxReport1.ShowPreparedReport; end;

Welcher Treiber wird für die ODBC-Verbindung zu SQL Server verwendet?

ADO, aber Sie können auch andere verwenden

Stimmt es, dass die Verwendung von TfrxBDEComponents nicht möglich ist und man stattdessen immer TfrxDBDDataset und TDataSet verwenden sollte?

Ja, Sie müssen entweder selbst interne Datensätze erstellen oder nach Implementierungen suchen

Ich habe einige benutzerdefinierte nicht konvertierbare QR-Komponenten (wie TMyQRLabel, die nur die Standard-Eigenschaften ändern). Gibt es eine Möglichkeit, sie zu konvertieren?

Ja, fügen Sie eine Bedingung mit TQRLabel zu Ihrem Klassennamen im Konvertermodul hinzu.

Gibt es eine Möglichkeit, den Code in Ereignissen zu übergeben, wenn ein QR-Code verwendet wird, z. B. vor dem Drucken eines Streifens?

Das Skript wird nicht konvertiert

Wenn ein QR-Bericht von einem anderen QR-Bericht geerbt wird, schlägt die Konvertierung fehl. Gibt es eine Möglichkeit, dies zu umgehen?

Es gibt noch keine Unterstützung für geerbte Formulare

Wie erfolgt das Laden und Entladen von Daten aus der Datenbank? Beim Lesen erscheint der Fehler “invalid format”

Setzen Sie Stream.Position := 0;

Ich muss eine Unicode-Zeichenfolge an den Bericht übergeben. Wie kann ich das tun?

Übergeben Sie die Zeichenfolge in UTF8-Kodierung. Beispielsweise kann das Zeichen „Durchmesser“ mit dem folgenden Code übergeben werden: frxReport1.Script.Variables['test']:= UTF8Decode('⌀');

Ist FastScript mit Multithreading kompatibel?

Kompatibel, es gibt jedoch einige Besonderheiten, die auf Seite 54 beschrieben sind Another way to use TfsScript without fsGlobalUnit (for example, in multi-thread environment) https://www.fastreport.ru/public_download/fs_en.pdf

Beim Berichterstellen mit einer Kreuztabelle wird die Fehlermeldung „Could convert variant of type (String) into type (Double)“ angezeigt.

Wenn in einer Zelle der Kreuztabelle Zeichenkettenwerte verwendet werden, müssen Sie die Aggregatfunktion im Editor "Kreuztabelle" deaktivieren.

Wie kann man den Schaltflächen-Handler im Standard-Vorschaufenster überschreiben?

Der folgende Handler überschreibt den Handler der Schaltfläche Öffnen ``` uses frxClass, frxPreview, frxPreviewPages, frxRes; type TForm1 = class(TForm) frxReport1: TfrxReport; procedure frxReport1Preview(Sender: TObject); procedure NewOnClick(Sender: TObject); end;

var Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.frxReport1Preview(Sender: TObject); begin if frxReport1.PreviewForm is TfrxPreviewForm then begin TfrxPreviewForm(frxReport1.PreviewForm).OpenB.OnClick := NewOnClick; TfrxPreviewForm(frxReport1.PreviewForm).RightMenu.Items[3].OnClick := NewOnClick; end; end;

procedure TForm1.NewOnClick(Sender: TObject); var OpenDlg: TOpenDialog; begin if frxReport1.Engine.Running then Exit; OpenDlg := TOpenDialog.Create(nil); try OpenDlg.Options := [ofHideReadOnly]; OpenDlg.Filter := frxResources.Get('clFP3files') + ' (.fp3)|.fp3'; if OpenDlg.Execute then begin TfrxPreview(frxReport1.Preview).LoadFromFile(OpenDlg.FileName); frxReport1.PreviewForm.Caption := OpenDlg.FileName; end; finally OpenDlg.Free; end; end; end. ```

Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314

© 1998-2024 Fast Reports Inc.