Главная страница
    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.007 c
11-1182819162
SPeller_work
2007-06-26 04:52
2008.01.27
Реализация интерфейсов


15-1198151898
Cj
2007-12-20 14:58
2008.01.27
System Volume Information - Ring3 access


15-1198078227
Свой
2007-12-19 18:30
2008.01.27
Помогите с настройками delphi 2005 и IIS и asp.net


15-1198058066
Kerk
2007-12-19 12:54
2008.01.27
К проблеме ИИ


2-1198665877
Flood_control
2007-12-26 13:44
2008.01.27
Сохранение в ini содержимого ListBox





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский