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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20