Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
8-53656
Romio
2003-10-09 22:31
2004.02.17
Увеличение картинки


14-53693
Goida
2004-01-29 14:27
2004.02.17
Как стать мастером?


1-53537
Denis
2004-02-05 11:55
2004.02.17
Что быстрее - с процедурами или без них?


1-53475
korvet
2004-02-06 10:53
2004.02.17
D3 не принимает команду при компиляции


4-53807
Thick
2003-12-12 13:38
2004.02.17
Не могу выключить прогу