Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как распечатать форму?


dataMaster ©   (2003-06-02 12:57:00) 

Всем привет! Не подскажете, как распечатать форму с расположеными на ней контролами? В VCL была команда Print. А тут ее не оказалось.


dataMaster   (2003-06-04 12:16:00) [1]

Всем спасибо. Все получилось.


savva   (2003-06-03 10:26:00) [2]

как вариант:
DC := GetDC(0);
PixelsPerInch := GetDeviceCaps(DC, LOGPIXELSY);
ReleaseDC(0, DC);

Printer.BeginDoc;
with Printer^ do
try
ScaleX :=GetDeviceCaps( GetDC(Form.Handle), logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps( GetDC(Form.Handle), logPixelsY div PixelsPerInch);

BitBlt( Canvas.Handle,
0,0,
Round(Form.ClientWidth*ScaleX),
Round(Form.ClientHeight*ScaleY),
( Form.Handle) [6]

как вариант:
DC := GetDC(0);
PixelsPerInch := GetDeviceCaps(DC, LOGPIXELSY);
ReleaseDC(0, DC);

Printer.BeginDoc;
with Printer^ do
try
ScaleX :=GetDeviceCaps( GetDC(Form.Handle), logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps( GetDC(Form.Handle), logPixelsY div PixelsPerInch);

BitBlt( Canvas.Handle,
0,0,
Round(Form.ClientWidth*ScaleX),
Round(Form.ClientHeight*ScaleY),
GetDC(Form.Handle),
0, 0, SRCCopy);

finally
EndDoc;
end;

LOGPIXELSY описан в Windows.pas


Кладов   (2003-06-02 20:27:00) [3]

Рекомендую попробовать через KOLReport - должно печататься на любых принтерах. Размер... Будет очень похож на физические размеры того, что на экране. Или можете посмотреть, как там в коде масштабирование делается.


dataMaster   (2003-06-02 18:35:00) [4]

>что то в этом духе..
"Дух" заработал, скажем так... :-)

Но вот снова проблема... Как отмасштабировать рисунок, что бы при печати он занимал всю ширину листа?

В факах нашел следующее:
ScaleX :=GetDeviceCaps(Handle, logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps(Handle, logPixelsY div PixelsPerInch);

Хотел применить так:

Printer.BeginDoc;
with Printer^ do
try
ScaleX :=GetDeviceCaps( GetDC(Form.Handle), logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps( GetDC(Form.Handle), logPixelsY div PixelsPerInch);

BitBlt( Canvas.Handle,
0,
0,
Round(Form.ClientWidth*ScaleX),
Round(Form.ClientHeight*ScaleY),
( Form.Handle) [4]

>что то в этом духе..
"Дух" заработал, скажем так... :-)

Но вот снова проблема... Как отмасштабировать рисунок, что бы при печати он занимал всю ширину листа?

В факах нашел следующее:
ScaleX :=GetDeviceCaps(Handle, logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps(Handle, logPixelsY div PixelsPerInch);

Хотел применить так:

Printer.BeginDoc;
with Printer^ do
try
ScaleX :=GetDeviceCaps( GetDC(Form.Handle), logPixelsX div PixelsPerInch);
ScaleY :=GetDeviceCaps( GetDC(Form.Handle), logPixelsY div PixelsPerInch);

BitBlt( Canvas.Handle,
0,
0,
Round(Form.ClientWidth*ScaleX),
Round(Form.ClientHeight*ScaleY),
GetDC(Form.Handle),
0,
0,
SRCCopy);

finally
EndDoc;
end;

Но, как оказалось, PixelPerInch в KOL"е нет... Вообщем, не знаю что делать... :-(


savva   (2003-06-02 17:18:00) [5]

все так.. и получаешь ты все так как надо - прямоугльник..
я не думаю что автор модуля, который Вы подключили, ушел далеко от общепринятых названий, и посему хелп на DrawFocusRect гласит The DrawFocusRect function draws a rectangle in the style used to indicate that the rectangle has the focus.

с использованием того модуля Ваш пример упрощается:

Printer.BeginDoc;
with Printer^ do
try
( Canvas.Handle, 0, 0, Form.ClientWidth, Form.ClientHeight, GetDC(Form.Handle) [3]

все так.. и получаешь ты все так как надо - прямоугльник..
я не думаю что автор модуля, который Вы подключили, ушел далеко от общепринятых названий, и посему хелп на DrawFocusRect гласит The DrawFocusRect function draws a rectangle in the style used to indicate that the rectangle has the focus.

с использованием того модуля Ваш пример упрощается:

Printer.BeginDoc;
with Printer^ do
try
BitBlt(Canvas.Handle, 0, 0, Form.ClientWidth, Form.ClientHeight, GetDC(Form.Handle), 0, 0, SRCCopy);
finally
EndDoc;
end;


что то в этом духе..


dataMaster   (2003-06-02 16:46:00) [6]

Переделал. Потом подключил модуль MHKOLPrinters. Далее пишу:

Printer.BeginDoc;
with Printer^ do
try
R := bmp.Canvas.ClipRect;
Canvas.DrawFocusRect(R);
finally
EndDoc;
end;

В результате при печати на выходе получается пустой обрамленный прямоугольник. Что я делаю не так?


savva   (2003-06-02 13:22:00) [7]

направление: вставляем в буфер обмена


var
bmp : PBitmap;
begin
bmp := NewDIBBitmap(Form.ClientWidth,Form.ClientHeight,pf32bit);
BitBlt(bmp.Canvas.Handle, 0, 0, Form.ClientWidth, Form.ClientHeight,
( Applet.Handle) [1]

направление: вставляем в буфер обмена


var
bmp : PBitmap;
begin
bmp := NewDIBBitmap(Form.ClientWidth,Form.ClientHeight,pf32bit);
BitBlt(bmp.Canvas.Handle, 0, 0, Form.ClientWidth, Form.ClientHeight,
GetDC(Applet.Handle), 0, 0, SRCCopy);
bmp.CopyToClipboard;
Free_And_Nil(bmp);
end;

переделай для себя


Наверх

Титульная страница Поиск, карта сайта Написать письмо