Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
Пушистый зайчик   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.048 c
15-1177501113
UMU
2007-04-25 15:38
2007.05.27
Asus LightScribe


4-1166812769
O.O
2006-12-22 21:39
2007.05.27
Количество точек на дюйм экрана


2-1178279969
Бульбаш
2007-05-04 15:59
2007.05.27
Ошибка при запуске exe-шника.


15-1177314606
cj
2007-04-23 11:50
2007.05.27
NTFS-DOS


4-1166908044
Drone
2006-12-24 00:07
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский