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

Вниз

Печать с канвы на принтер   Найти похожие ветки 

 
Knight   (2003-05-07 23:00) [0]

Надо вывести в проге нестандартный график, в чартах такого не нашёл, но это ничего... сделал свой с просмотром, выбором принтера и его свойств, осталось только напечатать.

В FAQ нашёл примеры с выводом текста Printer.Canvas.TextOut(...) и файл связанный с принтером - это работает, а если с имиджа или канвы при помощи CopyRect, Draw или StretchDraw, то никакой реакции принтера не наблюдатся.

Почему???

Кто знает, как правильно организовать вывод изображения на принтер?


 
Knight   (2003-05-08 09:21) [1]

Люди!!! Неужели никто не в курсе?


 
MBo   (2003-05-08 09:23) [2]

покажи, как делаешь


 
Knight   (2003-05-08 09:49) [3]

В FAQ так.


Procedure TForm1.Button1Click(Sender: TObject);
Begin
With Printer do Begin BeginDoc; { Начало печати }
Canvas.Font:=label1.font; { Задали шрифт }
Canvas.TextOut(100,100,"Это тест принтера !!!"); { Печатаем текст }
EndDoc; { Конец печати } end;
end;


У меня по аналогии так:
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Rect(10,10,Printer.PageWidth-10,Printer.PageHeight-10),G);
Printer.EndDoc;


Пробовал просто копировать с канвы на канву принтера, тоже ничего не выдаёт... :(


 
HSolo   (2003-05-08 10:21) [4]

var
image2save: TImage; // его-то и печатаем
rPrint: TRect;
ppx, ppy: double;
prnWidth, prnHeight: integer;

Printer.BeginDoc;
ppx := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX)/72;
ppy := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY)/72;
prnWidth := Round(image2save.Width*ppx);
prnHeight := Round(image2save.Height*ppy);
rPrint := Rect(0, 0, prnWidth, prnHeight);
Printer.Canvas.StretchDraw(rPrint, image2save.Picture.Bitmap);
Printer.EndDoc;


 
Knight   (2003-05-08 10:21) [5]

Наверно никто не видит :(

BringToFront()... :)


 
REA   (2003-05-08 10:26) [6]

Если ты Image на принтер копируешь, то посмотри реализацию TForm.Print (или TCustomForm не помню) и сделай так же.
Или используй PaintTo, или рисуй сразу на Canvas принтера.
Ну и не забывай BeginDoc, EndDoc.


 
Knight   (2003-05-08 10:43) [7]

Я что-то не понял, для чего надо столько текста и чем он отличается от вашеприведённой строки... но попробовал, тоже не фурычит. TextOut() идет влёт, правда была козябра вместо русских букв, но это исправил через Font, а графика где-то застревает окончательно и бесповоротно. :(


 
LongIsland   (2003-05-08 10:53) [8]

procedure TfmMain.bnPrintClick(Sender: TObject);
var
Info: PBitmapInfo;
InfoSize, ImageSize: DWord;
Image: Pointer;
begin
if not dgPrint.Execute then Exit;
Printer.BeginDoc;
GetDIBSizes(imMain.Picture.Bitmap.Handle, InfoSize, ImageSize);
Info:=AllocMem(InfoSize);
try
Image:=AllocMem(ImageSize);
try
GetDIB(imMain.Picture.Bitmap.Handle, 0, Info^, Image^);
StretchDIBits(Printer.Canvas.Handle,
0, 0, Printer.PageWidth, Printer.PageHeight,
0, 0, imMain.Width, imMain.Height,
Image, Info^, DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
end;
Printer.EndDoc;
end;


Таким образом у меня печатает на любой принтер и любые картинки, а StretchDraw может глючить


 
ProgMan   (2003-05-08 10:57) [9]

Попробуй посмотреть реализацию печати в примере к TeeChart.
Вроде я оттуда дергал код, когда решал такую же проблему.



 
Грихан   (2003-05-08 12:34) [10]

Реализовывал я печать в свое время. Помню, что стречкать на принтер нельзя. Можно делать Draw на канву принтера - отсуда своеобразный олгаритм для распечатки страниц. Полностью привести не могу - автор не я, но знаю точно, что вот так работает:
Printer.BeginDoc;
Printer.Canvas.Draw(NumCrossX, NumCrossY, EMF);
Printer.EndDoc;
Если заинтересовался - напиши, может смогу поподробнее ответить...


 
Sandman25   (2003-05-08 16:10) [11]

Из хелпа по Delphi6.
Note: Delphi canvases use device-dependent bitmaps to implement the Draw, StretchDraw, or CopyRect methods. Because of this, you can’t use these methods with most printers. Instead, to create graphic images on the printer’s canvas, create a device-independent bitmap and draw it directly to the canvas’s Handle property.


 
KSergey   (2003-05-09 16:31) [12]

> LongIsland © (08.05.03 10:53)

А вот как на счет разных форматов? Здесь вы используете BitMap... А если исходно в TImage подгружен JPEG?


 
Navi   (2003-05-11 08:02) [13]

To Sandman25 - спасибо, раскопал. Мне было лень - я допер методом проб и ошибок.



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

Форум: "Основная";
Текущий архив: 2003.05.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
14-70489
LSW
2003-05-03 11:30
2003.05.22
Отдел кадров


14-70485
Supreme 2
2003-05-03 08:03
2003.05.22
Небольшие вопросики


3-70155
anpv
2003-05-02 10:41
2003.05.22
Interbase


9-70080
roach
2002-12-14 15:21
2003.05.22
SMD модель


7-70548
besenok
2003-03-24 11:36
2003.05.22
Переменные среды окружения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский