![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Размеры [D5, Win2k]
Navi © (2004-07-03 17:01:00)03.07.04.
Уважаемые мастера!
Рисую на экране лист А4(210х297). В пикселах это должно быть = (794х1123). Считал так: X=Round((210 / 25.4) * Screen.PixelsPerInch),
Y=Round((297 / 25.4) * Screen.PixelsPerInch).
Но если поставить
SetMapMode(Canvas.Handle, MM_LOMETRIC) и нарисовать прямоугольник
Canvas.Rectangle(0, 0, 2100, 2970), то его размеры в пикселах = (670х953).
Почему?
PS. Расчет по формулам на MSDN:
Dx = ((Lx - WOx) * VEx / WEx) + VOx
Lx = ((Dx - VOx) * WEx / VEx) + WOx
не совпадает ни с (794х1123) ни с (670х953).
Бином Ньютоныч (2004-07-04 18:58:00) [1]
type
TScaleFactors = record
X, Y: Double;
end;
procedure GetScaleFactors(DC: HDC; out Factors: TScaleFactors);
var
A, B: integer;
begin
A:=GetDeviceCaps(DC, HORZSIZE);
B:=GetDeviceCaps(DC, HORZRES);
Factors.X:=B/A;
A:=GetDeviceCaps(DC, VERTSIZE);
B:=GetDeviceCaps(DC, VERTRES);
Factors.Y:=B/A;
end;
function MmToPixV(Value: Double; const Factors: TScaleFactors): integer;
begin
Result:=Round(Value * Factors.Y);
end;
function PixToMmV(Value: integer; const Factors: TScaleFactors): Double;
begin
Result:=Value / Factors.Y;
end;
function MmToPixH(Value: Double; const Factors: TScaleFactors): integer;
begin
Result:=Round(Value * Factors.X);
end;
function PixToMmH(Value: integer; const Factors: TScaleFactors): Double;
begin
Result:=Value / Factors.X;
end;
Navi (2004-07-04 12:09:00) [2]Никто не знает ?