Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

Проблема с печатью формы   Найти похожие ветки 

 
ggg   (2007-10-23 03:56) [0]

Просто пытаюсь отправить форму на печать. На некоторых компьютерах - всё нормально, а на некоторых - вместо Image/StringGrid/Memo выводятся черные прямоугольники. Причем панели и лаблы выводятся как положено.

const
PrintMargin = 120;
var
 bmp: TBitmap;
 r2: TRect;
begin
if PrintDialog1.Execute then
  begin
     bmp := GetFormImage;
     bmp.Transparent := true;
     bmp.TransparentColor := Color;
     bmp.Height := ClientHeight - pnlBottomMenu.Height - 2;

     r2 := Rect(
      0, 0,
       Printer.PageWidth - PrintMargin * 2,
       Printer.PageHeight - PrintMargin
     );

     r2 := GetCenterScaledSize(r2, bmp.Width, bmp.Height);

   Printer.BeginDoc;
     try
    Printer.Canvas.Brush.Color := clWhite;
       r2.Left := PrintMargin;
       r2.Top := PrintMargin;
       r2.Right := r2.Left + r2.Right;
       r2.Bottom := r2.Top + r2.Bottom;
    Printer.Canvas.StretchDraw(
    r2,
        bmp
      );
     finally
    Printer.EndDoc;
     end;
     bmp.Free;
   end;

Проблема возникла при печати на одном из ч/б принтеров. Причем, если имадж содержит монохромный рисунок, то он выводится нормально, а вот если цветной - прямоугольник.
Хотя если выбрать печатать в файл, а потом этот файл открыть и распечатать - все нормально.
Как исправить?


 
REA   (2007-10-23 10:57) [1]

Не использовать StretchDraw. См. исходники TCustomForm.Print


 
homm ©   (2007-10-23 11:28) [2]

> [0] ggg   (23.10.07 03:56)
> bmp := GetFormImage;

Код GetFormImage в студию.


 
ggg   (2007-10-23 14:21) [3]

> REA [1]
Спс, попробую.

> homm [2]
эм... Forms.pas из состава BDS2006

function TCustomForm.GetFormImage: TBitmap;
var
 Ofs: Integer;
begin
 Result := TBitmap.Create;
 try
   Result.Width := ClientWidth;
   Result.Height := ClientHeight;
   Result.Canvas.Brush := Brush;
   Result.Canvas.FillRect(ClientRect);
   Result.Canvas.Lock;
   try
     if GetWindowLong(Handle, GWL_STYLE) and WS_BORDER <> 0 then
       Ofs := -1  // Don"t draw form border
     else
       Ofs := 0;  // There is no border
     PaintTo(Result.Canvas.Handle, Ofs, Ofs);
   finally
     Result.Canvas.Unlock;
   end;
 except
   Result.Free;
   raise;
 end;
end;


 
homm ©   (2007-10-23 14:27) [4]

> [3] ggg   (23.10.07 14:21)
> эм... Forms.pas из состава BDS2006

А ты проверяешь, без отправки на печать, всегда ли эта функция возвращает верные картинки?


 
ggg   (2007-10-23 17:48) [5]

> homm [4]
Однозначно правильно. При печати в файл форма отображается верно.

Сейчас нет доступа к тому принтеру, не могу проверить решение с Form.Print;


 
homm ©   (2007-10-23 18:04) [6]

> [5] ggg   (23.10.07 17:48)
> Однозначно правильно. При печати в файл форма отображается
> верно.

Ага, а при блитинге на канву принтера, вдруг пропадают именно прамоугольники, где должны быть Image/StringGrid/Memo???
То, что возвращает GetFormImage — это битмэп, на нем уже нет ни Image ни StringGrid ни Memo, все что там есть сплошной набор битов, формирующих изображения, если ошибка не в этой функции, значит либо пропадает все, либо ничего. Но я склонен полагать, что ошибка все-же в ней.


 
ggg   (2007-10-24 15:14) [7]

> homm ©   (23.10.07 18:04) [6]
Боюсь, что нет ))
Проблема действительно решилась использованием кода из TForm.Print, в частности заменой StretchDraw на StretchDIBits.
Спасибо, REA.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
2-1198182166
datorn
2007-12-20 23:22
2008.01.27
WinAPI


15-1198157501
Ins
2007-12-20 16:31
2008.01.27
Delphi Puzzles


2-1198787613
Артем
2007-12-27 23:33
2008.01.27
Приложение, создающее приложение


2-1198663138
trubin
2007-12-26 12:58
2008.01.27
Отличие дисков


15-1198054027
LoDr
2007-12-19 11:47
2008.01.27
зависает firebird server





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский