04. september 2003 - 01:29Der er
44 kommentarer og 1 løsning
quickrep vælger ikke den rigtige record til print
Når jeg har valgt en record på min hovedform og vil printe den, kalder jeg min quickrep. med koden:
procedure TNoteForm.UdskrivMenuClick(Sender: TObject); begin if PrintDialog.Execute then PrintHelles.HP.Preview; end;
Siden hentes....men desværre vil quickrep. Nu gerne printe hele 10 vilkårlige sider fra min tabel.... og teksten på selve printet går ud over A4 siden. Hvordan løser jeg det problem?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Jeg er ved at lave en opslagsbog "kogebog". Det jeg vil er,når jeg står på en bestemt madopskrift, skal jeg kunne, hurtigt og let,printe præcis denne opskrift med billede og tekst. Nu henter den min quicrep, som vil printe flere og helt vilkårlige sider fra min kogebog!! Måske kan det lade sig gøre direkte fra min hovedform, hvor mit "DBRichEdit-felt" og "DBImage-felt", bliver printet ud samtidig. måske bare ved at tilføje lidt kode til: procedure TNoteForm.UdskrivMenuClick(Sender: TObject); begin if PrintDialog.Execute then ??????? end; Kan det overhovedet ladesig gøre? Hvis ikke - hvordan får jeg så quickrep. til at opføre sig ordentlig?
Kære Stone Du er så dygtig og jeg er kun en nybegynder, der ikke har programmeret det sidste år...så vil du ikke nok være sød og forklare lidt nærmere, hvadjeg præcis skal gøre? Jeg har fundet Memo og placeret den på hovedformen. Nu kan jeg ikke komme videre, fordi jeg ikke er klog nok! Vil det være bedst at anvende Memo? Jeg vil meget gerne have løst problemet, da programmet snart er færdigt og vigtig for mig.
OK....om du skal bruge memo eller richedit, kommer an på om det er ren tekst eller formateret tekst, når du bruger richedit kan du gemme din tekst i forskellige formater f.eks hvis du har skrevet din tekst i verdana bliver den gemt med formateringen verdana, memo kan kun gemme simpel tekst. Først skal jeg vide om dit program indeholder en database?
Hvis den gør det kan du bruge ovenstående kode, som du bruger i din event for en f.eks Tbutton - når du trykker på en Tbutton1 bliver indhold af dbedit1 overført til din memo/richedit,
herefter putter du en Tbutton2 på din form og skriver://eller kopiere indhold her fra
var Line:Integer; PrintText:System.Text;// udskriver indhold i memo/richedit begin if PrintDialog1.Execute then begin AssignPrn(PrintText); ReWrite(PrintText); Printer.Canvas.Font := History.Font; for Line :=0 to History.Lines.Count - 1 do Writeln(PrintText, History.Lines[Line]); System.Close(PrintText); end; end;
Læg mærke til at jeg har kaldt min memo/richedit history det kan du ændre til et andet passende navn.
Husk under uses at skrive printers Husk at smide en printdialog på din form (den finder du på fanebladet dialogs)
skulle der stadig være problemer med koden siger du bare til :)
Mit program indeholder en Paradoxtabel kaldet M.DB, som vel er en database.Tabellen hedder Table1. Har et felt "DBrichedit1" på min hovedform "Start", hvor jeg kan ændre og gemme tekst i forskellige formater. Har lige smidt en printdialog på "Start" og tænker lidt over, hvad du ellers har skrevet. Det er jo svært !
Du er dygtig!! men: NU bliver mit DBImage jo ikke printet med (som det skal) og formateringen er væk. Koden virker fint og teksten fra en valgt side bliver printet. Kan du ikke ændre lidt i din(nedenstående kode), således DBImage + tekstformatering printes med. Eller helst, sådan den valgte side i min, ellers så "fine", Quickrep. ved navn: "HP:TQuickRep", printes ud?
Du må altså ikke forlade mig Stone :)
AssignPrn(PrintText); ReWrite(PrintText); Printer.Canvas.Font := History.Font; for Line :=0 to History.Lines.Count - 1 do Writeln(PrintText, History.Lines[Line]); System.Close(PrintText);
lige for øjeblikket har du ikke brug for quickrep... bruger selv dbpro til mine filter opgaver når jeg benytter min egen ændrede quickrep. (dvs andre ikoner dansk hint popup) Jeg er ikke så stiv i filtrering i databaser, derfor bruger jeg dbpro som er et component med med søgemuligheder/filtrerings muligheder. Dbpro skal købes hvis det skal bruges udenfor IDE (altså udenfor dit programmeringsmiljø) Iøvrigt har du dbrxrichedit.... så kunne du printe både tekst og billedet ud)
her er koden til at udskrive et billede fra dbimage.
var r:TRect; begin with printer do begin BeginDoc; r.top:=0;//x r.left:=0;//y r.Right:=r.top+dbimage1.Picture.Width*300 div 75; r.Bottom:=r.left+dbimage1.Picture.Height*300 div 75; Canvas.StretchDraw(r,dbimage1.picture.Graphic); EndDoc; end; end;
Nu der det sådan ud under min printerknap: var Line:Integer; PrintText:System.Text;// udskriver indhold i memo/richedit begin if PrintDialog1.Execute then begin History.lines.add(DBRichEdit1.text); AssignPrn(PrintText); ReWrite(PrintText); Printer.Canvas.Font := History.Font; for Line :=0 to History.Lines.Count - 1 do Writeln(PrintText, History.Lines[Line]); System.Close(PrintText); end; end;
Teksten bliver skrevet ud i en smal stribe, og fylder derved ikke A4 papiret ud.Ej heller skriver den udskriften ud med records-font. At Dbpro skal købes hvis det skal bruges udenfor IDE (altså udenfor dit programmeringsmiljø), vil det sige jeg skal købe den, når det er til privat brug? Hvordan får jeg fat i den? Du skriver jeg har dbrxrichedit...Hvor finder jeg den? :) Uden det du skiver her--Kan det så ikke lade lig gøre?
I din dbrichedit kan du vælge den font som den skal have som standard
Tryk på din dbrichedit - og gå til object inspector og vælg font - flyt musen til Tfont og dbclick med musen - nu kan du vælge din font som din dbrichedit skal bruge som standard.
Den virker også perfekt i quickrep - når man søger efter bøf med løg, bliver alle andre sorteret fra - og når du derefter kalder din quickrep bliver kun den vist.
Det der med font i dbrichedit objekt inspektor kan jeg godt se. Nu er det bare sådan, at når jeg skriver en opskrift på bøf ind kan jeg vælge forskellige skrifttyper, overskrifter osv. Dvs hver side indeholder forskellige fonts og tekststørrelser. Det printes jo ikke ud, når jeg vælger linien: Printer.Canvas.Font := DBRichEdit.Font; nærmest skulle det hedde noget i retning af: Printer.Canvas.Font := DBRichEdit.DataField.Note.Font; Hvilket det selvfølgelig ikke kan! IH Guder hvor er det svært!!! Du kan godt se jeg er ikke god til at kode ...så når du nu lige kan finde bøf med løg i Quickrep...vær så lige sød at omforme koden til at lede i min Quickrep. Jeg går til dit link :)
næ..men så sletter du bare den linie Printer.Canvas.Font := History.Font; så er det den aktuelle valgte font der bliver udskrivet, hvis du har tilknyttet en fontdialog til din dbrichedt.
I dbpro skal der ikke skrives nogen kode undtagen hvis filterresultat skal slettes, for at kunne se alle dine posteringer igen.
dbfilterpanel1.ClearValues; //sletter værdien i felterne
den mest brugte funktion i componentet dbpro er dbfilterpanel(herved undgår du engelske ord), hvor du i datasource vælger datasource1, herefter fremkommer der flere felter med muligheder for at søge med and or osv.. de felter and or er ikke nødvendig i dit tilfælde de kan fjernes ved at vælge "countoptions" og sætte den til coOne Det her er opsætningen inden du compiler dit project.
Nu har jeg dbpro Hvor skal jeg placere dbfilterpanel- På Startsiden eller på Quickrep? Er dbfilterpanel-komponenten, den eneste jeg skal have på formen? Har nu placeret dbfilterpanel på min startside og sat den op som du beskriver. Hvad skal aktiveres-tænker her på bla. events Du bliver altså nød til at guide mig igennem....ik'
Det pæneste vil være at: placerer din dbfilterpanel på en anden form, og så kalde din form f.eks hvis din form hedder form2 skriver du: form2.showmodal;
showmodal gør at form2 ikke forsvinder hvis man prøver på at klikke på form1 dbfilterpanel er det eneste du skal have på din form2 I din form2 sætter du den til at use unit fra form1, det gør du sådan: gå til file - use unit her får du valget at use unit1. Det er for ikke at skal gentage brugen af datasource osv i din form2.
YES, YES, YES, nu printes der både billede og tekst! Nu er det bare sådan, at "Bøf med løg" fylder flere A4 sider:. Nu printes kun den første A4 side af " Bøf med løg" og det går jo ikke!! Hvor og hvordan ændre jeg det?
Hvor og hvordan skriver i events til filterpanel, at søgning skal udføres når jeg trykker på ENTER-tasten. Og ikke, som jeg har nu under(onEditExit), hvor der skal trykkes på en knap før Quickrep. vises
Det kan være din printer ikke kan se om der er flere sider, når du udskriver din rapport, skal du gå til printeropsætning,
prøv at indsætte indsætte en pagefooderband, her indsætter du qrsysdata1
eller det kan være i quickrep, hvor du skal gå til object inspector og se under options - firstpageheader true firstpagefooder true
nu kender jeg ikke dine felter i dbfilterpanel, hvis du har en ret der hedder bøf vil søgningen starte allerede ved det første bogstav, da "bø" ikke forkommer ret tit. når din søgning starter bliver alle ikke relevante data sorteret fra så kalder du din Form1.quickrep1.preview, funktionen kan du tilegne en Tbutton efter at quickrep bliver vist vises kun det søgte data.
Har i quickrep sat : firstpageheader true firstpagefooder true Dette bevirkede at der nu er flere sider på " Bøf med løg"(ialt er denne opskrift på 3 sider), men det er stadig kun første side af opskriften der vises på alle 3 sider i preview/print.
Du skriver:prøv at indsætte indsætte en pagefooderband, her indsætter du qrsysdata1
Q. I am trying to print a report on a HP5P using a top margin of 4mm, but only the first page comes out. A. We have had reports of a problem with the driver for the HP5P where it could not handle that margin size. The work around would be to use the HP6 driver with this printer.
Har fundet data sys og: Har gjort som du har beskrivet, men jeg har fundet ud af,at i preview kommer kun den første del af alle opskrifter med. Der er altså ikke kun problemer med de opskrifter som fylder mere end 1 side.(Alle kan records vises) Prøver at arbejde videre. Målet må snart være nået!! Godt gået Stone
prøv at kigge på dine indstillinger i dbfilterpanel,måske ligger fejlen der. ellers ved jeg ikke hvorfor den ikke viser alle sider på den søgte record. husk at gemme dit project jævnligt, hvis der skulle opstå problemer kan du genskabe det ved at omdøbe de backup filer som fremstår når du gemmer dit project. eller giv dig tid til at studere kb.zip fra qsoft eller de andre hjælpefiler. for at se hjælp på en component - marker den og tryk F1, det virker også på de funktioner der er i object inspector.
Tak for dine tips!! Det er dejligt at blive klogere. Har set nærmere på QuickReportFAQ.doc Og fandt bla dette:
Q. I have a report that prints fine on a HPIII printer but not on the HP4. Either the text is missing, or the bands print black. A. There have been many reports of problems with the HP4 (and HP5) printers. You should make sure that you are using the current driver from HP's web site (http://www.hp.com/cposupport/jsnav/prhome.html). You may also need to check the page protect option in the printer driver and/or set the DPI to 300.
Men den hjemmeside findes desværre ikke mere! Nu gik det ellers så godt!! Arbejder videre på problemet, men ved du hvad. Nu har du jo været så sød, at hjælpe mig til at kunne printe både billede og Tekst udenfor Quickrep. Jeeg kan nu printe først billedet på A4 papir nr.1 og Teksten på A4 papir nr.2. Kan du ikke ændre i koden, sådan at både billede og tekst printes på samme ark?
Min kode ser sådan ud(har selv prøvet mig lidt frem, men desværre går den død): procedure TPrintValg.Image3Click(Sender: TObject);
var Line:Integer; r:TRect; PrintText:System.Text;// udskriver indhold i memo/richedit begin if PrintDialog1.Execute then begin with printer do begin BeginDoc; r.top:=0;//x r.left:=0;//y r.Right:=r.top+start.dbimage2.Picture.Width*150 div 75; r.Bottom:=r.left+start.dbimage2.Picture.Height*150 div 75; Canvas.StretchDraw(r,start.dbimage2.picture.Graphic); EndDoc;
Start.History.lines.add(Start.DBRichEdit1.text); AssignPrn(PrintText); ReWrite(PrintText); Printer.Canvas.Font := Start.History.Font; for Line :=0 to Start.History.Lines.Count - 1 do Writeln(PrintText, Start.History.Lines[Line]); System.Close(PrintText); end; end; end;
Ellers må jeg prøve at leve med det---og det er svært! Forresten kunne jeg heller ikke finde ud af at rette i koden, således printet bevarede den af brugeren valgte tekstformatering. Er det umuligt at give dig flere point for din tålmodighed og hjælp?
Det er ikke muligt at printe tekst og billede på samme a4 udenfor quickrep, undtagen hvis du bruger dbrxrichedit fra rxlib.com //kan ikke finde deres hjemmeside men jeg har rxlib hvis du vil have det tilsendt via mail
hvis du bruger begge funktioner, til den samme control, dannes der en printerkø
det kan være det er derfor den går død.
til din kode som skal rettes for at brugerens egen valgte font udskrives, slettes denne linie: Printer.Canvas.Font := Start.History.Font; brug da:
if fontdialog1.Execute then richedit1.Font := fontdialog1.Font;//brugerens valg af font før udskrivning som kan tilknyttet en control som en Tbutton eller lign.
jeg har lavet et testprogram, som virker som det skal.
den viser alle sider i rapport// med nr 1-4 den udskriver alle sider i rapport den udskriver grafik i rapport//på samme side grunden til at du ikke får udprintet alle sider kan være at du ikke har lagt din qrdbrichedit i detailband1.
udskriften er lavet på en hpg85 officejet, med de nye drivere installeret.
Iøvrigt bruger jeg quickreport 3.05 Delphi5 Interprise
Kan du ikke sende mig dit testprogram, så jeg kan sammenligne og derved måske løse problemet? den viser alle sider i rapport// med nr 1-4 den udskriver alle sider i rapport den udskriver grafik i rapport//på samme side grunden til at du ikke får udprintet alle sider kan være at du ikke har lagt din qrdbrichedit i detailband1.
programmet gør brug af en anden database, som gør at du ikke kan compile det, men jeg sender det til dig alligevel, så kan du idet mindste se mine indstillinger i qrapport.
Kære Stone! DET VAR EN HÅRD FØDSEL! Nu virker min quickrep1, og den finder den valgte opskrift og kan printe det hele fint og nydeligt. Desværre fattede jeg ikke hvad det var der, der fik det til at virke. Jeg mener jeg bare satte autostrech til, men jeg har en anden quickrep2, som skal printe alle opskrifter. Her gjorde jeg så det samme, den tager alle opskrifter, men kun en del af hver (altså samme problem som før)!!! Jeg synes ikke at kan se forskellen på quickrep1 og quickrep2 Skal vi lukke her, så du kan få dine point for din store hjælp?, eller synes du vi skal holde det åbent til jeg måske finder løsningen i quickrep2? Takker meget og mange gange for det tilsendte!!! Lige til sidst: Hvorfor kan man godt skrive Botton1.click , men ikke Image1.click? Hvad er forskellen?---når jeg nu hellere vil klikke på et billede end en knap!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.