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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20