Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
555ААА555   (2004-03-22 20:12) [0]

Вопрос таков:
Есть задание для печати
нужно вывести на печать некую строку
на принтере: Printer.Canvas.TextOut(X, Y,"Строка");
Чтобы строка была 57 мм сверху и 72 мм слева от
верхнего левого угла листа.
57 мм и 72 мм могут конечно же менятся.
Как расчитывать X,Y? т.е. переводить
миллеметры в пикселы.


 
KSergey ©   (2004-03-22 21:06) [1]

см. SetMapMode


 
dmk ©   (2004-03-22 21:33) [2]

mm := PixelWidth / PrinterResolution * 25.4;
px := PhysWidthMM * PrinterResolution / 25.4;


 
dmk ©   (2004-03-22 21:50) [3]

Плюс еще надо учесть технические поля принтера.


 
555ААА555   (2004-03-22 21:59) [4]

Спасибо!
Будем пробовать.

(mm := PixelWidth / PrinterResolution * 25.4; //???? mm - миллиметры?
px := PhysWidthMM * PrinterResolution / 25.4; //????
- прокомментировать можно?).


 
555ААА555   (2004-03-22 23:11) [5]

dmk,
Извеняюсь, можно поподробнее?


 
XYMM   (2004-03-22 23:22) [6]

PixelWidth - ???????????
PhysWidthMM - ???????????


 
dmk ©   (2004-03-22 23:43) [7]

Размер в милиметрах := (Дистанция(размер) в пикселах) /
(Разрешение принтера в точках на дюйм) * Дюйм(25.4 мм)
(mm := PixelWidth / PrinterResolution * 25.4;)

Размер в пикселях := (Физические размеры в мм) *
(Разрешение принтера в точках на дюйм) / Дюйм(25.4 мм);
(px := PhysWidthMM * PrinterResolution / 25.4;)


 
555ААА555   (2004-03-23 00:39) [8]

Как программно узнать/установить разрешение
принтера в точках на дюйм?


 
dmk ©   (2004-03-23 01:29) [9]

Type LPrinterInfo = record
    PrinterName:               PChar; //Íàçâàíèå ïðèíòåðà
    PortName:                  PChar; //Íàçâàíèå ïîðòà
    px_PhysWidth:              Integer; //Øèðèíà ñòðàíèöû â ïèêñåëàõ
    px_PhysHeight:             Integer; //Âûñîòà ñòðàíèöû â ïèêñåëàõ
    mm_PhysWidth:              Extended; //Øèðèíà ñòðàíèöû â ìì.
    mm_PhysHeight:             Extended; //Âûñîòà ñòðàíèöû â ìì.
    px_PaWidth:                Integer; //Øèðèíà ïå÷àòíîãî ïîëÿ â ïèêñåëàõ.
    px_PaHeight:               Integer; //Âûñîòà ïå÷àòíîãî ïîëÿ â ïèêñåëàõ.
    mm_PaWidth:                Extended; //Øèðèíà ïå÷àòíîãî ïîëÿ â ìì.
    mm_PaHeight:               Extended; //Âûñîòà ïå÷àòíîãî ïîëÿ â ìì.
    px_PhysOffsetX:            Integer; //Ñìåùåíèå ãðàíèöû ïå÷àòíîãî ïîëÿ
    px_PhysOffsetY:            Integer; //Ñìåùåíèå ãðàíèöû ïå÷àòíîãî ïîëÿ
    ColorDepth:                Integer; //Ãëóáèíà öâåòà ïðèíòåðà
    Resolution:                Integer; //Ðàçðåøåíèå ïðèíòåðà
    DevMode:                   TDeviceMode; //Òåêóùèå íàñòðîéêè ñòðàíèöû
    end;

Function TWinPrinter.GetWinPrinterInfo:LPrinterInfo;
var
 PrinterDC: HDC;

begin
 //Î÷èñòèì ñòðóêòóðó
 FillChar(Result, SizeOf(LPrinterInfo), 0);

 //Ñîçäàäèì êîíòåêñò ïðèíòåðà
 PrinterDC := CreateIC(nil, PChar(FPrnName), nil, PDeviceModeA(@FDevMode^));

 With Result do
   begin
     //Íàçâàíèå óñòðîéñòâà
     PrinterName       := PChar(FPrnName);

     //Íàçâàíèå ïîðòà
     PortName          := PChar(FPortName);

     //Ðàçðåøåíèå ïðèíòåðà
     Resolution        := FDevMode.dmPrintQuality;

     //Ëîãè÷åñêèå ðàçìåðû áóìàãè â ïèêñåëàõ
     px_PhysWidth      := GetDeviceCaps(PrinterDC, PHYSICALWIDTH);
     px_PhysHeight     := GetDeviceCaps(PrinterDC, PHYSICALHEIGHT);

     //Ôèçè÷åñêèå ðàçìåðû áóìàãè â ìì.
     mm_PhysWidth      := GetSizeInMM(px_PhysWidth, Resolution);
     mm_PhysHeight     := GetSizeInMM(px_PhysHeight, Resolution);

     //Ëîãè÷åñêèå ðàçìåðû ïå÷àòíîãî ïîëÿ â ïèêñåëàõ
     px_PaWidth        := GetDeviceCaps(PrinterDC, HORZRES);
     px_PaHeight       := GetDeviceCaps(PrinterDC, VERTRES);

     //Ôèçè÷åñêèå ðàçìåðû ïå÷àòíîãî ïîëÿ â ìì.
     mm_PaWidth        := GetSizeInMM(px_PaWidth, Resolution);
     mm_PaHeight       := GetSizeInMM(px_PaHeight, Resolution);

     //Ñìåùåíèå ëåâîãî âåðõíåãî êðàÿ êîíòåêñòà ïðèíòåðà
     //îò êðàÿ áóìàãè
     px_PhysOffsetX    := GetDeviceCaps(PrinterDC, PHYSICALOFFSETX);
     px_PhysOffsetY    := GetDeviceCaps(PrinterDC, PHYSICALOFFSETY);

     //Ãëóáèíà öâåòà èñïîëüçóåìàÿ äëÿ ïå÷àòè
     ColorDepth        := GetDeviceCaps(PrinterDC, BITSPIXEL);

     //DevMode ñòðóêòóðà
     DevMode           := FDevMode^;
   end;//With

 TechnologyStr(PrinterDC, FTechStr);

 //Óäàëèì êîíòåêñò
 Windows.DeleteDC(PrinterDC);
end;

SetPrinter - для установки данных


 
Broot   (2004-03-23 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);


 
555ААА555   (2004-03-23 21:06) [11]

Broot СПАСИБО!



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

Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.046 c
1-1082555935
ser_ega
2004-04-21 17:58
2004.04.11
Stringgrid


1-1082723175
hair_fly
2004-04-23 16:26
2004.04.11
Вызов Pop-Up уменьшает загрузку процессора ???


3-1079091020
gedd
2004-03-12 14:30
2004.04.11
Borland Data Provider для Delphi 8


14-1079221527
ИМХО
2004-03-14 02:45
2004.04.11
Что это за кодировка?


1-1082959287
Alexander
2004-04-26 10:01
2004.04.11
Динамическое создание меню: возникла необходимость создания меню





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский