Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Печать


fog ©   (2006-07-29 19:52:00) 

1. Как правильно пересчитать сантиметры в пикселы и наоборот зная dpi принтера?
2. Можно ли использовать ТCanvas для вывода на принтер подставив HDC принтера и как правильно это сделать? (TPrinter годится только для текста)


jb   (2006-07-30 17:57:00) [1]

на http://www.asportal.h16.ruпосмотри, там статья такая есть - "Секреты печати из програм на Delphi" называется.


fog   (2006-07-30 00:42:00) [2]

Sorry, Canvas в TPrinter не заметил.
Но, не совсем понятно, как работает NewLine?
И как выводить графику и делать это нормально?


!_SM_!   (2006-07-30 00:15:00) [3]

Ответ про Canvas дан EvS ©   (29.07.06 23:39)
Добавлю только рисуется обсалютно одинаково что и на....обычный канвас:)
Вот посмотри для пересчета миллиметров в пикселы:
unit Unit2;
interface

uses Windows, Printers;

procedure MMtoPXL_XY(const mmX, mmY: Double; var X, Y: Integer; SzFnt: Boolean=False);
procedure MMtoPXL_XY1(var mmX, mmY: Integer; SzFnt: Boolean=False);
procedure MMtoPXL_XY2(var mmX, mmY, mmX1, mmY1: Integer; SzFnt: Boolean=False);

var PRNLX, PRNLY, PRNPX, PRNPY: Integer;         //Для вычисл принтерных величин

implementation

procedure MMtoPXL_XY(const mmX, mmY: Double; var X, Y: Integer; SzFnt: Boolean=False);
var FSz: Integer;
begin
    FSz:=Printer.Canvas.TextHeight('W');
    X := Round(mmX / 25.4 * PRNLX - PRNPX);
    Y := Round(mmY / 25.4 * PRNLY - PRNPY);
    if SzFnt then Y:=Y-FSz;
end;

procedure MMtoPXL_XY1(var mmX, mmY: Integer; SzFnt: Boolean=False);
var FSz: Integer;
begin
    FSz:=Printer.Canvas.TextHeight('W');
    mmX := Round(mmX / 25.4 * PRNLX - PRNPX);
    mmY := Round(mmY / 25.4 * PRNLY - PRNPY);
    if SzFnt then mmY:=mmY-FSz;
end;

procedure MMtoPXL_XY2(var mmX, mmY, mmX1, mmY1: Integer; SzFnt: Boolean=False);
var FSz: Integer;
begin
    FSz:=Printer.Canvas.TextHeight('W');
    MMtoPXL_XY1(mmX, mmY, SzFnt);
    MMtoPXL_XY1(mmX1, mmY1, SzFnt);
    if SzFnt then begin mmY:=mmY-FSz; mmY1:=mmY1-FSz; end;
end;

Initialization;
with Printer do
 begin
  PRNLX:=GetDeviceCaps(Handle, LOGPIXELSX);
  PRNLY:=GetDeviceCaps(Handle, LOGPIXELSY);
  PRNPX:=GetDeviceCaps(Handle, PHYSICALOFFSETX);
  PRNPY:=GetDeviceCaps(Handle, PHYSICALOFFSETY);
 end;

end.


EvS   (2006-07-29 23:39:00) [4]

>2. Можно ли использовать ТCanvas для вывода на принтер подставив HDC
>принтера и как правильно это сделать? (TPrinter годится только для текста)
Вообще то у TPrinter свойство Canvas имеется.


fog   (2006-07-29 22:14:00) [5]

Жутко остроумно


Anatoly Podgoretsky   (2006-07-29 19:58:00) [6]

Школьная математика, первые три класса. Перевод из одних единиц в другие.


Наверх

Титульная страница Поиск, карта сайта Написать письмо