Вниз
Скачать: CL | DM;

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

← →
rrew   (2004-05-29 18:04) [0]

Мне надо выводить текст в определенных местах листа
я пробовал так:

kofX:=Printer.PageWidth/210; // пиксилей в 1 милиметре
kofY:=Printer.PageHeight/297;
Printer.BeginDoc;
with Printer.Canvas do
 begin
   TextOut(Trunc(14*kofX),Trunc(51*kofY),Edit1.Text);
   TextOut(Trunc(35*kofX),Trunc(51*kofY),Edit2.Text);
   TextOut(Trunc(73*kofX),Trunc(51*kofY),Edit3.Text);
   TextOut(Trunc(85*kofX),Trunc(51*kofY),Edit4.Text);
 end;
Printer.EndDoc;

Но при печати на разных принторах текст здвигается в разные стороны.
Кто знает как можно зделать так чтобы растояние X,Y можно было указовать в милиметрах
и на разных принторах он печатался одинаково?


← →
rrew   (2004-05-31 00:20) [1]

неужеле это так сложно???


← →
Sun bittern ©   (2004-05-31 06:22) [2]

Не проверял и не мое :)

Broot   (23.03.04 03:55) [10]

Фигня это все

пишеш 2 функции перевода мм в пикселы:

function MmToPixX(const mm: double): integer;
begin
Result := Round(mm / 25.4 * kX);
end;

function MmToPixY(const mm: double): integer;
begin
Result := Round(mm / 25.4 * kY);
end;

коэффициенты определяются так:
with Printer do
begin
  kX := GetDeviceCaps(Handle, LOGPIXELSX);
  kY := GetDeviceCaps(Handle, LOGPIXELSY);
  dY := GetDeviceCaps(Handle,PHYSICALOFFSETY);  //смещение от начала страницы
  dX := GetDeviceCaps(Handle,PHYSICALOFFSETX);  //
end;

соответственно если считаешь от угла страницы, то формула преобразуется:
X := Round(mm / 25.4 * kX - dX)
либо, теряя некоторую точность:
X := MmToPixX(mm) - Round(dX);


← →
rrew   (2004-05-31 22:08) [3]

А откуда взялось 25,4, че то я не как догнать не могу


← →
Anatoly Podgoretsky ©   (2004-05-31 22:16) [4]

Вспомни сколько в дюйме миллиметров


← →
rrew   (2004-05-31 22:54) [5]

понял, тут вот че еще нарыл (уже успел опробовать на 2 принтарах)
все ок
тот вариант тоже добавил себе в архив

function X(x:integer):integer;
begin
result:= MmToX(X,GetDeviceCaps(Printer.Handle, HORZRES),GetDeviceCaps(Printer.Handle, HORZSIZE));
end;

function Y(y:integer):integer;
begin
result := MmToY(Y,GetDeviceCaps(Printer.Handle, VERTRES),GetDeviceCaps(Printer.Handle, VERTSIZE)) ;
end;



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
14-1085648635
VID
2004-05-27 13:03
2004.06.13
Вставка документа в страницу Excel


1-1086044926
Dark Man
2004-06-01 03:08
2004.06.13
работа с dll вызов процедур программы из dll


4-1080755212
Def_E
2004-03-31 21:46
2004.06.13
Создание CAB архивов


1-1085734256
evgen
2004-05-28 12:50
2004.06.13
Как запретить редактировать все столбцы DBgrid кроме одного?


14-1085769934
Rouse_
2004-05-28 22:45
2004.06.13
День Пограничника!!!




   Наверх