Форум: "Основная";
Текущий архив: 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