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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20