Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.012 c
1-65828
AlexanderSK
2003-11-06 14:44
2003.11.20
Проблемма с SaveDialog.


11-65806
Юрий
2003-03-05 15:49
2003.11.20
OnResize событие


3-65738
Verba
2003-10-31 18:24
2003.11.20
Обновление Select


8-66020
Hatawa
2003-07-25 09:53
2003.11.20
Проблема с CopyRect


4-66167
Pohil
2003-09-24 12:34
2003.11.20
Как мне узнать что винда обновила рабочий стол?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский