Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];
ВнизПечать текста в определенных местах листа Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.025 c