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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3099 - (show annotations) (download)
Mon Aug 22 18:27:30 2016 UTC (7 years, 8 months ago) by torben
File size: 20566 byte(s)
Disable muligheden for ikke at bruge printer
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
174 if (Printer.Printers.Count = 0) and ( (tjektype = 'Opstart') or (tjektype = 'Test') ) then
175 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
242
243 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
244
245 end;
246
247
248 procedure TLabelPrint.PrintLabel( Stregkode : String);
249 var
250 url: String;
251 response: String;
252
253 httpClient: TIdHTTP;
254
255 XMLDocument1: TXMLDocument;
256
257 LabelData: TLabelData;
258
259
260 begin
261
262 url := Format(Config.URLPrintLabel, [Stregkode] );
263
264 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 XMLDocument1 := parentForm.GetXMLDocument();
273
274 XMLDocument1.LoadFromXML(response);
275
276 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 end;
298
299 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
340
341 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
342
343 end;
344
345
346 procedure TLabelPrint.PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
347 begin
348 if (Config.LabelStor = 1) then
349 begin
350 PrintFuldPakkeLabelStor( PakkeshopLabel );
351
352 end
353 else
354 begin
355 PrintFuldPakkeLabelLille( PakkeshopLabel );
356
357 end;
358
359 end;
360
361 // Bruges til label der passer til 60x100
362 procedure TLabelPrint.PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
363 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
387
388 // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
389 if ( PakkeshopLabel.PakkeshopNavn <> '' ) then
390 begin
391 Canvas.TextOut(110, 240, 'Pakkeshop:');
392 Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
393 Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
394 Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
395
396 end;
397
398
399
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 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
481
482 end;
483
484
485 // Bruges til label der passer til 100x150
486 procedure TLabelPrint.PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
487 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 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 // Online zpl viewer
633
634
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 procedure TLabelPrint.PrintSimpelLabel( LabelData : TLabelData) ;
707 begin
708 with Printer do
709 begin
710 BeginDoc;
711
712 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 function TLabelPrint.GetPrinterCount() : Integer;
743 begin
744 Result := Printer.Printers.Count;
745 end;
746
747 end.

  ViewVC Help
Powered by ViewVC 1.1.20