![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Всем привет! 
		
	
		
		
		
		
		
	
		
		
	
	
	Возникла проблема при печати скриншота на принтере. Вот исходник: Код: 
	program Project1;
uses
   Windows, Graphics, Forms, Printers, Types;
{$R *.res}
var
  PRect: Trect;
  PBitMap: TBitmap;
  DC: HDC;
  Canva:Tcanvas;
  Buffer: array[0..1023] of Char;
  tmp: String;
begin
  try
    Canva := TCanvas.Create;
    PBitmap := TBitMap.Create;
    DC := GetDC(0);
    Canva.Handle := DC;
    with Screen do
    begin
      PBitmap.Width := Width;
      PBitmap.Height := Height;
      PBitmap.Canvas.CopyRect(Rect(0,0, Width, Height), Canva, Rect(0, 0, Width, Height));
      SetString(tmp, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
      PBitmap.SaveToFile(tmp+'tmp294u2.bmp');
    end;
      Pbitmap.LoadFromFile(tmp+'tmp294u2.bmp');
    with PRect do
    begin
      left := 0;
      top := 0;
      right := Printer.PageWidth;
      Bottom := Printer.PageHeight;
    end;
      printer.BeginDoc;
      printer.Canvas.StretchDraw(Prect, Pbitmap);
      printer.EndDoc;
  finally
    ReleaseDC(0, DC);
    PBitmap.Free;
    Canva.Free;
    end;
end.Проблема в том, что после получения экрана в PBitmap, я не хочу его сохранять в файл, а хочу сразу выводить на принтер. Но если его не сохранять, то печатается чистый лист. Если сохранить, а потом тут же загрузить, всё печатается нормально. Я думаю, что во время загрузки файла, в PBitmap, подставляются какие то параметры, которые необходимы для печати. Только не могу понять какие. Ктонибудь сталкивался с этой проблемой?  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Почему нельзя пойти таким путем: 
		
	
		
		
		
		
		
		
			1. Сохранить в файл 2. Вывести на печать 3. Дождаться конца печати 4. Удалить Если я не ошибаюсь, то принтеры прежде чем печатать сохраняют данные где-то на диск и потом печатают (в смысле не печатают сразу из памяти). Поправьте, если я не прав. Последний раз редактировалось ProperDoze, 14.09.2008 в 22:23.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Встречался с такой проблеммой. Дело в том, что для печати нужен DIB, которым обычный битмап не является. Короче, надо этот битмап превратить в DIB, а потом уже печатать. 
		
	
		
		
		
		
		
	
		
		
	
	
	Код в свое время я нашел где-то на борландовской базе знаний.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Ага. А при записи он автоматом конвертируется в DIB? 
		
	
		
		
		
		
		
	
		
		
	
	
	Думаю, что всетаки каких то параметров просто не хватает.  |