Autor Beitrag
firefuzy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 69

Win 98 SE, WinXP Prof, Vista HPrem.
Delphi 7
BeitragVerfasst: Mi 31.10.07 14:55 
Hallo an Alle :wink:

Ich suche im Moment eine Komponente, die für mich Reports erstellen kann. Da ich Delphi 7 Personal benutze habe ich leider kein Quickreport. :( Ich habe dann die JEDI-Komponente "JvgReport" gefunden, aber hat die JEMALS IRGENDWER benutzt?? Probiert mal "Jvgreport" in Google einzugeben... ganze 5 Treffer! Nichtmal in der Referenz der JVCL ist die Komponente dokumentiert; dort ist sie nur als "not documented" aufgeführt.
Ich weiß nicht wirklich was ich tun muss um einen Report zu erstellen und brauche deshalb Hilfe.

Kennt jemand von euch eine kostenlose und besser-dokumentierte Alternative oder hat Tipps zur Benutzung von JvgReport?

Dann her damit :zwinker:

firefuzy
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Do 01.11.07 13:26 
Ich habe vor kurzem einen kompletten Print-Dialog geschrieben, der verschiedene Dinge drucken kann. Er basiert auf der Jedi-Komponente TjvCustomPreviewRenderer.
Um das zu implementieren, müsstest Du dich in die Jedi-Komponenten der verschiedenen Renderer reinlesen (ich habe auch länger gebraucht um es zu kapieren). Eine einzelne Druckseite wird über die CallBack-Methode DoAddPage erzeugt.

Notfalls kann ich Dir meinen Code hier posten, aber wäre das wirklich eine Hilfe? ;-)
Über DoAddPage wird jede einzelne Seite (PageIndex=0..Seitenummer-1) einfach über das mitgelieferte Canvas-Objekt gezeichnet. Einfacher geht's nicht.
Den eigentlichen Ausdruck startest Du mit CreatePreview. Das Schöne daran ist, dass die Druckvorschau schon vor dem eigentlichen Ausdruck auf dem Drucker zu sehen ist.

Hier jedoch zum Start die grobe Definition meines eigenen Renderers, dass Du Dir schonmal ein ungefähres Bild machen kannst. Wie gesagt ist es etwas Lesearbeit aber Du wirst mit dem Ergebnis zufrieden sein, versprochen!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  TMyPreviewRenderer=class(TjvCustomPreviewRenderer)
  private
    FFinished:boolean;
  protected
    procedure DoAddPage(Sender:TObject; PageIndex:Integer; Canvas:TCanvas;
      PageRect,PrintRect:TRect; var NeedMorePages:boolean); override;
  public
    constructor Create(AOwner:TComponent; newprintpreviewdialog:TPrintPreviewDialog); reintroduce;
    destructor Destroy; override;
    function CreatePreview(Append:boolean):boolean; override;
  end;

_________________
Es gibt keine Probleme - nur Lösungen!
firefuzy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 69

Win 98 SE, WinXP Prof, Vista HPrem.
Delphi 7
BeitragVerfasst: Do 01.11.07 14:46 
Hi erstmal Danke für die Antwort

Einen eigenen Printdialog zu schreiben ist mir glaub noch zu hoch, ich verstehe bei deinem Quelltext (fast) nur Bahnhof.
Mit den Preview-Komponenten komme Ich leider bisher nicht wirklich zurecht. Ich hab mal folgendes gemacht:

- Ein JvPreviewControl & ein JvPreviewRenderStrings auf meine Form abgelegt
- JvPreviewRenderStrings.PrintPreview auf JvPreviewControl zugewiesen
- JvPreviewRenderStrings1.Strings was reingeschrieben
- Zur Laufzeit CreatePreview aufgerufen

So weit so gut, der Text ist dann links oben in der Control erschienen, aber wie formatiere ich das ganze jetzt??? Ich habe nirgends etwas gefunden um die Position des Textes zu verschieben.
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: Fr 02.11.07 08:49 
Richtig. Gut erkannt. :-)

Das Manko an den fertigen Render-Objekten ist die Tatsache, dass sie zu starr sind. Daher schlug ich ja vor, von dem übergeordneten Renderer einen eigenen abzuleiten und Deine eigene DoAdd-Page Routine zu schreiben. Da kannste Dich dann mit allen Canvas-TextOuts austoben.

Aber Du scheinst auf dem richtigen Weg zu sein.

_________________
Es gibt keine Probleme - nur Lösungen!