Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
1.025 Beiträge
 
#1

Report-Generator LightPrint

  Alt 26. Nov 2025, 17:58
Ich hatte mal etwas Zeit, und das habe ich mich mal einem Projekt angenommen, das ich schon lange mal vorhatte.

Einer meiner Kunden hatte eine besonderen Wunsch. Er wollte in einem alten Projekt von mir (damals noch unter D7) einen Ausdruck, der aber immer eine statische Seite anhängt. Und das natürlich in einem Druckauftrag, da der Drucker per Duplex das auf die Rückseite drucken sollte (Es ging um Mietverträge). Ist aber gar nicht so einfach. Zumindest hab ich das mit der Report-Komponente, die ich seinerzeit unter D7 verwendet habe nicht hinbekommen.

Kurzer Hand, und weil ich es sowieso mal wollte, hab ich mir mal eine kleine Report-Komponente selbst geschrieben. War dann doch fast 2 Wochen Arbeit, aber das was da rausgekommen ist, kann sich sehen lassen (denke ich zumindest).
Meine Anforderungen waren etwas anders, als man das von den gängigen Report-Komponenten so kennt.
- Beliebig viele Seiten
Man kann mehrere völlig unterschiedliche Seiten erstellen. Auf jeder Seite können alle Bänder (Header, Title, Detail, Summary, Footer) vorhanden sein und sind von einander unabhängig.
- Auf jedem Band können 5 Verschiedene Itemtype beliebig erstellt werden (TextItem, MemoItem, ShapeItem, ImageItem und LineItem). Für meine Zwecke reichte das erst mal
- Jedes Text-, Memo-, oder Imageitem kann mit einem beliebigen DataSource und DataField verbunden werden. Bei diesen Beiden Eigenschafte handelt es sich jedoch nur um Strings.
Hat ein Item ein DataSource und ein DataField, so wird über eine Event mit diesen Information der Inhalt abgefragt.
Das Detailband hat außerdem noch, sofern es über ein DataSource-String verfügt, das Event GetRecordCount und und GetNext um eben eine Liste auszugeben.
- Möglichst wenig verwirrende Eigenschaften, sondern auf das notwendigste redurziert. Denn der Kunde soll mit diesem Designer seine Reports selbst designen können. (Da waren mir die anderen immer etwas zu überladen)
- Man kann jeden Report in eine Datei oder auch in einen Stream speichern.

Nun kann ich mir die verschiedensten Seiten und Kombinationen aus Listen und Einzelformularen und statischen Texten beliebig zusammenstellen. Bzw. der Kunde kann das.
Ich hätte gerne ein Video hochgeladen, aber das ist einfach zu groß. Deswegen hab ich erst mal nur einen Screenshot angehängt. (Wenn einer weiß, wie man ohne große Accounts ein Video im Internet für eine gewisse Zeit parken kann, dann kann ich hier einen Link dazu posten).

Was ich jetzt damit mache, weiß ich noch nicht ganz genau. Eventuell packe ich das als Free-Component irgendwo hin, oder wenn dann für schmales Geld.
Wenn jemand Lust hat das mal bei sich zu testen kann ich gerne ein BPL für D12.2 (oder D7) und ein kleines Demoprogramm zur Verfügung stellen.

Evtl. findet sich auch jemand, der mit mir zusammen meine ganze Krücken da rausbastelt

Ansonsten könnte ihr auch gerne schreiben, ob für sowas überhaupt ein Bedarf da ist. Oder alle doch so große Anforderungen an Report-Komponenten haben, dass ich mit meine paar Features nicht weit komme

-----

Ich häng noch mal eine Demo.exe als RAR an. Wer mag kann sich die Anschauen.
Dort wird nach dem Start gleich ein Beispiel-Report erzeugt, den man mit "Designer aufrufen ..." anzeigen kann. "Report Speichern" speichert den Report als Datei, Report Laden...naja läd einen halt wieder. "Neuer Report" macht den Designer leer, wenn man einen neuen anlegen will. Und "Drucken" ist wohl selbsterklärend.

Natürlich ist das Projekt noch weit von Perfektion entfernt. So kann es durchaus zu der einen oder andere Exception kommmen. Auch das Mousehandling ist noch nicht perfekt, bzw. das Verschieben oder die Größenänderungen mit der Maus.
Miniaturansicht angehängter Grafiken
designer.png  
Angehängte Dateien
Dateityp: rar LightPrintDemo.rar (1,91 MB, 21x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (26. Nov 2025 um 18:09 Uhr)
  Mit Zitat antworten Zitat