Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.13;
Скачать: 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 вся ветка

Текущий архив: 2004.06.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1085934812
Ruslan
2004-05-30 20:33
2004.06.13
Насчет работы с датами. Надо вычислять количество пройденных


3-1085041421
iddqd
2004-05-20 12:23
2004.06.13
Тормоза с Sybase


3-1085144384
levova
2004-05-21 16:59
2004.06.13
Выполнение запроса из програмы (FireBird)


9-1076316483
MRB
2004-02-09 11:48
2004.06.13
ОpenGl и туман


14-1085556552
BiN
2004-05-26 11:29
2004.06.13
Доступ в интрнет с необитаемого острова