Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

вывод содржимого 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
15-1173880561
GeLLeR
2007-03-14 16:56
2007.04.08
Графический эквалайзер


15-1173715498
zdm
2007-03-12 19:04
2007.04.08
TDBF


15-1173784031
Карелин Артем
2007-03-13 14:07
2007.04.08
Отделить Газели пассажирские от других машин. Как?


2-1174337219
Новичёк
2007-03-19 23:46
2007.04.08
Как правильно построить структуру для работы с БД


2-1174048509
Krylov
2007-03-16 15:35
2007.04.08
Как создать свой справочник в формате *.chm