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

Вниз

Печать канвы имеджа.   Найти похожие ветки 

 
Пушистый зайчик   (2007-03-29 14:39) [0]

Написал программу, которая строит графики в канве имеджа. Скачал из интернета две процедуры, которые позволяют распечатать содержимое image. На бумаге график расположен в верху листа во всю ширину, получается, что он занимает всего 1/4 высоты листа А4. Так как с принтером никогда не работал, подскажите как правильно переписать процедуры (приведённые ниже), чтобы ориентация листа была альбомная. Буду благодарен если дадите пару ссылок на хорошую инфу по работе с принтером. Заранее спасибо!

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;


 
Darvin ©   (2007-03-29 16:39) [1]

Есть хороший пример по печати с препросмотром в книге, старой, правда:
Том Сван
Delphi4 "Библия разработчика".
Диалектика 1998


 
Пушистый зайчик   (2007-03-30 17:06) [2]

Проблему решил (с помощью компонентов панели QReport) . Спасибо за поддержку!


 
vl_chel ©   (2007-03-30 17:08) [3]

см классы TPrinter и TCanvas
а также будет полезна функция GetDeviceCaption



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

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.037 c
2-1178280581
Lab
2007-05-04 16:09
2007.05.27
Помогите по ХП в FB


15-1177845504
саунд
2007-04-29 15:18
2007.05.27
квн-саунетдтрек.


6-1163767232
Layner
2006-11-17 15:40
2007.05.27
Как грамотно отключить от IdTCPServer всех IdTCPClient


9-1150668458
@!!ex
2006-06-19 02:07
2007.05.27
размытые текстуры.


2-1178708349
Belorus
2007-05-09 14:59
2007.05.27
TShiftState