Текущий архив: 2004.02.17;
Скачать: CL | DM;
Вниз
Как распечатать форму? Найти похожие ветки
← →
dataMaster © (2003-06-02 12:57) [0]Всем привет! Не подскажете, как распечатать форму с расположеными на ней контролами? В VCL была команда Print. А тут ее не оказалось.
← →
savva © (2003-06-02 13:22) [1]направление: вставляем в буфер обмена
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;
переделай для себя
← →
dataMaster © (2003-06-02 16:46) [2]Переделал. Потом подключил модуль MHKOLPrinters. Далее пишу:
Printer.BeginDoc;
with Printer^ do
try
R := bmp.Canvas.ClipRect;
Canvas.DrawFocusRect(R);
finally
EndDoc;
end;
В результате при печати на выходе получается пустой обрамленный прямоугольник. Что я делаю не так?
← →
savva © (2003-06-02 17:18) [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
( 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 18:35) [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"е нет... Вообщем, не знаю что делать... :-(
← →
Кладов (2003-06-02 20:27) [5]Рекомендую попробовать через KOLReport - должно печататься на любых принтерах. Размер... Будет очень похож на физические размеры того, что на экране. Или можете посмотреть, как там в коде масштабирование делается.
← →
savva © (2003-06-03 10:26) [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),
( 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
← →
dataMaster © (2003-06-04 12:16) [7]Всем спасибо. Все получилось.
Страницы: 1 вся ветка
Текущий архив: 2004.02.17;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.028 c