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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20