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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20