Показать сообщение отдельно
  #5  
Старый 16.06.2014, 21:44
aqula aqula вне форума
Новичок
 
Регистрация: 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;
Ответить с цитированием