![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как задать толщину линии TPen.Width равную 1 мм?
Д С © (2008-09-21 19:20:00)По идее нужно 1 мм умножить <количество точек/мм>. А какое <количество точек/мм> использовать: то, что по-горизонтали или то, что по-вертикали?
Д С (2008-09-21 22:11:00) [21]{RASkov} © (21.09.08 22:09) [10]
Вот в этом и вопрос собственно: Что использовать GetDeviceCaps(DC, LOGPIXELSX) или GetDeviceCaps(DC, LOGPIXELSY) ?
{RASkov} (2008-09-21 22:09:00) [22]> [9] Д С (21.09.08 21:49)
> Но у меня у самого уже много логики завязано на точках и
> преобразовании вручную
См GetDeviceCaps
ну и пример:
function MmToPixX(DC: HDC; const Xmm: Extended): Integer;
begin
Result := Round(Xmm / 25.4 * GetDeviceCaps(DC, LOGPIXELSX));
end;
Д С (2008-09-21 21:49:00) [23]
> guav © (21.09.08 21:39) [8]
Это конечно хорошо, что я это узнал сейчас. Но у меня у самого уже много логики завязано на точках и преобразовании вручную.
guav (2008-09-21 21:39:00) [24]Преобразования координат через функции SetMapMode, SetViewportExtEx, и т.д. применяются ко всему - и к толщине Pen и к координатам. Эти преобразования также могут менять направление осей и положение начала координат, так при SetMapMode(Canvas.Handle, MM_LOMETRIC) ось Y смотрит в другую сторону.
SetMapMode(Canvas.Handle, MM_LOMETRIC);
Canvas.Pen.Width := 10; // 1 мм.
http://msdn.microsoft.com/en-us/library/ms532673(VS.85).aspx
Anatoly Podgoretsky (2008-09-21 20:22:00) [25]
> Как вы себе это представляете?
Зачем же спрашивал про горизонталь/вертикаль.
Д С (2008-09-21 20:08:00) [26]
> guav © (21.09.08 19:44) [5]
вопрос не в том... вопрос в том, что писать в TPen.Width ?
guav (2008-09-21 19:44:00) [27]> [3] Д С (21.09.08 19:33)
На всё она влияет. Могут только быть сюрпризы, связанные с тем, что TCanvas не учитывает это свойство HDC.
> [4] Д С (21.09.08 19:34)
Будет ли пиксель у принтера 600х1200 DPI квадратным ?
Д С (2008-09-21 19:34:00) [28]
> Anatoly Podgoretsky © (21.09.08 19:30) [2]
Как вы себе это представляете?
Д С (2008-09-21 19:33:00) [29]Это интересно.
А функция SetMapMode на что еще влияет?
На координаты в MoveTo, LineTo, Rectangle, ... ?
Anatoly Podgoretsky (2008-09-21 19:30:00) [30]> Д С (21.09.2008 19:20:00) [0]
Оба, поскольку точка может быть не квадратная.
guav (2008-09-21 19:26:00) [31]А разрешение по горизонтали и вертикали может быть разное, есть такие принтеры.
> Как задать толщину линии TPen.Width равную 1 мм?
Достаточно SetMapMode MM_LOMETRIC и задать толщину 10.