Форум: "Система";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
ВнизПечать на удаленном принтере Найти похожие ветки
← →
Эдик (2003-12-08 10:49) [0]Всем привет!
Подскажите пож., как печатать на удаленном матричном принтере в тексте?
Заранее благодарен.
← →
FoxBox (2003-12-08 17:17) [1]Как и на любой другой принтер... Мапишь удаленный принтер, сажаешь его на какой-нить виртуальный порт, положим, LPT3 и печатаешь туда... AssignPrn и дальше по тексту
← →
Эдик (2003-12-08 18:21) [2]как посадить на виртуальный порт?
а програмно энто сделать можно?
← →
Виталик (2003-12-08 18:22) [3]Процедура печати текстового файла.
Проверено под 9x, 2K, NT
procedure TFrm_PSED.SBDosPrnClick(Sender: TObject);
var handleOut: THandle;
ADevice: array [0..100] of char ;
ADriver: array [0..100] of char;
APort: array [0..100] of char ;
ADeviceMode : THandle;
Buffer: Pointer;
Size: integer;
PSize,BufSize:LongWord;
i: integer;
fs: TFilestream;
begin
if PrintDialog1.Execute then
begin
try
fs:=TFilestream.Create(finame,fmOpenRead);
BufSize:=Fs.Size;
GetMem(Buffer, BufSize); {Creates Buffer dynamic variable}
Size:=fs.Read(buffer^,Bufsize);
// Inc(Size); {Add room for null character}
Printer.GetPrinter(ADevice, ADriver, APort, ADeviceMode);
handleOut:=CreateFile(APort, GENERIC_WRITE,
FILE_SHARE_WRITE, NIL,
OPEN_EXISTING, 0, 0 );
if HandleOut=INVALID_HANDLE_VALUE then
begin
ShowMessage(IntToStr(GetLastError()));
end;
for i:=1 to PrintDialog1.Copies do
WriteFile(handleOut,buffer^,size,psize,nil);
FreeMem(Buffer, BufSize);{Frees memory allocated to Buffer}
fs.Free;
CloseHandle( handleOut );
except
raise;
end;
end;
end;
← →
Эдик (2003-12-08 19:09) [4]Хороший вариант, а если надо сохранить параметры печати в ini-файле а потом считывать и исспользовать, т.е. настроил один раз - и работай...
← →
Эдик (2003-12-08 19:30) [5]Поспешил с вопросом, просто порт принтера надо запомнить и потом исспользовать. Спасибо за ответы!
← →
Эдик (2003-12-09 18:47) [6]Мне кажется этот вариант болле изящный, товарищ подкинул, делюсь, правда на C, но идею понять можно:
HANDLE hprn;
// Получаем название принтера по умолчанию
unsigned DevMode;
TPrinter *prt = Printer ();
prt->PrinterIndex = -1;
char buf1 [80], buf2 [80], buf3 [80];
prt->GetPrinter (buf1, buf2, buf3, DevMode);
// Открываем принтер
if (!OpenPrinter (buf1, &hprn, NULL))
throw Exception ("Hе удалось открыть принтер по умолчанию");
try
{
DOC_INFO_1 DocInfo;
DocInfo.pDocName = "Электронные весы - накладная";
DocInfo.pOutputFile = NULL;
DocInfo.pDatatype = "RAW";
DWORD JobID = StartDocPrinter (hprn, 1, (LPBYTE) &DocInfo);
if (!JobID)
throw Exception ("Hе удалось поставить задание в очередь на печать");
// Печатаем !
DWORD resb;
for (int i = 0; i < Bill->Count; i++)
{
char buf [80];
CharToOem (Bill->Strings [i].c_str (), buf);
WritePrinter (hprn, buf, strlen (buf), &resb);
WritePrinter (hprn, "\x0D\x0A", 2, &resb); // Конец строки
}
WritePrinter (hprn, "\x0C", 1, &resb); // Конец страницы (выплевываем
лист)
EndDocPrinter (hprn);
}
__finally
{
ClosePrinter (hprn);
}
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.013 c