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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20