
16.06.2014, 21:44
|
Новичок
|
|
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
|
|
Тему продолжу. Помогите пожалуйста.
Теперь мне нужно этот битмап вывести на принтер. Картинка создается но на принтер не вылазит - печатает пустую. Вот код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
Bm:TBitmap;
X1,X2,Y1,Y2,w,h:Integer;
PrintDlg:TPrintDialog;
hWinDC:THandle;
Image1: TImage;
begin
Image1:=TImage.Create(self);
w:=Self.Width;
h:=Self.Height;
Self.Width:=1285; // чтоб все элементы поместились на страницу независимо от разрешения экрана.
Self.Height:=935;
Bm:=TBitmap.Create;
Bm.Width:=Self.Width-5;
Bm.Height:=Self.Height-30;
//hWinDC:=GetWindowDC(Self.Handle);
hWinDC:=GetDC(Self.Handle);
//BitBlt(Bm.Canvas.Handle,0,0,Bm.Width, Bm.Height, hWinDC,0,0,SRCCOPY);
Self.PaintTo(Bm.Canvas,0,0);
ReleaseDC(Self.Handle,hWinDC);
Self.Width:=w;
Self.Height:=h;
// Clipboard.Assign(Bm);
Image1.Picture.Bitmap.Assign(Bm);
Clipboard.Assign(Image1.Picture); /// картинка в буфере есть!!!
// значит до этого все ОК, но потом....
// Создаю и отображаю на экране стандартное окно печати
PrintDlg:=TPrintDialog.Create(Self);
if PrintDlg.Execute then
begin
// Начинаю новый документ
Printer.Orientation:=poLandScape; // делаю книжную ориентацию
Printer.BeginDoc;
Printer.Canvas.Refresh;
//Рассчитываю размеры изображения
X1:=0;
Y1:=0;
X2:=round(Printer.PageWidth);
Y2:=round(Printer.PageHeight);
//Вывод изображения на печать
// сначала пробовал так
with Image1.Picture do
Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Bitmap.Canvas,Rect(0,0,Width,Height));
// потом так c bitmap
//Printer.Canvas.CopyRect(Rect(X1,Y1,X2,Y2),Bm.Canvas,Rect(0,0,Bm.Width,Bm.Height));
// думал может надо с StretchDraw
//Printer.Canvas.StretchDraw(Rect(X1,Y1,X2,Y2), Image1.Picture.Graphic);
// но все равно печатает пустую страницу
Printer.EndDoc;
end;
//Уничтожаю созданное окно печати
Bm.Free;
PrintDlg.Free;
end;
|