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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3123 - (hide annotations) (download)
Tue Oct 18 13:57:46 2016 UTC (7 years, 7 months ago) by torben
File size: 19987 byte(s)
6_3_3
1 torben 2705 unit LabelPrint;
2    
3     interface
4    
5     uses
6     ParentForm,
7 torben 3094 LabelData,
8 torben 2705 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 torben 3104 procedure PrintLabelData( LabelData : TLabelData);
21 torben 3077
22 torben 3123 procedure SendTilPrinter_old(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
23 torben 2705
24 torben 3095 procedure PrintSimpelLabel( LabelData : TLabelData) ;
25    
26 torben 3101
27 torben 3094 procedure PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
28 torben 2705
29 torben 3077
30 torben 3123 procedure PrintDaodirekteLabel_old( RuteNummer, Kommentar, BoghandlerNavn : String) ;
31 torben 2705
32 torben 3038
33 torben 2705 function GetPrinterCount() : Integer;
34    
35     private
36     parentForm : IParentForm;
37     Barcode : TStBarcode;
38     var Config: TConfiguration;
39    
40    
41 torben 3101 procedure PrintZPL( ZplData : string);
42    
43     procedure PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
44     procedure PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
45    
46    
47 torben 2705 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 torben 3094 Math, // DegToRad() bruges i PrinTLabelData
62 torben 3077 Forms,
63 torben 3088 IdHTTP,
64 torben 3095 Graphics,
65     XMLDoc
66 torben 2705 ;
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 torben 3123 procedure TLabelPrint.PrintDaodirekteLabel_old( RuteNummer, Kommentar, BoghandlerNavn : String) ;
123 torben 2705 begin
124     with Printer do
125     begin
126     BeginDoc;
127 torben 3086
128 torben 2705 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 torben 3086
150    
151    
152     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
153    
154 torben 2705 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 torben 3099 // 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 torben 2705 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 torben 3086
247    
248     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
249    
250 torben 2705 end;
251    
252    
253 torben 3077 procedure TLabelPrint.PrintLabel( Stregkode : String);
254     var
255     url: String;
256     response: String;
257    
258     httpClient: TIdHTTP;
259    
260 torben 3095 XMLDocument1: TXMLDocument;
261 torben 3077
262 torben 3095 LabelData: TLabelData;
263 torben 3077
264 torben 3095
265 torben 3077 begin
266    
267 torben 3088 url := Format(Config.URLPrintLabel, [Stregkode] );
268    
269 torben 3077 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 torben 3095 XMLDocument1 := parentForm.GetXMLDocument();
278 torben 3077
279 torben 3095 XMLDocument1.LoadFromXML(response);
280 torben 3077
281 torben 3095 LabelData := TLabelData.Create(XMLDocument1);
282 torben 3104 PrintLabelData(LabelData);
283     LabelData.Free();
284 torben 3095
285 torben 3104
286     end;
287    
288     procedure TLabelPrint.PrintLabelData( LabelData : TLabelData);
289     begin
290 torben 3095 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 torben 3104 end;
303 torben 3095
304    
305    
306 torben 3123 procedure TLabelPrint.SendTilPrinter_old(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
307 torben 2705 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 torben 3086
347    
348     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
349    
350 torben 2705 end;
351    
352    
353 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabel( PakkeshopLabel : TLabelData);
354 torben 3088 begin
355 torben 3091 if (Config.LabelStor = 1) then
356     begin
357     PrintFuldPakkeLabelStor( PakkeshopLabel );
358 torben 2705
359 torben 3091 end
360     else
361     begin
362     PrintFuldPakkeLabelLille( PakkeshopLabel );
363    
364     end;
365    
366 torben 3088 end;
367    
368     // Bruges til label der passer til 60x100
369 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabelLille( PakkeshopLabel : TLabelData);
370 torben 2705 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 torben 3103 Canvas.Font.Size := 15;
383 torben 2705 Canvas.TextOut(15,10, 'Code: ' + PakkeshopLabel.Tjekkode + ' ' + PakkeshopLabel.Overskrift);
384    
385    
386    
387     Canvas.TextOut(25, 90, PakkeshopLabel.Navn );
388 torben 3103 Canvas.TextOut(25, 140, PakkeshopLabel.Vejnavn );
389     Canvas.TextOut(25, 190, PakkeshopLabel.Postnr );
390 torben 2705
391    
392     Canvas.Font.Size := 9;
393 torben 2790
394    
395     // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
396 torben 3077 if ( PakkeshopLabel.PakkeshopNavn <> '' ) then
397 torben 2790 begin
398     Canvas.TextOut(110, 240, 'Pakkeshop:');
399 torben 3077 Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
400     Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
401     Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
402    
403 torben 2790 end;
404    
405    
406 torben 2705
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 torben 3086 Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
488    
489 torben 2705 end;
490    
491    
492 torben 3088 // Bruges til label der passer til 100x150
493 torben 3094 procedure TLabelPrint.PrintFuldPakkeLabelStor( PakkeshopLabel : TLabelData);
494 torben 3088 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 torben 2705 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 torben 3038 // Online zpl viewer
640 torben 2705
641 torben 3038
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 torben 3095 procedure TLabelPrint.PrintSimpelLabel( LabelData : TLabelData) ;
714     begin
715     with Printer do
716     begin
717     BeginDoc;
718 torben 3038
719 torben 3104 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 torben 3095 EndDoc;
725     end;
726    
727    
728    
729     Printers.SetPrinter( TPrinter.Create() ).Free();//Work around for KB3177725
730    
731     end;
732    
733    
734    
735 torben 2705 function TLabelPrint.GetPrinterCount() : Integer;
736     begin
737     Result := Printer.Printers.Count;
738     end;
739    
740     end.

  ViewVC Help
Powered by ViewVC 1.1.20