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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20