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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3088 - (hide 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 torben 2705 unit LabelPrint;
2    
3     interface
4    
5     uses
6     ParentForm,
7     PakkeshopLabels,
8     Configuration,
9 torben 3047 StBarc;
10 torben 2705
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 torben 3077 procedure PrintLabel( Stregkode : String);
20    
21 torben 2705 procedure SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
22    
23 torben 3077 procedure PrintFuldPakkeLabel( PakkeshopLabel : TPakkeshopLabel);
24 torben 3088 procedure PrintFuldPakkeLabelLille( PakkeshopLabel : TPakkeshopLabel);
25     procedure PrintFuldPakkeLabelStor( PakkeshopLabel : TPakkeshopLabel);
26 torben 2705
27 torben 3077
28 torben 2705 procedure PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
29    
30 torben 3038 procedure TestZpl();
31     procedure PrintZPL( ZplData : string);
32    
33 torben 2705 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 torben 3077 Forms,
57 torben 3088 IdHTTP,
58     Graphics
59 torben 2705 ;
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 torben 3086
121 torben 2705 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 torben 3086
143    
144    
145     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
146    
147 torben 2705 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 torben 3086
239    
240     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
241    
242 torben 2705 end;
243    
244    
245 torben 3077 procedure TLabelPrint.PrintLabel( Stregkode : String);
246     var
247     url: String;
248     response: String;
249    
250     httpClient: TIdHTTP;
251    
252    
253    
254     begin
255    
256 torben 3088 url := Format(Config.URLPrintLabel, [Stregkode] );
257    
258 torben 3077 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 torben 2705 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 torben 3086
311    
312     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
313    
314 torben 2705 end;
315    
316    
317 torben 3088 procedure TLabelPrint.PrintFuldPakkeLabel( PakkeshopLabel : TPakkeshopLabel);
318     begin
319     PrintFuldPakkeLabelStor( PakkeshopLabel );
320 torben 2705
321 torben 3088 end;
322    
323     // Bruges til label der passer til 60x100
324     procedure TLabelPrint.PrintFuldPakkeLabelLille( PakkeshopLabel : TPakkeshopLabel);
325 torben 2705 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 torben 2790
349    
350     // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
351 torben 3077 if ( PakkeshopLabel.PakkeshopNavn <> '' ) then
352 torben 2790 begin
353     Canvas.TextOut(110, 240, 'Pakkeshop:');
354 torben 3077 Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
355     Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
356     Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
357    
358 torben 2790 end;
359    
360    
361 torben 2705
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 torben 3086 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
443    
444 torben 2705 end;
445    
446    
447 torben 3088 // 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 torben 2705 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 torben 3038 // 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 torben 2705
605 torben 3038 '^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 torben 2705 function TLabelPrint.GetPrinterCount() : Integer;
695     begin
696     Result := Printer.Printers.Count;
697     end;
698    
699     end.

  ViewVC Help
Powered by ViewVC 1.1.20