pascalabcnet/PABCNetHelp/PABCUnits/ABCObjects/FastABCDraw.html

40 lines
2.8 KiB
HTML
Raw Permalink Normal View History

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1>Ускорение перерисовки графических объектов</H1>
<p>Для обеспечения быстрой перерисовки используется следующий прием: в начале
программы вызывается <code>LockDrawingObjects</code>, а при необходимости перерисовать
весь экран специальная процедура <code>RedrawObjects</code>. Отключается режим вызовом <code>UnLockDrawingObjects</code>.
</p>
<p>При наличии большого количества объектов, каждый из которых движется, такой
прием может ощутимо ускорить анимацию. Причина здесь кроется в следующем: по
умолчанию при каждом движении объекта он перерисовывается в своем
прямоугольнике, при этом в этом прямоугольнике перерисовываются все объекты.
Если в графическом окне 100 объектов, и каждый из них переместился, то
происходит 100*100=10000 перерисовок объектов. После вызова <code>LockDrawingObjects</code>
перерисовки не происходит, а в результате вызова <code>RedrawObjects</code>
каждый объект прорисовывается только один раз, то есть происходит всего 100
перерисовок объектов.</p>
<p>Следует обратить внимание, что в модуле <code>GraphABC</code>
имеются родственные процедуры <code>LockDrawing</code>,
<code>UnLockDrawing</code>, &nbsp;и
<code>Redraw</code>. Однако, они отвечают за <i>
растровую перерисовку без мерцания</i>, в то время как процедуры <code>LockDrawingObjects</code>,
<code>UnLockDrawingObjects</code>, &nbsp;и <code>RedrawObjects</code>
отвечают только за <i>ускорение перерисовки векторной графики</i>
<code>ABCObjects</code> (отсутствие мерцания векторных объектов
при их изменении обеспечивается автоматически).
</p>
<p>&nbsp;</p>
</body>
</html>