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

Annotation of /dao/DelphiScanner/LabelPrint.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2790 - (hide annotations) (download)
Fri Dec 4 14:07:48 2015 UTC (8 years, 5 months ago) by torben
File size: 11887 byte(s)
Korriger i forhold til udskrivning af Shop2Direkte labels
1 torben 2705 unit LabelPrint;
2    
3     interface
4    
5     uses
6     ParentForm,
7     PakkeshopLabels,
8     Configuration,
9     StBarc;
10    
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     procedure SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
20    
21     procedure PrintPakkeshopLabel( PakkeshopLabel : TPakkeshopLabel);
22    
23     procedure PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
24    
25     function GetPrinterCount() : Integer;
26    
27     private
28     parentForm : IParentForm;
29     Barcode : TStBarcode;
30     var Config: TConfiguration;
31    
32    
33     function SavePChar(p: PChar): PChar;
34     function GetCurrentPrinterHandle(): THandle;
35    
36     end;
37    
38     function GetPixelsPerInchX(): Integer;
39     function GetPixelsPerInchY(): Integer;
40    
41     implementation
42     uses
43     Printers,
44     WinSpool,
45     Windows,
46     SysUtils, //Format
47     Math, // DegToRad() bruges i PrintPakkeshopLabel
48     Forms
49     ;
50    
51    
52    
53    
54     function GetPixelsPerInchX(): Integer;
55     begin
56     Result := GetDeviceCaps(Printer.Handle, LOGPIXELSX)
57     end;
58    
59     function GetPixelsPerInchY(): Integer;
60     begin
61     Result := GetDeviceCaps(Printer.Handle, LOGPIXELSY)
62     end;
63    
64    
65    
66     constructor TLabelPrint.Create( p : IParentForm; var Configuration : TConfiguration; PrinterNavn: String);
67     var
68     FormObj : TForm;
69     printerInd : integer;
70     begin
71     parentForm := p;
72     Config := Configuration;
73    
74     FormObj := parentForm.GetFormObject();
75    
76    
77     Barcode := TStBarcode.Create(FormObj);//Dynamisk oprettelse af Barcode component
78    
79    
80     if PrinterNavn<> '' then
81     begin
82     printerInd := Printer.Printers.IndexOf(PrinterNavn);
83     if printerInd >= 0 then
84     begin
85     Printer.PrinterIndex := printerInd;
86     end;
87     end;
88    
89     end;
90    
91    
92    
93    
94     function TLabelPrint.GetCurrentPrinterHandle(): THandle;
95     var
96     Device, Driver, Port: array[0..255] of Char;
97     hDeviceMode: THandle;
98     begin
99     Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
100     if not OpenPrinter(@Device, Result, nil) then
101     RaiseLastWin32Error;
102     end;
103    
104    
105     procedure TLabelPrint.PrintDaodirekteLabel( RuteNummer, Kommentar, BoghandlerNavn : String) ;
106     begin
107     with Printer do
108     begin
109     BeginDoc;
110     Canvas.Font.Size := Config.FontSizeRute;
111     if (Length(RuteNummer) > 7) then
112     begin
113     Canvas.Font.Size := Config.FontSizeRuteLille;
114     end;
115     Canvas.TextOut(Config.XPosRute, Config.YPosRute, RuteNummer);
116     Canvas.Font.Size := Config.FontSizeKommentar;
117     Kommentar := StringReplace(Kommentar, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
118     if (Kommentar = 'Ok') or (Kommentar = 'ALLEREDE SCANNET') then
119     begin
120     Kommentar := '';
121     end;
122     if (BoghandlerNavn = 'PAKKE ER SCANNET') then
123     begin
124     BoghandlerNavn := '';
125     end;
126     Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, Kommentar); // Kan ikke lave linieskift (se tidligere kommentar om samme)
127     Canvas.Font.Size := Config.FontSizeBoghandler;
128     Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);
129     EndDoc;
130     end;
131     end;
132    
133    
134    
135     procedure TLabelPrint.CheckPrintQue(tjektype : string; PrinterNavn : String);
136     type
137     TJobs = array [0..1000] of JOB_INFO_1;
138     PJobs = ^TJobs;
139     var
140     hPrinter: THandle;
141     bytesNeeded, numJobs, i: Cardinal;
142     pJ: PJobs;
143     printerTxt, statusTxt, dokumentTxt: String;
144     begin
145    
146     // tjektype = 'Opstart' skal vise alarmlinie, samt opdatere listbox1
147     // 'Test' skal vise alarmlinie, samt opdatere listbox1
148     // 'Timer' skal kun vise alarmlinie
149    
150     if (PrinterNavn = 'Ingen') and ( (tjektype = 'Opstart') or (tjektype = 'Test') ) then
151     begin
152    
153     parentForm.LogMessage( 'Der er fravalgt printer i dette program' );
154     end
155     else if (Printer.Printers.Count = 0) and ( (tjektype = 'Opstart') or (tjektype = 'Test') ) then
156     begin
157     parentForm.LogMessage( 'Der er ikke installeret en printer på denne PC' );
158     end
159     else
160     begin
161     hPrinter := GetCurrentPrinterHandle;
162     try
163     EnumJobs(hPrinter, 0, 1000, 1, nil, 0, bytesNeeded, numJobs);
164     pJ := AllocMem(bytesNeeded);
165     if not EnumJobs(hPrinter, 0, 1000, 1, pJ, bytesNeeded, bytesNeeded, numJobs) then
166     RaiseLastWin32Error;
167    
168     if numJobs = 0 then
169     begin
170     if (tjektype = 'Test') then
171     begin
172     parentForm.LogMessage( printerTxt + ': Ingen dokumenter i kø' );
173    
174     end;
175     parentForm.SetPrinterstatusText('', false);
176     end
177     else // så er der kø til printeren
178     begin
179     printerTxt := SavePChar(pJ^[0].pPrinterName);
180     if (tjektype = 'Opstart') or (tjektype = 'Test') then
181     begin
182    
183    
184     parentForm.LogMessage( IntToStr(numJobs) + ' dokument(er) i kø til printer: ' + printerTxt );
185    
186     end;
187     for i := 0 to Pred(numJobs) do
188     begin
189     printerTxt := SavePChar(pJ^[i].pPrinterName);
190     statusTxt := 'Ukendt';
191     if (IntToStr(pJ^[i].Status) = '0') then
192     statusTxt := 'Venter...';
193     if (IntToStr(pJ^[i].Status) = '4096') then
194     statusTxt := 'Printer...';
195     if (IntToStr(pJ^[i].Status) = '8210') then
196     statusTxt := 'Printerfejl';
197     if (IntToStr(pJ^[i].Status) = '8214') then
198     statusTxt := 'Sletter print...';
199    
200     dokumentTxt := SavePChar(pJ^[i].pDocument);
201     if (dokumentTxt = '') then
202     dokumentTxt := 'Uden navn';
203    
204     if (tjektype = 'Opstart') or (tjektype = 'Test') then
205     begin
206    
207     parentForm.LogMessage( Format('Printer %s, Dokument %d: %s, Status (%d): %s', [printerTxt, i+1, dokumentTxt, pJ^[i].Status, statusTxt]) );
208    
209     end;
210    
211     if (i = 0) then
212     begin
213     parentForm.SetPrinterstatusText(printerTxt + ': ' + IntToStr(numJobs) + ' dokument(er) in kø. Dokument status: ' + statusTxt, (numJobs > 3) );
214     end;
215    
216     end;
217     end
218     finally
219     ClosePrinter(hPrinter);
220     end;
221     end;
222     end;
223    
224    
225     procedure TLabelPrint.SendTilPrinter(kontrolKoreliste, RuteNummer, Kommentar, BoghandlerNavn, Koreliste, SmsKode, DBKbane, Leveringssted : String; var PrintNyLabel : Boolean; BoghandlerNummer : string = '');
226     begin
227     with Printer do
228     begin
229     BeginDoc;
230    
231     Canvas.Font.Size := Config.FontSizeRuteLille;
232     if (kontrolKoreliste <> '') then
233     begin
234     Canvas.TextOut(Config.XPosRute, Config.YPosRute, kontrolKoreliste);
235     end
236     else
237     begin
238     Canvas.TextOut(Config.XPosRute, Config.YPosRute, RuteNummer);
239     end;
240     Canvas.Font.Size := Config.FontSizeKorelisteLille;
241     Canvas.TextOut(Config.XPosKoreliste, Config.YPosKoreliste, Koreliste);
242     if (Config.Sted = 'DBK') or (Config.Sted = '04') then
243     begin
244     Canvas.Font.Size := Config.FontSizeSorteringsfelt1;
245     Canvas.TextOut(Config.XPosSorteringsfelt1,Config.YPosSorteringsfelt1, DBKbane); // sorteringsoplysning 1
246     Canvas.Font.Size := Config.FontSizeSorteringsfelt1;
247     Canvas.TextOut(Config.XPosSorteringsfelt2, Config.YPosSorteringsfelt2, Leveringssted); // sorteringsoplysning 2
248     end;
249     Canvas.Font.Size := Config.FontSizeKommentar;
250    
251     Kommentar := StringReplace(Kommentar, #$A, ' - ', [rfReplaceAll, rfIgnoreCase]);
252     Kommentar := StringReplace(Kommentar, 'PAKKE ER SCANNET', '', [rfReplaceAll, rfIgnoreCase]);
253    
254     Canvas.TextOut(Config.XPosKommentar, Config.YPosKommentar, Kommentar); // Kan ikke lave linieskift (se tidligere kommentar om samme)
255     if SmsKode <> '' then
256     begin
257     Canvas.Font.Size := Config.FontSizeSmskode;
258     Canvas.TextOut(Config.XPosKommentar, Config.YPosSmskode, concat('CODE: ', SmsKode));
259     end;
260     Canvas.Font.Size := Config.FontSizeBoghandler;
261     Canvas.TextOut(Config.XPosBoghandler, Config.YPosBoghandler, BoghandlerNavn);
262    
263     EndDoc;
264     end;
265     end;
266    
267    
268    
269     // ToDo: PrintPakkeshopLabel()
270     procedure TLabelPrint.PrintPakkeshopLabel( PakkeshopLabel : TPakkeshopLabel);
271     var
272     XForm, XFormOld: TXForm; //Bruges til rotate X-formation
273     Angle: integer;
274     gMode: integer;
275     Dirigering: string;
276    
277     begin
278     with Printer do
279     begin
280     BeginDoc();
281    
282    
283     Canvas.Font.Size := 16;
284     Canvas.TextOut(15,10, 'Code: ' + PakkeshopLabel.Tjekkode + ' ' + PakkeshopLabel.Overskrift);
285    
286    
287    
288     Canvas.TextOut(25, 90, PakkeshopLabel.Navn );
289     Canvas.TextOut(25, 135, PakkeshopLabel.Vejnavn );
290     Canvas.TextOut(25, 180, PakkeshopLabel.Postnr );
291    
292    
293     Canvas.Font.Size := 9;
294 torben 2790
295    
296     // Skriv ikke 'Pakkeshop' overskrift hvis det er en shop2direkte
297     if ( (PakkeshopLabel.Shop2Direkte = '') OR (PakkeshopLabel.Shop2Direkte = '0') ) then
298     begin
299     Canvas.TextOut(110, 240, 'Pakkeshop:');
300     end;
301    
302    
303 torben 2705 Canvas.TextOut(110, 270, PakkeshopLabel.PakkeshopNavn);
304     Canvas.TextOut(110, 300, PakkeshopLabel.PakkeshopAddr);
305     Canvas.TextOut(110, 330, PakkeshopLabel.PakkeshopPostnr);
306    
307     Canvas.TextOut(350, 240, 'Afsender:');
308     Canvas.TextOut(350, 270, PakkeshopLabel.AfsenderNavn);
309     Canvas.TextOut(350, 300, PakkeshopLabel.AfsenderAdresse);
310     Canvas.TextOut(350, 330, PakkeshopLabel.AfsenderPostnr);
311    
312     Dirigering := PakkeshopLabel.PakkeshopSted + ' | ' + PakkeshopLabel.PakkeshopTurid + ' | ' + PakkeshopLabel.PakkeshopNr;
313     if ( PakkeshopLabel.Koreliste <> '') then
314     begin
315     Dirigering := Dirigering + ' > ' + PakkeshopLabel.Koreliste;
316     end;
317    
318    
319     Canvas.Font.Size := 12;
320     Canvas.TextOut(15, 370, Dirigering);
321    
322    
323    
324    
325    
326     //Tegn adskillelses linier
327     Canvas.Pen.Width := 2;
328     //Øverste linie
329     Canvas.MoveTo(20,80);
330     Canvas.LineTo(600,80);
331    
332     // Midterste linie
333     Canvas.MoveTo( 20, 240);
334     Canvas.LineTo(600, 240);
335    
336     //Nederste linie
337     Canvas.MoveTo( 20, 370);
338     Canvas.LineTo(600, 370);
339    
340    
341     //Tegn skrå streger over afsender
342     Canvas.Pen.Width := 1;
343     Canvas.MoveTo(600, 250);
344     Canvas.LineTo(350, 360);
345     Canvas.MoveTo(600, 360);
346     Canvas.LineTo(350, 250);
347    
348    
349    
350    
351     // Resten af rutinen vedr genering og placering af Barcode
352    
353     BarCode.BarCodeType := bcCode128;
354     BarCode.Code128Subset := csCodeC;
355     BarCode.Code := PakkeshopLabel.Stregkode;
356     BarCode.Validate(True);
357    
358     //Start X-formation
359     //ShowMessage( Format('%d %d', [PageWidth, PageHeight]) );
360     GetWorldTransform(Canvas.Handle, XFormOld);
361    
362     Angle := 270;
363     XForm.eM11 := Cos(DegToRad(Angle));
364     XForm.eM12 := Sin(DegToRad(Angle));
365     XForm.eM21 := -Sin(DegToRad(Angle));
366     XForm.eM22 := Cos(DegToRad(Angle));
367     XForm.eDx := 0;
368     XForm.eDy := 0;
369    
370     gMode := SetGraphicsMode(Canvas.Handle, GM_ADVANCED);
371     SetWorldTransform(Canvas.Handle, XForm);
372    
373     // PaintToCanvasSize arbejder i Inches
374     // Første pos argument bliver nu Y og skal være negativ for at rykke den ned
375     //Anden pos er X og skal være positiv for at justere ind fra venstre mod højre
376    
377     BarCode.PaintToCanvasSize(Printer.Canvas, -1.8, 3.3, 0.4);
378    
379    
380     SetWorldTransform(Canvas.Handle, XFormOld);
381     SetGraphicsMode(Canvas.Handle, gMode);
382    
383     EndDoc();
384     end;
385    
386    
387     end;
388    
389    
390     function TLabelPrint.SavePChar(p: PChar): PChar;
391     const
392     error: PChar = 'Nil';
393     begin
394     if not Assigned(p) then
395     Result := error
396     else
397     Result := p;
398     end;
399    
400    
401     function TLabelPrint.GetPrinterCount() : Integer;
402     begin
403     Result := Printer.Printers.Count;
404     end;
405    
406     end.

  ViewVC Help
Powered by ViewVC 1.1.20