ESC команди за матричен принтер
3 отговора
191 прегледа
Re: ESC команди за матричен принтер
Най-простият начин за който се сещам е да си отвориш LPT1 като файл и да пишеш в него...
Иначе си намираш някакви компоненти за работа с портове и действаш :)
Иначе си намираш някакви компоненти за работа с портове и действаш :)
Разгледай юнита Printers.
Разгледай юнита Printers и глобалната променлива Printer.
А тук ти изпращам едно юнитче, да видиш как се определя има ли и какъв е принтера по подразбиране.
А тук ти изпращам едно юнитче, да видиш как се определя има ли и какъв е принтера по подразбиране.
unit UtilsPrinters;
interface
{}function GetCurrentPrinterName: string;
implementation
uses
Windows,
Printers;
{}function GetCurrentPrinterName: string;
var
FDevice: PChar;
FDriver: PChar;
FPort: PChar;
FHandle: THandle;
begin
GetMem (FDevice, 255);
GetMem (FDriver, 255);
GetMem (FPort, 255);
Printer.GetPrinter (FDevice, FDriver, FPort, FHandle);
Result := FDevice;
if FDevice <> nil then FreeMem (FDevice, 255);
if FDriver <> nil then FreeMem (FDriver, 255);
if FPort <> nil then FreeMem (FPort, 255);
end;
end.
Разгледайте това
type
TPrnBuffRec = record
bufflength: Word;
Buff_1: array[0..255] of Char;
end;
function DirectToPrinter(S: string; NextLine: Boolean): Boolean;
var
Buff: TPrnBuffRec;
TestInt: Integer;
begin
TestInt := PassThrough;
if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then
begin
if NextLine then S := S + #13 + #10;
StrPCopy(Buff.Buff_1, S);
Buff.bufflength := StrLen(Buff.Buff_1);
Escape(Printer.Canvas.Handle, PassThrough, 0, @buff, nil);
Result := True;
end
else
Result := False;
end;
и текст за печат
procedure TForm1.Button1Click(Sender: TObject);
begin
printer.BeginDoc;
try
DirectToPrinter('Proba' + CHR(27) + CHR(14) + 'Proba',true);
finally
printer.EndDoc;
end;
end;
14 за Болд поне на принтера който е пред мене
и може да се добави на края на реда да не е вече БОлд
TPrnBuffRec = record
bufflength: Word;
Buff_1: array[0..255] of Char;
end;
function DirectToPrinter(S: string; NextLine: Boolean): Boolean;
var
Buff: TPrnBuffRec;
TestInt: Integer;
begin
TestInt := PassThrough;
if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then
begin
if NextLine then S := S + #13 + #10;
StrPCopy(Buff.Buff_1, S);
Buff.bufflength := StrLen(Buff.Buff_1);
Escape(Printer.Canvas.Handle, PassThrough, 0, @buff, nil);
Result := True;
end
else
Result := False;
end;
и текст за печат
procedure TForm1.Button1Click(Sender: TObject);
begin
printer.BeginDoc;
try
DirectToPrinter('Proba' + CHR(27) + CHR(14) + 'Proba',true);
finally
printer.EndDoc;
end;
end;
14 за Болд поне на принтера който е пред мене
и може да се добави на края на реда да не е вече БОлд