Вниз
Скачать: 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.022 c
14-1085730727
ORMADA
2004-05-28 11:52
2004.06.13
Чем енто можно качнуть ?


1-1085826961
Alek
2004-05-29 14:36
2004.06.13
Как расшифровать строку?


3-1085032891
Alex_x
2004-05-20 10:01
2004.06.13
технология доступа в MIDAS?


14-1085659720
Вячеслав
2004-05-27 16:08
2004.06.13
Delphi+Autocad


3-1084366877
Desdechado
2004-05-12 17:01
2004.06.13
странное поведение связки SQLQuery-DatasetProvider-ClientDataset




   Наверх