Форум: "Основная";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Вниз
вывод содржимого Tcanvc на печать. Найти похожие ветки
← →
алексей с. (2007-02-13 08:20) [0]Здравствуте!
возникла у меня следующая проблема: есть достаточно сложный и грамоздкий алгоритм вывода изображения(линии , круги, ...) на Tcanvs обьекта Timage, мне все это дело теперь надо распечатть. Пошел я таким путем: заминил в коде image1.canvs на printer.canvs , однако это не работает. вопрос подскажите есть ли другие способы печати Tcanvs обьекта Timage. спасибо!
← →
TRUNK © (2007-02-13 09:27) [1]А про Printer.BeginDoc, Printer.EndDoc не забыл?
← →
алексей с. (2007-02-13 09:39) [2]в том то и дело, что нет, относительно этого все было сдела правильно.....
← →
evvcom © (2007-02-13 09:42) [3]> [2] алексей с. (13.02.07 09:39)
> относительно этого все было сдела правильно.....
Судя по твоим "Tcanvs" и "сдела", очень сомневаюсь. Думаю, ты чего-то опять недописал. :)
← →
TRUNK © (2007-02-13 09:44) [4]А поподробнее, что именно происходит? Принтер печатает пустой лист или даже не пытается?
← →
алексей с. (2007-02-13 09:51) [5]:)
там алгоритм сложный... и на одном из его участков появляется ошибка, принтер выводит беспорядочныйи набор символов, а должен графику. (я просто с сотового, поэтому и ошибок много :)
)
← →
алексей с. (2007-02-13 09:54) [6]а вообще есть ли другой спослб печати, не через обьект Tprinter
← →
TRUNK © (2007-02-13 10:02) [7]
> алексей с. (13.02.07 09:51) [5]
принтер выводит беспорядочныйи набор символов
А координаты промасштабировать не забыл?
> алексей с. (13.02.07 09:54) [6]
а вообще есть ли другой спослб печати, не через обьект Tprinter
Есть. Например, использовать CreateDC, BitBlt.
← →
алексей с. (2007-02-13 10:09) [8]вот кстати координаты я не масштабировал, думал потумолчанию все проставлено, спасибо, домой приду - попробую...
← →
RASkov (2007-02-13 10:16) [9]> [8] алексей с. (13.02.07 10:09)
http://delphimaster.net/view/2-1171016071/
Посмотри последний мой пост, может поможет...
← →
алексей с. (2007-02-13 10:26) [10]спасибо.
← →
Алексей С. (2007-02-13 22:59) [11]Всем спасибо, решил проблему следующим образом (надыбал код с заморского сайта)
Первая процедура - масштабирует и рисует на канве.
Вторая выводит на печать
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
Header, Bits: Pointer;
HeaderSize: DWORD;
BitsSize: DWORD;
begin
GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
Header := AllocMem(HeaderSize);
Bits := AllocMem(BitsSize);
try
GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
DestRect.Right, DestRect.Bottom,
0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
DIB_RGB_COLORS, SRCCOPY);
finally
FreeMem(Header, HeaderSize);
FreeMem(Bits, BitsSize);
end;
end;
procedure PrintImage(Image: TImage; ZoomPercent: Integer);
// if ZoomPercent=100, Image will be printed across the whole page
var
relHeight, relWidth: integer;
begin
Screen.Cursor := crHourglass;
Printer.BeginDoc;
with Image.Picture.Bitmap do
begin
if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then
begin
// Stretch Bitmap to width of PrinterPage
relWidth := Printer.PageWidth;
relHeight := MulDiv(Height, Printer.PageWidth, Width);
end
else
begin
// Stretch Bitmap to height of PrinterPage
relWidth := MulDiv(Width, Printer.PageHeight, Height);
relHeight := Printer.PageHeight;
end;
relWidth := Round(relWidth * ZoomPercent / 100);
relHeight := Round(relHeight * ZoomPercent / 100);
DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap);
end;
Printer.EndDoc;
Screen.cursor := crDefault;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c