Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.20;
Скачать: CL | DM;

Вниз

Работа с матричным принтером   Найти похожие ветки 

 
Shopot ©   (2003-09-08 18:55) [0]

Господа! Как мне сделать так, чтобы после печати одной - двух строк на матричном принтере, он не выплевывал весь лист, а переходил на новую строку и останавливался?


 
DC-AC   (2003-09-09 07:37) [1]

Видимо нужно после этих строк передать ему коды Carriage Return ($0D) и Line feed ($0A). Почему у тебя вместо этого передается Form feed - не знаю, исходный код нужно смотреть.


 
Shopot ©   (2003-09-10 18:22) [2]

А как передать эти коды если я пользуюсь стандартной Writeln(Prn, "...")?


 
jack128 ©   (2003-09-10 23:54) [3]

Write(Prn, #13#10);


 
Германн ©   (2003-09-11 03:05) [4]

Я бы сказал так. Дело, скорее всего, не в неправильной подаче кодов на принтер или в неподаче их вообще.
Дело в том, что принтер в Windows - общий ресурс, а поэтому на печать принимаются готовые документы. Напечатал их (не важно какими функциями), будь добр освободи принтер для других приложений, в том числе, вытащи свою бумагу!


 
Толя   (2003-09-11 10:27) [5]

Можешь сделать так:


Var T : TextFile;

BEGIN
...
AssignFile(T, "C:\Temp\a.tmp");
Rewrite(T, "PRN");

K := Chr(18) + Chr(27) + Chr(77); //12 cpi normal (Esc+M)
// K := Chr(14) + Chr(27) + Chr(77); //12 cpi BOLD
// K := Chr(15) + Chr(27) + Chr(77); //12 cpi CONDENSED
// K := Chr(14) + Chr(27) + Chr(80); //10 cpi BOLD
// K := Chr(15) + Chr(27) + Chr(80); //10 cpi CONDENSED
Write(T, K);//Устанавливаем шрифт, на болш. матр.
//принтеров они совподают

K:="I go home";
WriteLn(T, K);

CloseFile(T);
...


 
Orange Lim ©   (2003-09-12 08:25) [6]

Можно так:


unit SplPrint;

interface

uses
Windows, Messages, Classes, WinSpool, SysUtils;

{ Возвращает принтера, установленные в системе }
procedure EnumPrt(st: TStrings;var Def: integer);
{ Инициализация устройства печати }
procedure StartPrint(PrtName, DocName, ToFile: string; Copies: integer);
{ Запись строки в текущее устройство печати с форматированием и конвертацией }
function ToPrnFrmC(FrmStr: string; const Args: array of const): boolean;
{ Запись строки в текущее устройство печати с форматированием }
function ToPrnFrm(FrmStr: string; const Args: array of const): boolean;

{ Запись строки в текущее устройство печати + конец строки }
function ToPrnLn(S: string): boolean;

{ Запись строки в текущее устройство печати + конец строки + 2DOS}
function ToDosPrnLn(S: string): boolean;

{ Запись строки в текущее устройство печати }
function ToPrn(S: string): boolean;
{ Отмена печати }
procedure CancelPrint;
{ Закрытие устройства печати }
procedure EndPrint;

var
ph: THandle;
DevMode: TDeviceModeA;
PrJob: dword;

implementation

function ReplaceStr(const S, Srch, Replace: string): string;
var
I: Integer;
Source: string;
begin
Source := S;
Result := "";
repeat
I := Pos(Srch, Source);
if I > 0 then begin
Result := Result + Copy(Source, 1, I - 1) + Replace;
Source := Copy(Source, I + Length(Srch), MaxInt);
end
else Result := Result + Source;
until I <= 0;
end;

function ToDos(const AnsiStr: String):String;
begin
SetLength(Result, Length(AnsiStr));
if Length(Result) > 0 then
AnsiToOem(PChar(AnsiStr), PChar(Result));
{ OemToAnsi преобразует 15->253, а AnsiToOem 253->15 не делает, }
{ поэтому теряется код сжатия (замечено на русской Windows 95) }
Result:=ReplaceStr(Result,chr(253),chr(15));
end;

function ToWin(str: String):String;
begin
if str="" then begin
Result:="";
System.Exit;
end;
OemToAnsi(PChar(str),PChar(str));
Result:=str;
end;

{ Возвращает принтера, установленные в системе }
procedure EnumPrt(st: TStrings;var Def: integer);
type
PPrInfoArr = ^TPrInfoArr;
TPrInfoArr = array [0..0] of TPRINTERINFO2;
var
i,Indx,Level: integer;
buf: pointer;
Need,Returned: dword;
PrInfoArr: PPrInfoArr;
begin
st.Clear;
Def:=0; Level:=2;
EnumPrinters(PRINTER_ENUM_LOCAL,nil,Level,nil,0,Need,Returned);
GetMem(buf,Need);
try
EnumPrinters(PRINTER_ENUM_LOCAL,nil,Level,PByte(buf),Need,Need,Returned);
PrInfoArr:=buf;
{$RANGECHECKS OFF}
for i:=0 to Returned-1 do begin
Indx:=st.Add(PrInfoArr[i].pPrinterName);
if (PrInfoArr[i].Attributes AND PRINTER_ATTRIBUTE_DEFAULT)>0 then Def:=Indx;
end;
{$RANGECHECKS ON}
finally
FreeMem(buf);
end;
end;

{ Инициализация устройства печати }
procedure StartPrint(PrtName, DocName, ToFile: string; Copies: integer);
var
pdi: PDocInfo1;
pd: TPrinterDefaults;
begin
DevMode.dmCopies:=Copies;
DevMode.dmFields:=DM_COPIES;
pd.pDatatype:="RAW";
pd.pDevMode:=@DevMode;
pd.DesiredAccess:=PRINTER_ACCESS_USE;
if Win32Check(OpenPrinter(PChar(PrtName),ph,@pd)) then begin
new(pdi);
with pdi^ do begin
pDocName:=PChar(DocName);
if ToFile="" then pOutputFile:=nil
else pOutputFile:=PChar(ToFile);
pDatatype:="RAW";
end;
PrJob:=StartDocPrinter(ph,1,pdi);
if PrJob=0 then Win32Check(false);
end;
end;

{ Запись строки в текущее устройство печати с форматированием }
function ToPrnFrm(FrmStr: string; const Args: array of const): boolean;
begin
Result:=ToPrnLn(Format(FrmStr,Args));
end;

{ Запись строки в текущее устройство печати с форматированием и конвертацией }
function ToPrnFrmC(FrmStr: string; const Args: array of const): boolean;
begin
Result:=ToPrnLn(ToDos(Format(FrmStr,Args)));
end;

{ Запись строки в текущее устройство печати + конец строки }
function ToPrnLn(S: string): boolean;
begin
Result:=ToPrn(S+#13#10);
end;

function ToDosPrnLn(S: string): boolean;
begin
Result:=ToPrn(ToDos(S)+#13#10);
end;

{ Запись строки в текущее устройство печати }
function ToPrn(S: string): boolean;
var cp: dword;
begin
Win32Check(WritePrinter(ph,PChar(S),length(S),cp));
Result:=true;
end;

{ Закрытие устройства печати }
procedure EndPrint;
begin
Win32Check(EndDocPrinter(ph));
// Win32Check(EndDoc(ph)>0);
end;

{ Отмена печати }
procedure CancelPrint;
begin
Win32Check(SetJob(ph,PrJob,0,nil,JOB_CONTROL_CANCEL));
end;

initialization

end.



Страницы: 1 вся ветка

Текущий архив: 2003.11.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-66099
Sergik!
2003-10-29 10:08
2003.11.20
Будильник


1-65819
dimm
2003-11-10 12:26
2003.11.20
Как String преобразовать в Pchar?


14-66056
Bulat
2003-10-30 17:53
2003.11.20
Com-порт


1-65912
Alexious
2003-11-08 13:53
2003.11.20
Закрытие формы


14-66115
Иван Шихалев
2003-10-28 21:28
2003.11.20
Навеяло...