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

Вниз

Delphi 7. Почему Image1.Canvas не печатается?   Найти похожие ветки 

 
CheCoder ©   (2011-12-11 23:09) [0]

То есть, код на компе с Windows 7 (разрешение экрана 1366*768) выполняется как надо, а на компе с Windows XP (разрешение экрана 1024*768) принтер выдает чистый лист. Принтер в обоих случаях используется один и тот же.

uses Printers;

***********

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.TextOut(10,10,"ПРОВЕРКА");
end;

procedure TForm1.Button1Click(Sender: TObject);
 var
   ScaleX, ScaleY: Integer;
   R: TRect;
 begin
   Printer.BeginDoc;
   with Printer do
     try
       ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
       ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
       R := Rect(0, 0, Image1.Picture.Width * ScaleX,
       Image1.Picture.Height * ScaleY);
       Canvas.StretchDraw(R, Image1.Picture.Graphic);
     finally
       EndDoc;
     end;
 end;
end.


 
Омлет ©   (2011-12-12 08:23) [1]

Какие размеры у R получаются?


 
CheCoder ©   (2011-12-12 09:11) [2]

Только начинаю со всем этим разбираться, так что постараюсь в меру своего понимания. LogPixelsX=600, LogPixelsX=600, что такое PixelsPerInch, в данном контексте, не могу пока сообразить (был бы благодарен за подсказку). А размеры Image 150*150.


 
И. Павел ©   (2011-12-12 09:20) [3]

> что такое PixelsPerInch, в данном контексте, не могу пока
> сообразить (был бы благодарен за подсказку).

Это TForm.PixelsPerInch — свойство формы.


 
Сергей М. ©   (2011-12-12 09:22) [4]


> LogPixelsX=600, LogPixelsX=600


Это с какого же перепугу ?


 
Омлет ©   (2011-12-12 09:30) [5]

procedure TForm1.Button1Click(Sender: TObject);
var
 ScaleX, ScaleY: Integer;
 R: TRect;
begin
 with Printer do
 begin
   BeginDoc;
   try
     ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
     ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
     ShowMessage(format("%d, %d", [Image1.Picture.Width * ScaleX, Image1.Picture.Height * ScaleY]));
   finally
    EndDoc;
   end;
 end;
end;


Что выводит?


 
И. Павел ©   (2011-12-12 09:31) [6]

GetDeviceCaps(Handle, logPixelsX)
попробуйте заменить на
GetDeviceCaps(Canvas.Handle, logPixelsX)


 
CheCoder ©   (2011-12-12 16:39) [7]


> Что выводит?

870,918


 
CheCoder ©   (2011-12-12 16:40) [8]


> > LogPixelsX=600, LogPixelsX=600 Это с какого же перепугу
> ?

LogPixelsX=600, LogPixelsY=600


 
Сергей М. ©   (2011-12-12 16:45) [9]


> CheCoder ©   (12.12.11 16:40) [8]


И где написано что именно 600 ?
Нигде не написано. Значит это отсебячина.


 
CheCoder ©   (2011-12-12 16:57) [10]


> > Что выводит?870,918

Пардон, при размере Image 150*150 сообщение выводит 900,900


 
CheCoder ©   (2011-12-12 17:02) [11]


> И где написано что именно 600 ?Нигде не написано. Значит
> это отсебячина.

При выполнении длинного, скопипащенного кода выдаются "Свойства принтера и страницы", где, среди всего прочего, написано LogPixelsX=600, LogPixelsY=600


 
И. Павел ©   (2011-12-12 18:11) [12]


> CheCoder ©   (12.12.11 17:02) [11]

Вы [6] попробовали?


 
И. Павел ©   (2011-12-12 18:15) [13]


> И. Павел ©   (12.12.11 18:11) [12]

Хотя нет, похоже это одно и то же...


 
CheCoder ©   (2011-12-12 18:19) [14]


> Вы [6] попробовали?

Изменений никаких. По крайней мере внешне...


 
И. Павел ©   (2011-12-12 18:23) [15]


> Canvas.StretchDraw(R, Image1.Picture.Graphic);

Где-то читал, что у некоторых принтеров могут возникнуть проблемы с копированием на их канву изображений с другой канвы (где не помню, но что читал - точно помню :). Может быть, дело в этом? попробуйте вывести вместо изображения rectangle тех же размеров (870,918), для пробы.


 
И. Павел ©   (2011-12-12 18:30) [16]

Вот похожий случай:
http://www.delphifaq.com/faq/f729.shtml
попробуйте использовать WinAPI-шную StretchDraw непосредственно.


 
И. Павел ©   (2011-12-12 18:39) [17]

Точнее вот - самый последний параграф из [16]:

> To print a bitmap reliable you have to convert it to a device-
> independent bitmap and print is using Windows API function
> StretchDIBits(). Look at the document Printing a TForm how
> to use StretchDIBits().


Вот пример:

var
 Info      : PBitmapInfo;
 InfoSize  : DWORD;
 Image     : Pointer;
 ImageSize : DWORD;
 Bits      : HBITMAP;
begin
    Bits := bmp.Handle;  // bmp is passed as a parameter
    GetDIBSizes(Bits, InfoSize, ImageSize);
    Info := AllocMem(InfoSize);
    try
      Image := AllocMem(ImageSize);
      try
        GetDIB(Bits, 0, Info^, Image^);
         
        StretchDIBits(Printer.Canvas.Handle,
            5, 30, Bmp.Width, bmp.Height,
            0,  0, bmp.Width, bmp.Height,
            Image, Info^, DIB_RGB_COLORS, SRCCOPY);
         
      finally
        FreeMem(Image, ImageSize);
      end;
    finally
      FreeMem(Info, InfoSize);
    end;
end;


 
Сергей М. ©   (2011-12-12 20:41) [18]


> CheCoder ©   (12.12.11 17:02) [11]



> При выполнении длинного, скопипащенного кода


Т.е. чтение и штудирование штатной док-ции производителя той ОС, для которой ты пишешь программу, ты не приемлешь в принципе, так ? Эта док-ция писана для Пушкина, правильно ?


 
CheCoder ©   (2011-12-12 23:54) [19]


> Т.е. чтение и штудирование штатной док-ции производителя
> той ОС, для которой ты пишешь программу, ты не приемлешь
> в принципе, так ? Эта док-ция писана для Пушкина, правильно
> ?

Сергей М. - троль!



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

Форум: "Начинающим";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
2-1323765953
_qwerty_
2011-12-13 12:45
2012.04.01
узнать значение автоинкрементного поля


15-1322598602
Юрий
2011-11-30 00:30
2012.04.01
С днем рождения ! 30 ноября 2011 среда


1-1289586492
shebe91
2010-11-12 21:28
2012.04.01
Все возможные замены символов в пароле:


15-1322992097
мамон
2011-12-04 13:48
2012.04.01
Каталогом товаров со штрих кодми


15-1322801637
NkzAlex
2011-12-02 08:53
2012.04.01
Новое слово в ИТ?:





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