29. januar 2001 - 11:09Der er
28 kommentarer og 1 løsning
Udskrivnng på begge sider
Jeg har et skema som f.eks er lavet i Q-report dette skemavil jeg gerne have delphi til at Udskrive på begge sider af papiret på en HP laiserjet 4si Hvordan gør jeg det???
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
QR er udmærket til mange ting, men har sine berænsninger (herunder Duplex Print). Kig evt. i stedet på FreeReport (som eftersigende ikke skulle ha\' duplex problemer - har ikke selv prøvet): http://www.adwin.ru/dinfo/eng/freereport/
Jeg har ikke selv haft brug for Duplex print, så min udtalelse er pba. en x-kollega\'s erfaringer (men til hans forsvar så plejer han at vide hvad han snakker om - så jeg har ikke set grund til at ikke stole på at han har ret).
Lad os nu sige at QR godt kan printe ud i duplex hvordan styre jeg så hvad der skal printes ud på den ene side og hvad der skal printes ud på den anden side ??
Pellelil, jeg har hentet \"din\" komponent men hvordan installere jeg den ?
Det var trist, men ellers kunne man jo bare i QR\'s BeforePrint (okay, bare og bare)
1. kalde DeviceCapabilities, o gfinde ud af om printeren har DC_DUPLEX 2. kalde DocumentProperties (fMode=0) for at finde størrelsen af DEVMODE 3. kalde DocumentProperties (fMode=DM_OUT_BUFFER) og hente printerens indstillinger 4. sætte DEVMODE\'s dmDuplex til DMDUP_HORIZONTAL eller DMDUP_VERTICAL 5. kalde DocumentProperties (med fMode sat til DM_IN_BUFFER) for at modify printerens indstilling.
anold>> Hvis du nu kan få det til at virke, så skal du lave en OnStartPage handler, der \'vender\' header og footer, så du altid får sidetal ud mod kanten.
Du Unzipper den (husk at \"Extract\'e\" den med under-foldere). Jeg har valgt at installere den i C:\\Programmer\\Borland\\Delphi5\\FreeReport\\...\". Når du har gjort dette finder du readme.txt filen som beskriver den vidre installation (bemærk beskrivelsen af FR_Eng.LNG som skal omdøbes til FR.LNG og kopieres ind i din windows folder).
Hallo er der nogle hjemme ?? Der må da være en som kan fortælle mig hvordan jeg styre hvad der skal printes ud på den ene side og hvad der skal printes ud på den anden side ??
ZZZZZZZzzzzz Hallo sover i derude ?? Er der virklig ingen der kan hjælpe mig med mit Duplex problem ??
PEllelil, Nu har jeg installeret komponenten. Kan du ikke lave en beskrivelse på hvordan jeg bruger den så jeg kan printe mit egen skema (linjer og labels) ud på begge sider
anold>> Hej igen, jeg har ikke lige tid til at kigge på det nu, men i eftermiddag har jeg nok bedre tid. Fik du installeret FreeReport eller vil du fortsat prøve med QR?
Jeg kan muligvis lave en lille rutine der skifter til duplex på printeren, men jeg kan ikke selv teste det, så du får nok nogel ting, der ikke virker. men vi må jo prøve os frem med lidt trail and error ;-)
Bruger du FreeReport (FR) så printes \"hver anden\" side på forsiden og \"hver andet\" på bagsiden\". Det er således rækkeflg. af siderne der bestemmer hvad der printes hvor. I modsætning til QuickReport (QR) så \"acceptere\" og bruger FR de printer indstillinger du laver i Delphi\'s Std. printer opsætnings dialog (det er således her at du kan vælge \"Duplex\").
FreeReport virker ikke på samme måde som QR. Når du med QR opbyggede en rapport så blev denne lagt ind i en resource og blev således automatisk en del af din EXE fil. De havde den fordel at du kun skulle distribuere din EXE fil, men på den anden side kunne slut brugerne ikke ændre på denne. Som default anvender FR eksterne rapport definitions filer (.FRF). Du kan dog selv flytte denne ind i en resource som du linker ind i din EXE fil (dette vil jeg dog ikke beskrive nærmere).
På en ny (eller \"hvis du er doven\" bestående) form indsætter en \"TfrReport\". Dernåst indsætter du en \"TfrDBDataSet\", hvis \"DataSource\" du sætter til at peget på den TTable/TQuery der indeholder de data du vil printe. Højreklik på TfrReport og vælg \"Dessign Report\". Hvis menuernes navne er FUBAR har du ikke læst installations vejledningen korrekt (vedr. FR.LNG). I skærmens venstre side finder du et ikon for \"Insert Band\" som du vælger, hvorefter du \"klikker\" i den tomme rapport og der kommer nu et billede der spørger hvilken \"båndtype\" der er tale om : vælg \"Master Data\". Højreklik på dit bånd og vælg Edit, hvorefter du vælger den datasource der skal tilknyttes dette bånd. Du er nu klar til at indsætte felter. Ovenover ikonet for bånd finder du ikonet for \"Insert Rectangle Object\" som du vælger og igen klikker du i båndet (som du lige har indsat). Dobbelt-klik på den \"Rektangle\" du netop har indsat, og du kan nu skrive \"teksten\". Hvis der er tale om \"lede tekst\" så skriver du bare det du vil, og hvis det er indholdet af et datafelt du vil vise så trykker du i stedet på knappen \"DB Field\" og dernæst plukker database/felt. Hvis du har gjort det korrekt kan du du i toppen af skræmen (det 4. ikon) vælge preview og se resultatet af din rapport.
Som du kan se har du ikke helt så mange komponenter du kan indsætte på din rapport og ved første øjekast ser det måske lidt billigt ud. Med in modsætning til QR så virker der. FR er i stand til at resize dine bands således at de automatisk skalere sig til eksempelvis størrelsen af et memofelt. Ligeledes kan du se at symbolerne for Fed, Kursiv og Understreget er russiske, men jeg har lavet nogle \"engelsk sprogede\" som jeg kan maile dig (jeg er ved at lave en danske version af FR.LNG, men denne er endnu ikke helt fejl fri)
VIGTIGT: Som nævnt tidligere så gemmes denne rapport IKKE sammen med din form så DU skal huske at gemme rapporten når du er inde i designeren. Nedenstående (delphi) kode viser således hvordan du under runtime kan loade en rapport (placeret i samme folder som din EXE fil) og preview\'e denne.
<SNIP> var szPath : String; begin szPath := ExtractFilePath(ParamStr(0)); frReportMessage.LoadFromFile(szPath + \'Meddelelse.FRF\'); frReportMessage.ShowReport; // ShowReport = PreView </SNIP>
Hvis du eksempelvis i databasen har nogle integer værdier, som du på udskriftstidspunktet vil erstattet med tekst værdier så løses dette ved at bruge \"TfrReport\'ens\" event \"OnGetValue\":
<SNIP> procedure TFormRptMessages.frReportMessageGetValue(const ParName: String; var ParValue: Variant); var iIdx : Integer; szResult : String; begin if ParName = \'tblMessageTable.\"TriggerType\"\' then begin iIdx := tblMessageTable.FieldByName(\'TriggerType\').AsInteger; szResult := \'N/A\'; case iIdx of 0 : szResult := \'CREATE\'; 1 : szResult := \'UPDATE\'; 2 : szResult := \'DELETE\'; end; ParValue := szResult; end; end; </SNIP>
Jeg arbejder stadig på at få mit duplex udskrift til at virke i det eks. du giver mig henter jeg data fra min database men det er ikke lige det jeg ønsker, jeg vil gerne have tegnet nogle rammer på begge sider af papiret Kan man ikke det
dvs, når du står med cursoren efter punktummet, så tryk Ctrl+Space (eller er det Shit+Ctrl+Space), så får du en oversigt over de procedure/funktioner/properties der er kendt på det pågældende sted. Mon ikke en PrintReport eller noget lignende dukker op. Som de siger i reklamerne: Prøv det!
PrepareReport er en methode til din TfrReport, så for at kunne bruge en TfrReport skal du use FR_Class.
Øhh kan du da ikke læse det er stå nu ? I så fald vil jeg foreslå at du pudser din skærm :-) Hvis du i stedet spøge om hvad parametrene betyder så kan jeg sige at det er (i nævte rækkeflg): - Start Side - Slut side - Antal kopier - Collate
Flg. er et direkte cut fra et af mine programmer OG DET VIRKER :-)
<SNIP> frReportMessage.LoadFromFile(szPath + \'Meddelelse.FRF\'); if frReportMessage.PrepareReport then begin frReportMessage.PrintPreparedReport(1, frReportMessage.EMFPages.Count, 1, True); end; </SNIP>
når jeg printer min rapport fra mit program får jeg denne fejl : List out of bounds(0)
i min SpeedButton6Click står der :
procedure TFrmHovede.SpeedButton6Click(Sender: TObject); begin if FrmPrint.frReport1.PrepareReport then begin FrmPrint.frReport1.PrintPreparedReport(1, FrmPrint.frReport1.EMFPages.Count, 1, True); end; end;
Jeg kom til og tænke på skal programmet ikke vide hvad filen hedder (C:\\FormKort\\Print.FrF)
Joh det skal den og hvis du kigger på mit eksempel lige ovenover din kommentar, så ser du (bur du se) at jeg kalder \"frReportMessage.LoadFromFile(szPath + \'Meddelelse.FRF\');\" hvilket i dit tilfælde i stedet skulle være: \"FrmPrint.frReport1.LoadFromFile(\'C:\\FormKort\\Print.FrF\');\"
Hej pellelil Det L... bliver ved med og drille mig
når jeg printer så får jeg en fejl på at \"Result := nil\"
Hved du hvad jeg gør forkert ?
Jeg har ingen band på min rapport men kun richtext
Hvis du vil (og har tid/lyst) kan jeg Mail mit program til dig så du kan se hvad det er jeg gør forkert!!
Hilsen Anold
{----------------------------------------------------------------------------} function frCreateObject(Typ:Byte; const ClassName:String): TfrView; var i: Integer; begin Result := nil; case Typ of gtMemo: Result := TfrMemoView.Create; gtPicture: Result := TfrPictureView.Create; gtBand: Result := TfrBandView.Create; gtSubReport: Result := TfrSubReportView.Create; gtAddIn: begin for i := 0 to frAddInsCount-1 do if frAddIns[i].ClassRef.ClassName = ClassName then begin Result := TfrView(frAddIns[i].ClassRef.NewInstance); Result.Create; Result.Typ := gtAddIn; break; end; if Result = nil then // her kommer fejlen raise EClassNotFound.Create(\'Íå íàéäåí êëàññ \' + ClassName); end; end; end;
MEN: jeg vil umiddelbart gætte på at din rapport SKAL have mindst et band
Synes godt om
Ny brugerNybegynder
Din løsning...
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.