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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20