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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20