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

Contents of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20