Solved

Using a POS-printer (EPSON TM-U210B) in Delphi-app.

Posted on 2001-08-16
6
7,413 Views
Last Modified: 2007-11-27
Hi,

I am developing an application that uses the EPSON TM-U210B printer. This is a POS-printer (POS=Point Of Sales).

On the EPSON-website, I have found the specific driver and also some example source code to access the printer's functions.

However, these examples are written in Visual Basic.

For example, the printer has a special function to cut off the paper. In VB the code is like:

Printer.FontSize = 10
Printer.FontName = "control"
Printer.Print "F"
Printer.EndDoc

OK, I have tried to translate this into Delphi-code by using these lines:

with Printer do
begin
  BeginDoc;
  Canvas.Font.Size := 10;
  Canvas.Font.Name := 'control';
  Canvas.TextOut(0,0,'F');
  EndDoc;
end;

However, this is not working very well. Maybe I made a big mistake by trying to translate the VB-code without asking any help to you guys...

Furthermore, by using the canvas it seems like the printer is very fast running out of memory. Someway it is only possible to add about 20 lines into the canvas-text, or it will delete the last (few) lines.

I hope there is someone who can help me with this.
If you need to have some additional information, please ask!

Thank you in advance.

RoosieDB
0
Comment
Question by:roosiedb
  • 3
  • 2
6 Comments
 
LVL 40

Accepted Solution

by:
Richard Quadling earned 200 total points
ID: 6396356
Printing with these printers is a strange affair in Windows.

Whilst you can use the Windows printer drivers, I have found that writing direct to the port to be far easier.

Assuming you have the printing working, then, to get the cutter working, you will need to identify the port that the printer is connected to, open it, send the cutter code and close the port.

Something like ...

var
  Device, Driver, Port: Array[0..255] Of Char;
  DeviceMode: THandle;

ComboBox1.Items.Text := Printer.Printers.Text;
Printer.PrinterIndex := ComboBox1.ItemIndex;

Printer.GetPrinter(Device,Driver,Port,DeviceMode);
Reg := TRegistry.Create;

Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('System\CurrentControlSet\Control\Print\Printers\'+Device+'\',False);
sPort := Reg.ReadString('Port');
Reg.CloseKey;

Then, using standard file writing, send the string

#27 + 'i' for Full Cut
or
#27 + 'm' for Partial Cut.

Regards,

Richard Quadling.
0
 
LVL 3

Expert Comment

by:VSF
ID: 6398522
The best way to print on Matrix printer AFAIK is using writeln commands, it's faster and allow you to use the printer commands, take a look at the following:

//SIMPLE PRINTing WITH WriteLn
procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile; i : integer;
begin
AssignFile(F,'LPT1');  //Assign the file to the port
Rewrite(F);
Writeln(F,'Test line - 0');
Writeln(F,'Test Line - 1');
Writeln(F, #27#69 + 'Bold Line' + #27#70);
Writeln(F, #15 + 'Compressed Mode Line' + #18);
Writeln(F,#12);        // Eject page
CloseFile(F);
end;


//BETTER PRINTING WITH WriteLn
//Demonstrates the usage of the justify function of the printer!
procedure TForm1.Button1Click(Sender: TObject);
const
  cJustif = #27#97#51;
  cEject = #12;
  { Font Size }
  c10cpi = #18;
  c12cpi = #27#77;
  c17cpi = #15;
  cIExpanded = #14;
  cFExpanded = #20;
  { Font Format }
  cIBold = #27#71;
  cFBold = #27#72;
  cIItalic = #27#52;
  cFItalic = #27#53;
var
  Text: string;
  F: TextFile;
begin
  Text := c10cpi +
  'This is a test for EPSON LX-300 Printer. ' +
  'This procedure ilustrates the usage of the JUSTIFY function of the printer' +
  'without loosing the font format: ' +
  cIbold + 'BOLD - Bold, ' + cFbold +
  cIItalic + 'ITALIC - Italic, ' + cFItalic +
  c17cpi + 'Condensed (17cpi), ' + c10cpi +
  c12cpi + '12 cpi, ' + c10cpi +
  cIExpanded + 'Expanded.' + cFExpanded +
  ' Remenber This is only a simple and incomplete sample' +
  'you can Do much more if u want to.';
  AssignFile(F, 'LPT1');
  Rewrite(F);
  try
  WriteLn(F, cJustif, Texto);
  WriteLn(F, cEject);
  finally
  CloseFile(F);
  end;
end;

Hope this helps!
VSF
www.victory.hpg.com.br

0
 

Author Comment

by:roosiedb
ID: 6403054
It was very difficult to choose between the proposed answers, however, RQuadling's solution worked after I added some code from the other comment. I don't understand because the printer's manual says that #27 + 'f' is cutting off paper, not #27 + 'i' or 'm'... But, as I said, it worked.

I have graded your solution as "average" because I still had to find out what you mean by "using standard file writing" (example?). And I still don't understand why I need to access the registry for just a simple printing job...

I hope you appreciate my honesty here and that you don't kill me???  :-)

Anyway, thank you for your help...
0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 
LVL 40

Expert Comment

by:Richard Quadling
ID: 6405515
There is a difference between using the windows drivers and writing to the port directly.

In answer to your points though.

The windows drivers uses a wierd font called "Control" to talk to the printer. The characters you send using this font are very specific. And to be honest with you, I've never got them working as easily as I have with the normal control codes. Control codes aka escape sequences/control strings, normally start with an ESC (char 27) and normally contain keyboard enterable characters. But not always. Also, it is sometimes necessary to send NUL (char 0). This can be quite hard for some languages/programming.

The case of the letters is VERY important! F is not f.

ESC 'f' m n, deals with the delay for handling things like cheque printing or any other bit of paper shoved in. (m and n are delays).

I do not know if ESC 'F' is a real sequence for the TM series.

Sorry about the "standard file writing". Should have done an example.

Thanks for the points though.

If I where you, try and get hold of the Operator's manual for your printer. Normally, they contain the control strings in the appendix along with a full description. From what I can tell, the codes, when applicable, have the same meaning across the entire TM series (I've been doing this for around 11 years and that still holds true, but I think the new TM-HL series may not!).

Regards,

Richard Quadling.
0
 

Author Comment

by:roosiedb
ID: 6407790
Maybe that's what I didn't understand quite well: in the manual there was some example in Visual Basic, with something like: printer.font = "Control". And after that: printer.print "F". And now I am not using the Control-font, that explains everything!! Thank you.
0
 

Author Comment

by:roosiedb
ID: 6424446
I have posted another question about this EPSON printer problem. Could you please review this new question for me?

Rgrds,
RoosieDB
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

832 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question