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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20