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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20