/[projects]/dao/DelphiScanner/LabelPrint.pas
ViewVC logotype

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3099 - (hide annotations) (download)
Mon Aug 22 18:27:30 2016 UTC (7 years, 9 months ago) by torben
File size: 20566 byte(s)
Disable muligheden for ikke at bruge printer
1 torben 2705 unit LabelPrint;
2    
3     interface
4    
5     uses
6     ParentForm,
7 torben 3094 LabelData,
8 torben 2705 Configuration,
9 torben 3047 StBarc;
10 torben 2705
11    
12     type
13     TLabelPrint = class
14    
15     constructor Create( p : IParentForm; var Configuration : TConfiguration; PrinterNavn: String);
16    
17     procedure CheckPrintQue(tjektype : string; PrinterNavn : String);
18    
19 torben 3077 procedure PrintLabel( Stregkode : String);
20    
21 torben 2705 procedure SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
22    
23 torben 3095 procedure PrintSimpelLabel( LabelData : TLabelData) ;
24    
25 torben 3094 procedure PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
26     procedure PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
27     procedure PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
28 torben 2705
29 torben 3077
30 torben 2705 procedure PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
31    
32 torben 3038 procedure PrintZPL( ZplData : string);
33    
34 torben 2705 function GetPrinterCount() : Integer;
35    
36     private
37     parentForm : IParentForm;
38     Barcode : TStBarcode;
39     var Config: TConfiguration;
40    
41    
42     function SavePChar(p: PChar): PChar;
43     function GetCurrentPrinterHandle(): THandle;
44    
45     end;
46    
47     function GetPixelsPerInchX(): Integer;
48     function GetPixelsPerInchY(): Integer;
49    
50     implementation
51     uses
52     Printers,
53     WinSpool,
54     Windows,
55     SysUtils, //Format
56 torben 3094 Math, // DegToRad() bruges i PrinTLabelData
57 torben 3077 Forms,
58 torben 3088 IdHTTP,
59 torben 3095 Graphics,
60     XMLDoc
61 torben 2705 ;
62    
63    
64    
65    
66     function GetPixelsPerInchX(): Integer;
67     begin
68     Result := GetDeviceCaps(Printer.Handle, LOGPIXELSX)
69     end;
70    
71     function GetPixelsPerInchY(): Integer;
72     begin
73     Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY)
74     end;
75    
76    
77    
78     constructor TLabelPrint.Create( p : IParentForm; var Configuration : TConfiguration; PrinterNavn: String);
79     var
80     FormObj : TForm;
81     printerInd : integer;
82     begin
83     parentForm := p;
84     Config := Configuration;
85    
86     FormObj := parentForm.GetFormObject();
87    
88    
89     Barcode := TStBarcode.Create(FormObj);//Dynamisk oprettelse af Barcode component
90    
91    
92     if PrinterNavn<> '' then
93     begin
94     printerInd := Printer.Printers.IndexOf(PrinterNavn);
95     if printerInd >= 0 then
96     begin
97     Printer.PrinterIndex := printerInd;
98     end;
99     end;
100    
101     end;
102    
103    
104    
105    
106     function TLabelPrint.GetCurrentPrinterHandle(): THandle;
107     var
108     Device, Driver, Port: array[0..255] of Char;
109     hDeviceMode: THandle;
110     begin
111     Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
112     if not OpenPrinter(@Device, Result, nil) then
113     RaiseLastWin32Error;
114     end;
115    
116    
117     procedure TLabelPrint.PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
118     begin
119     with Printer do
120     begin
121     BeginDoc;
122 torben 3086
123 torben 2705 Canvas.Font.Size := Config.FontSizeRute;
124     if (Length(RuteNummer) > 7) then
125     begin
126     Canvas.Font.Size := Config.FontSizeRuteLille;
127     end;
128     Canvas.TextOut(Config.XPosRute, Config.YPosRute, RuteNummer);
129     Canvas.Font.Size := Config.FontSizeKommentar;
130     Kommentar := StringReplace(Kommentar, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
131     if (Kommentar = 'Ok') or (Kommentar = 'ALLEREDE SCANNET') then
132     begin
133     Kommentar := '';
134     end;
135     if (BoghandlerNavn = 'PAKKE ER SCANNET') then
136     begin
137     BoghandlerNavn := '';
138     end;
139     Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, Kommentar); // Kan ikke lave linieskift (se tidligere kommentar om samme)
140     Canvas.Font.Size := Config.FontSizeBoghandler;
141     Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);
142     EndDoc;
143     end;
144 torben 3086
145    
146    
147     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
148    
149 torben 2705 end;
150    
151    
152    
153     procedure TLabelPrint.CheckPrintQue(tjektype : string; PrinterNavn : String);
154     type
155     TJobs = array [0..1000] of JOB_INFO_1;
156     PJobs = ^TJobs;
157     var
158     hPrinter: THandle;
159     bytesNeeded, numJobs, i: Cardinal;
160     pJ: PJobs;
161     printerTxt, statusTxt, dokumentTxt: String;
162     begin
163    
164     // tjektype = 'Opstart' skal vise alarmlinie, samt opdatere listbox1
165     // 'Test' skal vise alarmlinie, samt opdatere listbox1
166     // 'Timer' skal kun vise alarmlinie
167    
168 torben 3099 // if (PrinterNavn = 'Ingen') and ( (tjektype = 'Opstart') or (tjektype = 'Test') ) then
169     // begin
170     //
171     // parentForm.LogMessage( 'Der er fravalgt printer i dette program' );
172     // end
173     // else
174     if (Printer.Printers.Count = 0) and ( (tjektype = 'Opstart') or (tjektype = 'Test') ) then
175 torben 2705 begin
176     parentForm.LogMessage( 'Der er ikke installeret en printer på denne PC' );
177     end
178     else
179     begin
180     hPrinter := GetCurrentPrinterHandle;
181     try
182     EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, numJobs);
183     pJ := AllocMem(bytesNeeded);
184     if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, bytesNeeded, numJobs) then
185     RaiseLastWin32Error;
186    
187     if numJobs = 0 then
188     begin
189     if (tjektype = 'Test') then
190     begin
191     parentForm.LogMessage( printerTxt + ': Ingen dokumenter i kø' );
192    
193     end;
194     parentForm.SetPrinterstatusText('', false);
195     end
196     else // så er der kø til printeren
197     begin
198     printerTxt := SavePChar(pJ^[0].pPrinterName);
199     if (tjektype = 'Opstart') or (tjektype = 'Test') then
200     begin
201    
202    
203     parentForm.LogMessage( IntToStr(numJobs) + ' dokument(er) i kø til printer: ' + printerTxt );
204    
205     end;
206     for i := 0 to Pred(numJobs) do
207     begin
208     printerTxt := SavePChar(pJ^[i].pPrinterName);
209     statusTxt := 'Ukendt';
210     if (IntToStr(pJ^[i].Status) = '0') then
211     statusTxt := 'Venter...';
212     if (IntToStr(pJ^[i].Status) = '4096') then
213     statusTxt := 'Printer...';
214     if (IntToStr(pJ^[i].Status) = '8210') then
215     statusTxt := 'Printerfejl';
216     if (IntToStr(pJ^[i].Status) = '8214') then
217     statusTxt := 'Sletter print...';
218    
219     dokumentTxt := SavePChar(pJ^[i].pDocument);
220     if (dokumentTxt = '') then
221     dokumentTxt := 'Uden navn';
222    
223     if (tjektype = 'Opstart') or (tjektype = 'Test') then
224     begin
225    
226     parentForm.LogMessage( Format('Printer %s, Dokument %d: %s, Status (%d): %s', [printerTxt, i+1, dokumentTxt, pJ^[i].Status, statusTxt]) );
227    
228     end;
229    
230     if (i = 0) then
231     begin
232     parentForm.SetPrinterstatusText(printerTxt + ': ' + IntToStr(numJobs) + ' dokument(er) in kø. Dokument status: ' + statusTxt, (numJobs > 3) );
233     end;
234    
235     end;
236     end
237     finally
238     ClosePrinter(hPrinter);
239     end;
240     end;
241 torben 3086
242    
243     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
244    
245 torben 2705 end;
246    
247    
248 torben 3077 procedure TLabelPrint.PrintLabel( Stregkode : String);
249     var
250     url: String;
251     response: String;
252    
253     httpClient: TIdHTTP;
254    
255 torben 3095 XMLDocument1: TXMLDocument;
256 torben 3077
257 torben 3095 LabelData: TLabelData;
258 torben 3077
259 torben 3095
260 torben 3077 begin
261    
262 torben 3088 url := Format(Config.URLPrintLabel, [Stregkode] );
263    
264 torben 3077 httpClient := TIdHTTP.Create();
265     httpClient.ReadTimeout := 1000;//max 1 secound
266     httpClient.ConnectTimeout := 1000;
267    
268     response := httpClient.Get(url);
269     httpClient.Free();
270    
271    
272 torben 3095 XMLDocument1 := parentForm.GetXMLDocument();
273 torben 3077
274 torben 3095 XMLDocument1.LoadFromXML(response);
275 torben 3077
276 torben 3095 LabelData := TLabelData.Create(XMLDocument1);
277    
278     if LabelData.LabelType = 'zpl' then
279     begin
280     PrintZPL(LabelData.ZPL);
281     end
282     else if (LabelData.LabelType = 'simpel') then
283     begin
284     PrintSimpelLabel(LabelData);
285     end
286     else
287     begin
288     PrintFuldPakkeLabel(LabelData);
289     end;
290    
291    
292    
293    
294    
295    
296    
297 torben 3077 end;
298    
299 torben 2705 procedure TLabelPrint.SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
300     begin
301     with Printer do
302     begin
303     BeginDoc;
304    
305     Canvas.Font.Size := Config.FontSizeRuteLille;
306     if (kontrolKoreliste <> '') then
307     begin
308     Canvas.TextOut(Config.XPosRute, Config.YPosRute, kontrolKoreliste);
309     end
310     else
311     begin
312     Canvas.TextOut(Config.XPosRute, Config.YPosRute, RuteNummer);
313     end;
314     Canvas.Font.Size := Config.FontSizeKorelisteLille;
315     Canvas.TextOut(Config.XPosKoreliste, Config.YPosKoreliste, Koreliste);
316     if (Config.Sted = 'DBK') or (Config.Sted = '04') then
317     begin
318     Canvas.Font.Size := Config.FontSizeSorteringsfelt1;
319     Canvas.TextOut(Config.XPosSorteringsfelt1,Config.YPosSorteringsfelt1, DBKbane); // sorteringsoplysning 1
320     Canvas.Font.Size := Config.FontSizeSorteringsfelt1;
321     Canvas.TextOut(Config.XPosSorteringsfelt2, Config.YPosSorteringsfelt2, Leveringssted); // sorteringsoplysning 2
322     end;
323     Canvas.Font.Size := Config.FontSizeKommentar;
324    
325     Kommentar := StringReplace(Kommentar, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
326     Kommentar := StringReplace(Kommentar, 'PAKKE ER SCANNET', '', [rfReplaceAll, rfIgnoreCase]);
327    
328     Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, Kommentar); // Kan ikke lave linieskift (se tidligere kommentar om samme)
329     if SmsKode <> '' then
330     begin
331     Canvas.Font.Size := Config.FontSizeSmskode;
332     Canvas.TextOut(Config.XPosKommentar, Config.YPosSmskode, concat('CODE: ', SmsKode));
333     end;
334     Canvas.Font.Size := Config.FontSizeBoghandler;
335     Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);
336    
337     EndDoc;
338     end;
339 torben 3086
340    
341     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
342    
343 torben 2705 end;
344    
345    
346 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
347 torben 3088 begin
348 torben 3091 if (Config.LabelStor = 1) then
349     begin
350     PrintFuldPakkeLabelStor( PakkeshopLabel );
351 torben 2705
352 torben 3091 end
353     else
354     begin
355     PrintFuldPakkeLabelLille( PakkeshopLabel );
356    
357     end;
358    
359 torben 3088 end;
360    
361     // Bruges til label der passer til 60x100
362 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
363 torben 2705 var
364     XForm, XFormOld: TXForm; //Bruges til rotate X-formation
365     Angle: integer;
366     gMode: integer;
367     Dirigering: string;
368    
369     begin
370     with Printer do
371     begin
372     BeginDoc();
373    
374    
375     Canvas.Font.Size := 16;
376     Canvas.TextOut(15,10, 'Code: ' + PakkeshopLabel.Tjekkode + ' ' + PakkeshopLabel.Overskrift);
377    
378    
379    
380     Canvas.TextOut(25, 90, PakkeshopLabel.Navn );
381     Canvas.TextOut(25, 135, PakkeshopLabel.Vejnavn );
382     Canvas.TextOut(25, 180, PakkeshopLabel.Postnr );
383    
384    
385     Canvas.Font.Size := 9;
386 torben 2790
387    
388     // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
389 torben 3077 if ( PakkeshopLabel.PakkeshopNavn <> '' ) then
390 torben 2790 begin
391     Canvas.TextOut(110, 240, 'Pakkeshop:');
392 torben 3077 Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
393     Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
394     Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
395    
396 torben 2790 end;
397    
398    
399 torben 2705
400     Canvas.TextOut(350, 240, 'Afsender:');
401     Canvas.TextOut(350, 270, PakkeshopLabel.AfsenderNavn);
402     Canvas.TextOut(350, 300, PakkeshopLabel.AfsenderAdresse);
403     Canvas.TextOut(350, 330, PakkeshopLabel.AfsenderPostnr);
404    
405     Dirigering := PakkeshopLabel.PakkeshopSted + ' | ' + PakkeshopLabel.PakkeshopTurid + ' | ' + PakkeshopLabel.PakkeshopNr;
406     if ( PakkeshopLabel.Koreliste <> '') then
407     begin
408     Dirigering := Dirigering + ' > ' + PakkeshopLabel.Koreliste;
409     end;
410    
411    
412     Canvas.Font.Size := 12;
413     Canvas.TextOut(15, 370, Dirigering);
414    
415    
416    
417    
418    
419     //Tegn adskillelses linier
420     Canvas.Pen.Width := 2;
421     //Øverste linie
422     Canvas.MoveTo(20,80);
423     Canvas.LineTo(600,80);
424    
425     // Midterste linie
426     Canvas.MoveTo( 20, 240);
427     Canvas.LineTo(600, 240);
428    
429     //Nederste linie
430     Canvas.MoveTo( 20, 370);
431     Canvas.LineTo(600, 370);
432    
433    
434     //Tegn skrå streger over afsender
435     Canvas.Pen.Width := 1;
436     Canvas.MoveTo(600, 250);
437     Canvas.LineTo(350, 360);
438     Canvas.MoveTo(600, 360);
439     Canvas.LineTo(350, 250);
440    
441    
442    
443    
444     // Resten af rutinen vedr genering og placering af Barcode
445    
446     BarCode.BarCodeType := bcCode128;
447     BarCode.Code128Subset := csCodeC;
448     BarCode.Code := PakkeshopLabel.Stregkode;
449     BarCode.Validate(True);
450    
451     //Start X-formation
452     //ShowMessage( Format('%d %d', [PageWidth, PageHeight]) );
453     GetWorldTransform(Canvas.Handle, XFormOld);
454    
455     Angle := 270;
456     XForm.eM11 := Cos(DegToRad(Angle));
457     XForm.eM12 := Sin(DegToRad(Angle));
458     XForm.eM21 := -Sin(DegToRad(Angle));
459     XForm.eM22 := Cos(DegToRad(Angle));
460     XForm.eDx := 0;
461     XForm.eDy := 0;
462    
463     gMode := SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
464     SetWorldTransform(Canvas.Handle, XForm);
465    
466     // PaintToCanvasSize arbejder i Inches
467     // Første pos argument bliver nu Y og skal være negativ for at rykke den ned
468     //Anden pos er X og skal være positiv for at justere ind fra venstre mod højre
469    
470     BarCode.PaintToCanvasSize(Printer.Canvas, -1.8, 3.3, 0.4);
471    
472    
473     SetWorldTransform(Canvas.Handle, XFormOld);
474     SetGraphicsMode(Canvas.Handle, gMode);
475    
476     EndDoc();
477     end;
478    
479    
480 torben 3086 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
481    
482 torben 2705 end;
483    
484    
485 torben 3088 // Bruges til label der passer til 100x150
486 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
487 torben 3088 var
488     XForm, XFormOld: TXForm; //Bruges til rotate X-formation
489     Angle: integer;
490     gMode: integer;
491     Dirigering: string;
492     BarcodeRect : TRect;
493    
494     begin
495     with Printer do
496     begin
497     BeginDoc();
498    
499    
500    
501     Canvas.Font.Style := [TFontStyle.fsBold];
502     Canvas.Font.Size := 16;
503     Canvas.TextOut(25,25, 'Code: ' + PakkeshopLabel.Tjekkode + ' ' + PakkeshopLabel.Overskrift);
504    
505    
506    
507     Canvas.TextOut(80, 220, PakkeshopLabel.Navn );
508     Canvas.TextOut(80, 270, PakkeshopLabel.Vejnavn );
509     Canvas.TextOut(80, 320, PakkeshopLabel.Postnr );
510    
511    
512     Canvas.Font.Size := 9;
513    
514    
515     // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
516     if ( PakkeshopLabel.PakkeshopNavn <> '' ) then
517     begin
518     Canvas.TextOut(170, 460, 'Pakkeshop:');
519     Canvas.TextOut(170, 490, PakkeshopLabel.PakkeshopNavn);
520     Canvas.TextOut(170, 520, PakkeshopLabel.PakkeshopAddr);
521     Canvas.TextOut(170, 550, PakkeshopLabel.PakkeshopPostnr);
522    
523     end;
524    
525    
526    
527     Canvas.TextOut(550, 460, 'Afsender:');
528     Canvas.TextOut(550, 490, PakkeshopLabel.AfsenderNavn);
529     Canvas.TextOut(550, 520, PakkeshopLabel.AfsenderAdresse);
530     Canvas.TextOut(550, 550, PakkeshopLabel.AfsenderPostnr);
531    
532     Dirigering := PakkeshopLabel.PakkeshopSted + ' | ' + PakkeshopLabel.PakkeshopTurid + ' | ' + PakkeshopLabel.PakkeshopNr;
533     if ( PakkeshopLabel.Koreliste <> '') then
534     begin
535     Dirigering := Dirigering + ' > ' + PakkeshopLabel.Koreliste;
536     end;
537    
538    
539     Canvas.Font.Size := 12;
540     Canvas.TextOut(40, 680, Dirigering);
541    
542    
543    
544    
545    
546     //Tegn adskillelses linier
547     Canvas.Pen.Width := 2;
548     //Øverste linie
549     Canvas.MoveTo( 40, 180);
550     Canvas.LineTo(900, 180);
551    
552     // Midterste linie
553     Canvas.MoveTo( 40, 440);
554     Canvas.LineTo(900, 440);
555    
556     //Nederste linie
557     Canvas.MoveTo( 40, 640);
558     Canvas.LineTo(900, 640);
559    
560    
561     //Tegn skrå streger over afsender
562     Canvas.Pen.Width := 1;
563     Canvas.MoveTo(840, 450);
564     Canvas.LineTo(540, 590);
565     Canvas.MoveTo(840, 590);
566     Canvas.LineTo(540, 450);
567    
568    
569    
570     // Resten af rutinen vedr genering og placering af Barcode
571    
572     Barcode.Font.Size := 9;
573     Barcode.BarToSpaceRatio := 0.9;
574    
575    
576     BarCode.BarCodeType := bcCode128;
577     BarCode.Code128Subset := csCodeC;
578     BarCode.Code := PakkeshopLabel.Stregkode;
579     BarCode.Validate(True);
580    
581    
582     // parentForm.Msg( inttostr( Barcode.Font.Size) );//Default 8
583     // parentForm.Msg( Double.ToString( Barcode.BarNarrowToWideRatio) );//Default 2
584     // parentForm.Msg( Double.ToString( Barcode.BarToSpaceRatio) );//Default 1
585     // parentForm.Msg( Double.ToString(BarCode.Width ) );//default 200
586    
587    
588     //Start X-formation
589     //ShowMessage( Format('%d %d', [PageWidth, PageHeight]) );
590     GetWorldTransform(Canvas.Handle, XFormOld);
591    
592     Angle := 270;
593     XForm.eM11 := Cos(DegToRad(Angle));
594     XForm.eM12 := Sin(DegToRad(Angle));
595     XForm.eM21 := -Sin(DegToRad(Angle));
596     XForm.eM22 := Cos(DegToRad(Angle));
597     XForm.eDx := 0;
598     XForm.eDy := 0;
599    
600     gMode := SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
601     SetWorldTransform(Canvas.Handle, XForm);
602    
603     // PaintToCanvasSize arbejder i Inches
604     // Første pos argument bliver nu Y og skal være negativ for at rykke den ned
605     //Anden pos er X og skal være positiv for at justere ind fra venstre mod højre
606    
607     BarCode.PaintToCanvasSize(Printer.Canvas, -2.7, 4.8, 0.5);
608    
609    
610    
611    
612     SetWorldTransform(Canvas.Handle, XFormOld);
613     SetGraphicsMode(Canvas.Handle, gMode);
614    
615     EndDoc();
616     end;
617    
618    
619     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
620     end;
621    
622 torben 2705 function TLabelPrint.SavePChar(p: PChar): PChar;
623     const
624     error: PChar = 'Nil';
625     begin
626     if not Assigned(p) then
627     Result := error
628     else
629     Result := p;
630     end;
631    
632 torben 3038 // Online zpl viewer
633 torben 2705
634 torben 3038
635     procedure TLabelPrint.PrintZPL( ZplData : string);
636     var
637     ADevice, ADeviceName, ADevicePort: array[0..255]of Char;
638     PrinterHandle: THandle;
639     DocInfo: TDocInfo1;
640     dwJob: cardinal;
641     dwBytesWritten: cardinal;
642     AUtf8: UTF8string;
643     ADeviceMode: THandle;
644    
645     begin
646    
647    
648     Printer.GetPrinter(ADevice, ADeviceName, ADevicePort, ADeviceMode);
649    
650     if not OpenPrinter(ADevice, PrinterHandle, nil) then
651     begin
652     Exit;
653     parentForm.Msg('error on openprinter');
654     end;
655    
656     //Fill in the structure with info about this "document"
657     DocInfo.pDocName := PChar('Spooler Document Name');
658     DocInfo.pOutputFile := nil;
659     DocInfo.pDatatype := 'RAW';
660    
661     //Inform the spooler the document is beginning
662     dwJob := StartDocPrinter(PrinterHandle, 1, @DocInfo);
663     if dwJob = 0 then
664     begin
665     ClosePrinter(PrinterHandle);
666     PrinterHandle := 0;
667     Exit;
668     end;
669    
670     //Start a page
671     if not StartPagePrinter(PrinterHandle) then
672     begin
673     EndDocPrinter(PrinterHandle);
674     ClosePrinter(PrinterHandle);
675     PrinterHandle := 0;
676     Exit;
677     end;
678    
679     //your zebra code...
680     AUtf8 := UTF8string(ZplData);
681     WritePrinter(PrinterHandle, @AUtf8[1], Length(AUtf8), dwBytesWritten);
682    
683     //End the page
684     if not EndPagePrinter(PrinterHandle) then
685     begin
686     EndDocPrinter(PrinterHandle);
687     ClosePrinter(PrinterHandle);
688     PrinterHandle := 0;
689     Exit;
690     end;
691    
692     //Inform the spooler that the document is ending
693     if not EndDocPrinter(PrinterHandle) then
694     begin
695     ClosePrinter(PrinterHandle);
696     PrinterHandle := 0;
697     Exit;
698     end;
699    
700     //Tidy up the printer handle
701     ClosePrinter(PrinterHandle);
702     PrinterHandle := 0;
703    
704     end;
705    
706 torben 3095 procedure TLabelPrint.PrintSimpelLabel( LabelData : TLabelData) ;
707     begin
708     with Printer do
709     begin
710     BeginDoc;
711 torben 3038
712 torben 3095 Canvas.Font.Size := Config.FontSizeRute;
713     if (Length(LabelData.SimpelLinie1) > 7) then
714     begin
715     Canvas.Font.Size := Config.FontSizeRuteLille;
716     end;
717     Canvas.TextOut(Config.XPosRute, Config.YPosRute, LabelData.SimpelLinie1);
718     Canvas.Font.Size := Config.FontSizeKommentar;
719     LabelData.SimpelLinie2 := StringReplace(LabelData.SimpelLinie2, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
720     if (LabelData.SimpelLinie2 = 'Ok') or (LabelData.SimpelLinie2 = 'ALLEREDE SCANNET') then
721     begin
722     LabelData.SimpelLinie2 := '';
723     end;
724     if (LabelData.SimpelLinie3 = 'PAKKE ER SCANNET') then
725     begin
726     LabelData.SimpelLinie3 := '';
727     end;
728     Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, LabelData.SimpelLinie2);
729     Canvas.Font.Size := Config.FontSizeBoghandler;
730     Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, LabelData.SimpelLinie3);
731     EndDoc;
732     end;
733    
734    
735    
736     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
737    
738     end;
739    
740    
741    
742 torben 2705 function TLabelPrint.GetPrinterCount() : Integer;
743     begin
744     Result := Printer.Printers.Count;
745     end;
746    
747     end.

  ViewVC Help
Powered by ViewVC 1.1.20