Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.033 c
4-1083753623
faith
2004-05-05 14:40
2004.06.13
Не работает перехват сообщения


14-1085337667
Thor
2004-05-23 22:41
2004.06.13
как игра называется?


14-1085200106
Юрий Зотов
2004-05-22 08:28
2004.06.13
Аж целых два публичных объявления :о)


14-1085537546
Думкин
2004-05-26 06:12
2004.06.13
С днем рождения! 26 мая


1-1086058746
вано
2004-06-01 06:59
2004.06.13
аналог delay





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский