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

Вниз

Вывод потока на принтер.   Найти похожие ветки 

 
Курдль ©   (2004-03-12 11:15) [0]

Есть ли более высокоуровневый вариант вывода потока на принтер, чем нижеуказанный?
Кстати, этот пример тоже только "взбадривает" принтер, а не печатает на нем :)

procedure PrintBuffer(PrinterIndex:integer; Title:string;
Buffer: PChar; BufferSize: integer);
var
Handle : THandle;
DocInfo: TDocInfo2;
S1,S2,S3: array[0..255] of Char;
N: dword;
begin
Printer.PrinterIndex := PrinterIndex;
Printer.GetPrinter(S1, S2, S3, Handle);
if not OpenPrinter(S1, Handle, nil) then begin
  ShowMessage("Îøèáêà ïå÷àòè " + IntToStr(GetLastError));
  Exit
end;
FillChar(DocInfo,Sizeof(DocInfo),0);
with DocInfo do begin
  pDocName := PChar(Title);
  pDataType := "RAW";
end;
N :=StartDocPrinter(Handle, 0, @DocInfo);
StartPagePrinter(Handle);
WritePrinter(Handle, Buffer, BufferSize, N);
EndPagePrinter(Handle);
EndDocPrinter(Handle);
ClosePrinter(Handle);
end;


 
CyberStorm   (2004-03-12 11:46) [1]

Есть

Var
F:TextFile;
Begin
AssignFile(F,"prn");Rewrite(F);
WriteLN(F,"sdhgkjhsdjkghsd");
CloseFile(F);
End.


 
Курдль ©   (2004-03-12 11:52) [2]

А что, WriteLn начала работать с потоками?
И не кажется ли AssignFile(F,"prn"); несколько корявым для 2004 года?


 
имя   (2004-03-12 11:54) [3]

Удалено модератором


 
CyberStorm   (2004-03-12 11:56) [4]

Да ради бога :)
переделай под TFileStream


 
CyberStorm   (2004-03-12 12:09) [5]

Var
F:TFileStream;
Buffer:string;
begin
        Buffer:="shgjkshjkgdfkgjdflkjglfdgldfgjdfldfgdfg";
        F:=TFileStream.Create("LPT1",fmCREATE);
        F.Write(Buffer[1],Length(Buffer));
        F.Free;
end;


 
Курдль ©   (2004-03-12 12:12) [6]

Вот этого я и добиваюсь - корректно отправить метафайл на принтер. Рисовать его при помощи Draw и StretchDraw не хочется из принципиальных соображений.

Следующий код вызывает зависание проги:

procedure TForm1.Button4Click(Sender: TObject);
var stm: TFileStream;
begin
 stm := TFileStream.Create("prn", fmOpenWrite);
 try
   FMetafile1.SaveToStream(stm);
 finally
   stm.Free;
 end;
end;


 
CyberStorm   (2004-03-12 12:22) [7]

Дык с этого и надо было начинать, что хочешь вывести метафайл.
Он у тебя печататься и не должен напрямую, рисуй на канвасе как показывал выше, токо так будет правильно работать


 
Курдль ©   (2004-03-12 12:34) [8]


> Он у тебя печататься и не должен напрямую, рисуй на канвасе
> как показывал выше, токо так будет правильно работать

Не! Это не интересно! Должен быть какой-то выход!
Не для того EMF придумывали, чтобы его банально рисовать.
Если метафайл можно упихать в поток, то остается грамотно поток услать на принтер. А я этого не умею :(


 
CyberStorm   (2004-03-12 12:47) [9]

Есть, кстати, драйвера у некоторых принтеров работающие только в RAW формате (это внутренний формат конкретного принтера несовместимый ни с чем) - с такими как будешь работать?
Принтер то не понимает ту кодировку графических примитивов, которая находится в EMF-файле и которую ты пытаешся скормить через порт напрямую процессору принтера, обычно в драйвере принтера есть предпроцессор который перекодирует данные в доступные аппаратной части принтера.



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

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

Наверх




Память: 0.49 MB
Время: 0.028 c
1-1079675464
AleksandrKu
2004-03-19 08:51
2004.04.04
Как по нажатии клавиши изменить фокус ввода


14-1078469247
Nick-From
2004-03-05 09:47
2004.04.04
Хорошая книга по бухучету для начинающего


1-1079353222
PiratA
2004-03-15 15:20
2004.04.04
MDI children


8-1070438607
Pa5ha
2003-12-03 11:03
2004.04.04
Анимация персонажей


4-1074702213
KalmykovSergei
2004-01-21 19:23
2004.04.04
SHEmptyRecycleBin как програмно очистить корзину