![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по CenteredRect
vadim83 © (2015-07-07 21:14:00)Пытаюсь читать чужой код в проекте (XE2). Вижу какую-то "глупость" в виде:
procedure CalcMyRect1(var R: TRect);
var rc, R1: TRect;
begin
rc := GetDefaultRect;
R1 := R;
R := CenteredRect(rc, R1);
end;
В другом месте есть такие варианты:
procedure CalcMyRect2(var R: TRect);
var rc, R1: TRect;
begin
rc := GetDefaultRect;
R1 := R;
R := CenteredRect(rc, R1);
end;
Суть в том, что почему-то предыдущий разработчик "побоялся" передать в CenteredRect параметр R напрямую. Есть ли в этом особый смысл? А то мне начинается казаться, что я уже ничего не понимаю в паскале.
Код CenteredRect лежит себе в System.Types и ничего подозрительного не вызывает:
function CenteredRect(const SourceRect: TRect; const CenteredRect: TRect): TRect;
var
Width, Height: Integer;
X, Y: Integer;
begin
Width := RectWidth(CenteredRect);
Height := RectHeight(CenteredRect);
X := (SourceRect.Right + SourceRect.Left) div 2;
Y := (SourceRect.Top + SourceRect.Bottom) div 2;
Result := Rect(X - Width div 2, Y - Height div 2, X + (Width + 1) div 2, Y + (Height + 1) div 2);
end;
Игорь Шевченко (2015-07-07 21:44:00) [1]vadim83 (07.07.15 21:28) [2]
R := CenteredRect (R, GetDefaultRect);
Так проще
> Есть ли в этом особый смысл?
Нет, смысла нету.
vadim83 (2015-07-07 21:28:00) [2]Вторая функция получилась одинаковой с первой, вот она, там просто местами поменяны R1 и rc.
procedure CalcMyRect2(var R: TRect);
var rc, R1: TRect;
begin
rc := GetDefaultRect;
R1 := R;
R := CenteredRect(R1, rc);
end;
Дмитрий С (2015-07-07 21:26:00) [3]Полагаю, что он не смотрел как устроена CenteredRect, и побоялся того, что функция может не ожидать ссылку в одно и то же место в памяти в качестве параметра и возвращаемого результата.