Quick Report drucken?
-
Hallo,
ich habe ein Problem mit einem Quick Report.
Ich kann das Teil einfach nicht ausdrucken.Muss ich da was spezielles beachten...

Wenn ich das Teil ausdrucken will, kommt für ne halbe Sekunde eine Meldung "drucken" aber das wars dann...
Weis eine/r nen Rat?
Gruß
Niko//EDIT --> ach ja, auf den QuickRep1 hab ich mal ein QRLabel und ein QRImage gesetzt, zum testen....
void __fastcall TForm1::Button1Click(TObject *Sender) { if (Form1->PrintDialog1->Execute()==true) { Form1->QuickRep1->Print(); } }
-
Hallo!
Wahrscheinlich hast du in deinem QuickReport noch kein Band gezogen.
Gehe so vor: In der Komponentenpalette klicke im Register "QReport" doppelt auf "QuickRep" und dann klickst du doppelt auf "QRBand".
Und auf dieses Band erstellst du dann deine anderen Komponenten, also dein Label, deine Images usw.Und dann funktionierts.
Das mit deinem PrintDialog kannst du allerdings vergessen, hier ist QuickReport (leider) etwas eigenmächtig. Das machst du am besten mal so:QuickRep1->PrinterSetup(); if (QuickRep1->Tag != 1) QuickRep1->Print();HTH
ciao
Robert
-
Ok, super!
Funktioniert!
Jetzt hab ich da aber noch ein Problem.
Über diesen Report will ich den Inhalt meines Stringrids ausgeben.
Den jeweiligen Inhalt hole ich mir immer aus ner Struktur.Wie kann ich das jetzt am besten realisieren, weil der Inhalt ist ja immer variabel, also jedesmal etwas anders...
Is zwar immer das selbe Format aber mal sinds nur 3 Spalten, mal sinds 300...
Ich will mir da ja nicht für jeden "Datensatz" ein extra Label anlegen...?Sorry für die Frage, aber hab bisher noch nie was mit Rekords gemacht...

Gruß
Niko
-
Hallo!
Dazu solltest du dir erstmal den Inhalt des StringGrids in ne Datenbank speichern. Sonst brauchst du wirklich 400 Labels!
tschüss
Robert
-
ja, aber ich hab ja immer den aktuellen Inhalt des Stringrids...
Kann ich das nicht irgendwie über die Struktur machen?
-
wie sieht die struktur denn aus?
-
private: typedef struct duebel{ char bezeichnung[45]; char baustoff[45]; char werkstoff[25]; char wirkungsprinzip[25]; char feuerwiederskl[20]; char anschlussgewinde[5]; char montageart[40]; float t_fix; int s_min; int c_min; float h_min; char duebelkopf[30]; char einsatzbereich[50]; char zulassungsnr1[25]; char zulassungsnr2[25]; }StrukturDuebel; StrukturDuebel *Datensatz;
-
Hallo!
ohgott... bist du sicher, dass du schon bereit bist für quickReport?
Und woher hast du dann die "Liste" hast du das ganze zusammengebastelt zu ner verketteten Liste oder wie?tschüss
Robert
-
ja, mach das mit ner Liste...
wie ich das hier raushöre bist du etwas entsetzt...
Aber ich mach das halt noch net so lang...

Hast du mir ne einfachere Möglichkeit?
Ich will halt was ausgeben das einigermaßen aussieht und net sagen Form1->StringGrid1->print()... oder so ähnlich.
-
Hallo!
Ich sage dir mal ganz einfach, was ich denke:
Du hast die Grunddinge verstanden! Nicht schlecht, dein Code ist eigentlich schon ganz prima. Vorausgesetzt wir schreiben das Jahr 198x...
Mittlerweile hat man "String"s eingefügt, das mit deinen "chars" ist nicht mehr so ganz aktuell...Ich würde dir echt empfehlen, eine Datenbank einzusetzen! Schau dir dazu am besten die komponente TTable, TDataSource und TDBGrid an. Sonst wirst du nicht froh!
Diese verkettete Liste zu drucken, wäre total "unschön" da müsste man sich selbst darum kümmern, dass man den nächsten Datensatz nimmt usw.
Da nützen eigentlich die Vorteile von QuickRep gar nichts!Bitte nicht falsch verstehen! Mir persönlich wäre das jetzt auch zu viel Arbeit, dir ne "Komplettlösung" zu bieten, welches deine verkettete Liste druckt - mit der Datenbank könnte ichs mir überlegen, wa wärens nämlich nur ein paar Zeilen!
tschüss
Robert
-
ok, aber es muss doch trotzdem möglich sein, so etwas grafisch etwas ansprechender zu gestalten.
Und es muss doch auch gehen, die "Daten" aus meiner Struktur zu holen.Kann mir da sonst noch jemand nen Tip geben?
Ich möchte das "Programm" jetzt halt nicht total umschreiben.Das einzige was mir im Moment halt noch fehlt ist das ich den Inhalt aus dem StringGrid mit ner Überschrift und evtl. noch mit nem Bildchen ausgeben kann...
Gruß
Niko
-
Hallo!
Glaub mir, du tust dir wirklich keinen Gefallen!
Wenn du das wirklich einigermassen umsetzen möchtest, musst du wirklich viele Labels erstellen, in der Art:for (int i = 0; i < anzahlderelementeinderinerverkettetenlistehihi; i++) //:-) { TQRLabel *lbl = new TQRLabel(Band1); lbl->Parent = Band1; lbl->Caption............. }Also, das wird wirklich viel Arbeit, die ich dir nicht abnehmen möchte.
Vielleicht reichts dir aber auch schon "billig", dann erstell dir ein QRImage auf deinem Report und hacke dann folgenden Code ein:
StringGrid1->PaintTo(QRImage1->Canvas, 0, 0);setzt allerdings voraus, dass in deinem StringGrid wirklich alles sichtbar ist. (ohne ScrollBars)
tschüss
Robert
-
Hallo,
ich hab ein ähnliches Problem mit dem Quick Report, nur dass ich immer nur die erste Seite anzeigen kann, dann bricht er ab und meldet dass er eine temporäre Datei nicht erzeugen kann. Früher win98 gings und die programme laufen auch dort, nur unter XP is Sense. (BCB 3)
-
Es ist mir also nicht möglich, ohne DB mit nem QReport zu arbeiten?

Gibt es irgendwelche anderen "Reports" die das können?
Gruß
Niko
-
Hallo Niko!
Hast du eigentlich meinen Beitrag nicht gelesen?? Ich hab dir doch gesagt, dass du ne SCHLEIFE brauchst, oder du machst das mit PaintTo!!
tschüss
Robert
-
Doch, klar hab ich den gelesen...

Klang auch ganz gut mit der Schleife...
Aber ich bekomm das nicht so richtig hin...Gibts da irgedwo was gutes zum Einlesen?
-
Also mit der Schleife erzeugt er mir zwar die Labels auf dem Band, aber so wie ich das sehe liegen die alle übereinander.
Wie positioniere ich diese dann?
-
habt ihr euch schon mal
OnNeedData
angesehen?
bei dem ereignis kann man auf nicht datenbankbasierte Druckausgaben reagieren
und solange MoreData==true ist wird eine neue "zeile" angefangen
-
Label->Left = 100; Label->Top = 40;
-
Also ich hab die Schleife jetzt mal testweise so gelöst:
Ich leg mir also auf meinem QuickRep1 zur Laufzeit ein "Band" an, auf jedes Band leg ich ein paar Labels...
Dann folgt das nächste Band usw.Hier mal der Code:
void TVerwaltung::drucken(void) { for (int Zeile = 0;Zeile < Form1->StringGrid1->RowCount;Zeile++) { TQRBand *Band = new TQRBand(Form2->QuickRep1); for (int Spalte = 0;Spalte < Form1->StringGrid1->ColCount;Spalte++) { TQRLabel *lbl = new TQRLabel(Band); lbl->Parent = Band; lbl->Caption = "hallo"; //lbl->Left=100; //lbl->Top=20; } } Form2->QuickRep1->Print(); //Form2->Show(); }wenn ich jetzt drucken will, erscheint zwar kurz eine Meldung "Drucken" aber dann passiert nichts mehr...
Das Programm läuft aber ganz normal weiter...