Шаг 49 - Замораживаем форму

В этом шаге я хочу немного коснуться вопросов оптимизации работы программ связанных с выводом данных на форму. Это особенно актуально, если приходится работать с большим количеством объектов.

Представьте ситуацию, когда на форме несколько десятков объектов, и они по событию меняют свое значение. Чтобы мы не делали, команды в программе выполняются последовательно, поэтому картинка может "перетекать". Как же добиться эффекта одновременности?

Можно заблокировать форму от вывода, изменить требуемые значения и после этого снять блокировку. Тогда все прорисуется почти одновременно. Это может выглядеть примерно так.

Вместо:

m_DocForm.Caption=alltrim(str(nNo))
m_DocForm.Text5r.Value=curdoccur.sum5r
m_DocForm.Text10r.Value=curdoccur.sum10r
m_DocForm.Text50r.Value=curdoccur.sum50r
* так далее
m_DocForm.SumText.Value=curdoccur.totsum
m_DocForm.CurSumText.Value=curdoccur.totsum
m_DocForm.VedNoText.Value=curdoccur.vedno
m_DocForm.VedDateText.Value=curdoccur.veddate
m_DocForm.SymKasText.Value=curdoccur.symkas
m_DocForm.RecountCheck.Value=curdoccur.recount
m_DocForm.KlientCombo.Value=curdoccur.klname

Сделаем:

select curdoccur
with m_DocForm
	.LockScreen = .t.
	.Caption = alltrim(str(nNo))
	.Text5r.Value = sum5r
	.Text10r.Value = sum10r
	.Text50r.Value = sum50r
	* так далее
	.SumText.Value = totsum
	.CurSumText.Value = totsum
	.VedNoText.Value = vedno
	.VedDateText.Value = veddate
	.SymKasText.Value = symkas
	.RecountCheck.Value = recount
	.KlientCombo.Value = klname
	.LockScreen = .f.
endwith

Вот и все, оптимизация налицо.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Клементьев В.А - 30.08.2002