Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FastReport in Projekt verwenden wenn Ziel auch Android ist (https://www.delphipraxis.net/211331-fastreport-projekt-verwenden-wenn-ziel-auch-android-ist.html)

tdeck 31. Aug 2022 12:04

FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Hallo Leute,

ich stehe vor einem kleinen Problem. Mein aktuelles Projekt hat als Ziel Windows und Android.
Unter Windows möchte ich dem User ermöglichen einen Ausdruck mit FastReportFMX zu erstellen.

Unter Windows funktioniert das auch recht gut.
Wenn ich nun als Ziel Android auswähle erhalte ich "[DCC Fataler Fehler] AppMain.pas(14): F2613 Unit 'FMX.frxClass' nicht gefunden."

ALso habe ich in der Uses Anweisung das Ganze erweitert:

Code:
  {$ifdef MSWINDOWS} ,FMX.frxClass  {$endif MSWINDOWS} // Nur bei Windows, nicht bei Android
Die anderen Reportfunktionen habe ich ebenfalls mit dieser Compileranweisung ausgeklammert.

In der TForm Class ebenfalls:
Code:
...
{$ifdef MSWINDOWS} FR: TfrxReport; {$endif MSWINDOWS}
...
Aber beim übersetzen wird die "uses" immer wieder um diesen Text erweitert: "FMX.frxClass" und führt
beim übersetzen natürlich zum Fehler.

Ein Versuch diese Compileranweisung in dem Formular über die Report-Komp. (TfrxReport) einzubinden, mit
"Ansicht Formular als Text". Hat bei meinen Versuchen zur Zerstörung des Formulars geführt.
Angeblich konnte das Formular nicht gespeichert werden wegen ungültiger Zeichen.
Selbst das löschen der Einträge konnte diesen Defekt nicht mehr Rückgängig machen.
Ich musste das Formular aus einen SCCS-System zurücksichern.

Wie bekomme ich das sauber hin, dass diese Komponente bei Android als Ziel für den
Editor/Compiler nicht mehr vorhanden ist?
Gibt es da irgendwo einen Trick?

Thorsten

Sherlock 31. Aug 2022 12:12

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Zitat:

Zitat von tdeck (Beitrag 1511044)
Wie bekomme ich das sauber hin, dass diese Komponente bei Android als Ziel für den
Editor/Compiler nicht mehr vorhanden ist?
Gibt es da irgendwo einen Trick?

Die Komponente erst zur Laufzeit erzeugen, nicht im Designer auf die Form legen.

Sherlock

tdeck 31. Aug 2022 12:35

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Zitat:

Zitat von Sherlock (Beitrag 1511045)
Zitat:

Zitat von tdeck (Beitrag 1511044)
Wie bekomme ich das sauber hin, dass diese Komponente bei Android als Ziel für den
Editor/Compiler nicht mehr vorhanden ist?
Gibt es da irgendwo einen Trick?

Die Komponente erst zur Laufzeit erzeugen, nicht im Designer auf die Form legen.

Sherlock

Hallo Sherlock,

ok, das schaue ich mir mal an. Das erstellen der Komponente kann ich ja dann im FormCreate machen.
Problem ist hier wahrscheinlich nur, das ich nicht mehr in den Fast-Report Designer komme.
In der Embarcadero-Version funktioniert der Designer-Aufruf wohl nicht aus dem Programm, sondern nur
auf der Komponente im Kontextmenü. Die Vollversion möchte ich mir noch nicht kaufen, solange ich nicht
sicher sagen kann das alles gut funktioniert. Aber dafür kann ich mir erstmal ein kleines Programm erstellen
um den Designer mit dem Formular getrennt zu starten.

Thorsten

Sherlock 31. Aug 2022 12:58

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Ja, im Prinzip musst Du das Design des Formulars in einer anderen App erledigen, und das Formular dann zur Laufzeit in der eigentlichen App laden. Das sollte eigentlich gehen, mit Reports habe ich seit Ewigkeiten nichts mehr gemacht.

Sherlock

tdeck 31. Aug 2022 13:15

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Hallo Sherlock,

ich habe mich vor langer Zeit mal mit dem generieren von Komponenten zur Laufzeit beschäftigt.
Ich muss doch eigentlich die erstellte Fastreport-Komponente beim Parent TForm1 eintragen oder?

Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  {$ifdef MSWINDOWS}
  Form1.Width:=Round(Screen.WorkAreaWidth);
   Form1.Height:=Round(Screen.WorkAreaHeight);
    AppFilePath := ExtractFilePath(ParamStr(0));

  FR             := TfrxReport.Create(Self);
  FR.Parent      := Self;
  {$endif MSWINDOWS}
end;
...
...
...
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  {$ifdef MSWINDOWS}
    Fr.Free;
  {$endif MSWINDOWS}
end;
...
Die Zeile "FR.Parent := Self;" führt zum Fehler "[dcc32 Fehler] AppMain.pas(604): E2010 Inkompatible Typen: 'TfrxComponent' und 'TForm1'"

Lass ich das FR.Parent weg, scheint es zwar zu funktionieren, bin mir aber nicht sicher ob das auf Dauer ok ist.

Thorsten

Sherlock 31. Aug 2022 13:20

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Ja, der Parent sollte eigentlich das sein, wo der Report drauf liegt. Auch beim Create solltest Du den Owner mit angeben, also wieder die Form.

Sherlock

himitsu 31. Aug 2022 13:20

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
TfrxReport.Create(Self);

Free nicht nötig :angle2:


Zitat:

FormClose(Sender: TObject; var Action: TCloseAction);
Aber wenn, dann hätte es ins OnDestroy gehört, da im Create erstellt.

Wird die Form direkt mit Free/Destroy freigeben, dann wird OnClose garnicht mehr aufgerufen.



Zitat:

Form1.Width:=
Du bist schon in der Form ... darin benutzt man niemals die globale Variable.

Width:=
oder
Self.Width:=

tdeck 31. Aug 2022 13:49

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Hallo Sherlock,

danke für die Idee mit der Laufzeitgenerierung :thumb:

Zitat:

Zitat von himitsu (Beitrag 1511051)
TfrxReport.Create(Self);

Free nicht nötig :angle2:

Hallo himitsu,

danke für die Info :-)

Zitat:

Zitat von himitsu (Beitrag 1511051)
Zitat:

Form1.Width:=
Du bist schon in der Form ... darin benutzt man niemals die globale Variable.

Width:=
oder
Self.Width:=

Ja, ich weiss und trotzdem passiert es mir beim schreiben immer wieder mal ;-)

Thorsten

Uwe Raabe 31. Aug 2022 14:01

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Zitat:

Zitat von Sherlock (Beitrag 1511050)
Ja, der Parent sollte eigentlich das sein, wo der Report drauf liegt.

Das gilt nur für
Delphi-Quellcode:
TWinControl
.
Delphi-Quellcode:
TfrxReport
ist aber keins: TfrxReport -> TfrxComponent -> TComponent

Sherlock 1. Sep 2022 09:10

AW: FastReport in Projekt verwenden wenn Ziel auch Android ist
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1511053)
Zitat:

Zitat von Sherlock (Beitrag 1511050)
Ja, der Parent sollte eigentlich das sein, wo der Report drauf liegt.

Das gilt nur für
Delphi-Quellcode:
TWinControl
.
Delphi-Quellcode:
TfrxReport
ist aber keins: TfrxReport -> TfrxComponent -> TComponent

Ups! :oops: Ich ziehe mich auf meine Aussage zurück, lange nichts mehr mit Reports getan zu haben. 8-)

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:53 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