![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как распечатать форму?
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;
переделай для себя