Главная страница
    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.45 MB
Время: 0.049 c
3-1173781864
Дмитрий А.
2007-03-13 13:31
2007.05.27
Как через ADO из Delphi создать столбец в таблице Access?


3-1173266545
__DATA__
2007-03-07 14:22
2007.05.27
Refresh в компоненте IbDataSet не работает


2-1178784311
Rolf
2007-05-10 12:05
2007.05.27
Диалог выбора директории.


2-1178535791
DelphiLexx
2007-05-07 15:03
2007.05.27
ShowModal и Enabled


15-1177586221
*Pavel
2007-04-26 15:17
2007.05.27
ПО для видео сервера





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