Печат в дос режим, на матричен принтер
6 отговора
313 прегледа
Печат в дос режим, на матричен принтер
Здравейте. Трябва от делфи да се печата текст на матричен принтер.
Как да се направи така, че печата да не е windows,
а dos - (бърз). windows-печата е бавен, графичен.
Как да се направи така, че печата да не е windows,
а dos - (бърз). windows-печата е бавен, графичен.
Re: Печат в дос режим, на матричен принтер
a ti proba li da pishesh prez LPT1 ustrojstwoto(otworeno kato file) primerno? samo sha trqbwa da "butnesh" kirilicata s 64 nadolo i si gotof
------------------------------
I got a COMPILER, and I'm not afraid to use it!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
Re: Печат в дос режим, на матричен принтер
Нещо което не съм пробвал - но едно време писах подобно - кода ми се струва подобен
---
Е т'ва е живот!
var xPRN: TRawPrint;
begin
xPRN:=TRawPrint.Create; // create an instance
xPRN.PrinterName:='Name of the Generic printer';
if xPRN.Open then begin // if I can open the printer
xPRN.Condensed:=True; // print to 16 cpi
xPRN.InitPrinter;
xPRN.Print(2,10,'My Text'); // I set the row, column and text to print
xPRN.LaserPrinter:=True; // I can do it with laser printers;
xPRN.Write ('Another Text'); // I dont need to specify the row and column
xPRN.NewPage; // Form Feed
xPRN.Close: // I close the printer
end;
xPRN.Free; // release the instance
end;
The class:
/////////////////////////////////////////////////////////////////
unit URaw;
{
Unit to print raw text
Author: Alejandro Castro
Date 16/Jul/2000
}
interface
uses SysUtils, Windows, WinSpool;
type
TRawPrint = class(TObject)
private
xIsOpen: Boolean;
xHandle: THandle;
xBytesWritten: DWord;
xDocInfo: TDocInfo1;
xIsMatrix: Boolean; // is a matrix printer ?
function ReadLasPrt: Boolean;
procedure WriteLasPrt(const Value : Boolean);
function ReadMatPrt: Boolean;
procedure WriteMatPrt(const Value : Boolean);
public
Row: Integer; // current row
Column: Integer; // current column
RowsPage: Integer; // no. of rows per page
Document: String; // name of the document for winspool
PrinterName: String; // name of the raw printer
Condensed: Boolean; // print on condensed mode
SeqCondensed: String; // sequence of chars for print to 16 cpi
SeqNormal: String; // sequence of chars for print to 10 cpi
constructor Create;
function Open: Boolean; // open the printer
function Close: Boolean; // close the printer
Function InitPrinter: Boolean;
Function Write(xText: String): Boolean;
Procedure SetPos(xRow, xCol: Integer);
Procedure Go(xRow, xCol: Integer); // force to move the head of the printer
Procedure GoTop; // go to the begining of the next page or form
Procedure NewPage; // form feed
Procedure Print(xRow, xCol: Integer; xText: String); // print xText on the row, col
property MatrixPrinter: Boolean read ReadMatPrt write WriteMatPrt;
property LaserPrinter: Boolean read ReadLasPrt write WriteLasPrt;
end;
implementation
constructor TRawPrint.Create;
begin
Row:=0;
Column:=0;
RowsPage:=66;
xIsOpen:=False;
Condensed:=False;
Document:='Alfra';
PrinterName:='';
MatrixPrinter:=True;
end;
function TRawPrint.ReadMatPrt : Boolean;
begin
Result:=xIsMatrix;
end;
procedure TRawPrint.WriteMatPrt(const Value : Boolean);
begin
xIsMatrix:=Value;
SeqNormal:=#18;
SeqCondensed:=#15;
end;
procedure TRawPrint.WriteLasPrt(const Value : Boolean);
begin
xIsMatrix:=not Value;
SeqNormal:=#27+'&l6D'+#27+'(s0p10H';
SeqCondensed:=#27+'&l6D'+#27+'(s0p16.66H';
end;
function TRawPrint.ReadLasPrt : Boolean;
begin
Result:=not xIsMatrix;
end;
function TRawPrint.Open: Boolean;
begin
Result:=False;
if not xIsOpen then begin
if PrinterName<>'' then begin
if Document='' then
Document:='Alfra';
with xDocInfo do begin
pDocName := PChar(Document);
pOutputFile := nil;
pDatatype := 'RAW';
end;
Result:=OpenPrinter(PChar(PrinterName), xHandle, nil);
if Result then begin
Row:=0;
Column:=0;
if StartDocPrinter(xHandle, 1, @xDocInfo)=0 then Begin
Result:=False;
ClosePrinter(xHandle);
end;
end;
end;
xIsOpen:=Result;
end;
end;
function TRawPrint.Close: Boolean;
begin
if xIsOpen then
Result:=ClosePrinter(xHandle);
end;
Procedure TRawPrint.SetPos(xRow,xCol : Integer);
begin
Column:=xCol;
Row:=xRow;
end;
Function TRawPrint.InitPrinter: Boolean;
begin
Column:=0;
Row:=0;
if Condensed then
Write(SeqCondensed+#13)
else
Write(SeqNormal+#13);
Result:=True;
end;
Procedure TRawPrint.Go(xRow, xCol: Integer);
var i: Integer;
begin
if Row>xRow then
GoTop;
i:=Row;
while i Write(#10);
inc(i);
Row:=i;
end;
if Column>xCol then begin
Write(#13);
Column:=0;
end;
i:=Column;
if i<>xCol then
Write( Format('%-*s',[xCol-Column,'']) );
Column:=xCol;
end;
Procedure TRawPrint.GoTop;
begin
Go(RowsPage,0);
Column:=0;
Row:=0;
end;
Procedure TRawPrint.Print(xRow, xCol: Integer; xText: String);
begin
go(xRow,xCol);
if Write(xText) then
Column:=Column+xBytesWritten;
end;
Procedure TRawPrint.NewPage;
begin
Write(#12+#13);
Column:=0;
Row:=0;
end;
function TRawPrint.Write(xText: String): Boolean;
var xBuffer: String;
begin
Result:=False;
xBuffer:=xText;
if xIsOpen then
Result:=WritePrinter(xHandle, @xBuffer[1], Length(xBuffer), xBytesWritten);
end;
end.
---
Е т'ва е живот!
Редактирано от PhantomAS на
Re: Печат в дос режим, на матричен принтер
Procedure printMatrix;
var PrnFile : Text;
begin
assignfile(f, 'prn'); // or assignfile(f, 'Lpt1');
rewrite(f);
Writeln(f,'Some text'); //за кирилица намалявай с -64 символите
closefile (f);
end;
Друго си е....
var PrnFile : Text;
begin
assignfile(f, 'prn'); // or assignfile(f, 'Lpt1');
rewrite(f);
Writeln(f,'Some text'); //за кирилица намалявай с -64 символите
closefile (f);
end;
Друго си е....
Re: Печат в дос режим, на матричен принтер
Това безспорно си е най-ефикасният и прост начин, но знаеш ли какво става когато принтера е с изваден интерфейсен кабел например? WriteLn си увисва и можеш да чакаш до припадък да грейне exception I/O error... но уви! Оттук нататък само с Ctrl+Alt+Del можеш да прекъснеш приложението, освен ако не оправиш кабела. Аз излязох от ситуация като си написах един компонент, който поставя печата в Thread, а в Destroy на компонента викам TerminateThread в случай, че някой print-task в thread-a виси.
Re: Печат в дос режим, на матричен принтер
izobshto si mislq ne e li po-dobre pechata w takiwa sluchaj da se prawi po dobriq star i bug-free metod s tekstow fajl kojto sled towa da se typ-wa kam lpt-to s dos komanda?
------------------------------
I got a COMPILER, and I'm not afraid to use it!
------------------------------
I got a COMPILER, and I'm not afraid to use it!