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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20