Einzelnen Beitrag anzeigen

SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
313 Beiträge
 
Delphi 12 Athens
 
#3

AW: Rave druckt wie blöd.. - oder garnicht. [erledigt-mit Tutorial]

  Alt 29. Dez 2012, 01:13
Vielen Dank für die neuen Denkanstöße. Hat geholfen.

Und damit ich das später auch noch weiß, und andere auch daraus Nutzen ziehen können, schreibe ich hier mal die Auflösung hin

Ich habe mich also für die GetRow/GetCols/OnOpen-Variante entschieden und die anderen entfernt.
Rave übernimmt dann das zeilenweise Daten-anfordern.

Dazu muss man dann auch wissen (ich habs jetzt gelernt), daß der große Raveeditor aktiv mit der IDE zusammenarbeitet, auch wenn er nicht danach aussieht.

Um das Layout in Rave zu gestalten, sollte das eigene Programm ausgeführt sein und im Grid Daten bereitstellen. Dann kann man nämlich im Raveeditor mit F9 beim Layout-gestalten sich immer wieder die Druckvorschau ansehen, mit den Daten des Grids.
Dabei ist zu beachten, daß Felder, die man im Delphi mit SetParam an Rave sendet, leer bleiben.

Parameterfelder sind DataText-Komponenten.

Um diese zu nutzen, legt man rechts in der Objektanzeige bei "RaveProject" bzw. spätestens bei "Report1" (anklicken) in der Eigenschaft "Parameters" (Stringliste editieren, in jede Zeile einen) die Namen der Parameter an.
Die Parameter werden dann so übergeben:
Delphi-Quellcode:
procedure TForm2.Drucken1Click(Sender: TObject);
begin
  with RvProject1 do begin
  SetParam('DataText1',edit1.text);
  SetParam('DataText2',edit2.text);
// SelectReport('Report1', true); // wenn man noch andere Reports hätte
  Execute;
 end;
end;
Andersherum schreibt man in seinem Programm den Code, zB optische Anpassungen der Strings. Das Programm wird normal ausgeführt - und dann sind auch die mit SetParam übergebenen Parameterfelder gefüllt. Wenn Rave feststellt, daß die in StoreRAV gespeicherte Version des Layouts nicht aktuell ist, bietet es an, dieses zu laden - andernfalls kann man das zur Entwurfszeit auch selber machen.

Sollte es vor der Druckvorschau einen Fehler geben, daß Rave etwas nicht öffnen/konnektieren könne, liegt das daran, daß man sich die Vorschau sowohl im RaveEditor als auch im Programm ansehen wollte (hier und da öffnen funktioniert nicht) - Dann eines von beiden beenden (hat was mit Threads zu tun). Bleibt der Fehler beim Klick auf [Wiederholen]: Rave beenden, dann sollte es wieder gehen.

Ich hatte auch das Problem mit den Regionen und Bändern.

Schließlich habe ich alles auf eine Region1 gepackt und wie folgt konfiguriert:
-Band1 (Briefkopf, nur auf der ersten Seite zu drucken): TextBand, (Master 1). Hier sind auch die Parameter-Felder.
-Band2 (Überschriften der Spalten, Kopfzeile): TextBand, (B 1 P), Controllerband: DataBand1
-DataBand1 (Hier füllt Rave dann die Daten in meine vorgegebenen Felder rein): (Master 1 P)
Region1 füllt dann fast das ganze Blatt, damit Rave genügend Raum für die Tabelle hat.

Die Tabelle selbst (also das Gitter) legt man einfach mit Linien an (im Tab "Drawing" zu finden).

Zusätzlich habe ich noch eine Fußzeile aufs Blatt gebracht, die nicht - wie man denken könnte - als Footer in Region1 angelegt wird, weil der Bodyfooter unlogischerweise nur auf der letzten Seite am Tabellenende gedruckt wird (im Gegensatz zum Bodyheader, der auf jede neue Seite gedruckt wird [wahrscheinlich ein Bug]).
Diese Fußzeile habe ich in Region2 angelegt: TextBand, (Master 1P).

Im DataBand1 lege ich meine DataText-Felder an, und klicke oben links auf das Icon "view", das dann die Datenfelder in der Objektauflistung rechts unter "Data View Dictionary" und "DataView1" anlegt (ich habe das gemacht, plötzlich ging es, weiß auch nicht mehr genau wie - das Programm musste dabei laufen, oder so). Rave hat dann auch die Eigenschaft "ConnectionName" auf meine Komponente im Delphi (RvCC) gesetzt und die "Size" der StringField-Komponenten, die ich im Quellcode in der Procedure RvCCGetCols definiert habe.

Beim Auswählen der positionierten Elemente auf der Rave-Seite sollte man lieber die Objektübersicht auf der rechten Seite des Editor nehmen, weil man nur zu leicht die Positionen beim Anklicken verschieben kann und ein Undo es dafür nicht gibt.
Also wähle ich meine DataText-Objekte an (mit der Shifttaste auch mehrere auf einmal) und setze die Eigenschaft "Dataview" auf "Dataview1", was vorhin angelegt wurde.

Dann wende ich mich (wieder) dem Quellcode zu.

("RvCC" ist bei mir die TRvCustomConnection)

Ich habe die Rave-Komponenten RvSystem1, RvProject1 und RvCC.
-RvSystem: Hier passe ich die Druck-Seite an, wie ich es brauche: zB Systemprinter.Orientation: poLandscape (da suchte ich eine Weile); und die Texte auf deutsch..
-RvProject1: Hier geht es um das Layout, das in einer .rav-Datei gespeichert ist. Das also in ProjectFile angeben oder besser, den Dialog bei StoreRAV ([...]-Button) ausfüllen. Die Eigenschaft "engine" auf 'RvSystem1' setzen.

-RvCC: Hier geht es darum, die Events zu setzen:

Delphi-Quellcode:
procedure TForm2.RvCCOpen(Connection: TRvCustomConnection);
begin
//Für das TStringGrid ("FallGrid"), das ich verwende (ich habe darin eine Kopfzeile, die ich nicht in Rave ausgedruckt haben will) schreibe ich also:

  Connection.DataRows:=FallGrid.RowCount-2;
end;

procedure TForm2.RvCCGetCols(Connection: TRvCustomConnection);
begin
 with Connection do begin
   WriteField('DataText3',dtString,10,'','');
//für jedes Feld so eine Definition; "10" ist die Feldlänge in Zeichen, was drüber rausgeht, wird abgeschnitten
 end;
end;

procedure TForm2.RvCCGetRow(Connection: TRvCustomConnection);
begin
 with Connection do begin
   WriteStrData(FallGrid.Cells[1,DataIndex+1],'');
//...wie bei GetCols: für jedes Datenfeld eine Anweisung in der gleichen Reihenfolge!
 end;
end;
Tja, und nun läuft das. Schön siehts aus

Danke, daß es dieses Forum gibt
  Mit Zitat antworten Zitat