Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| DimaPetrov |
23.04.2007 5:15
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: 0 |
Код for i:=0 to Form1.ControlCount-1 do if (Form1.Controls[i] is Tdot) then begin v:=(Form1.Controls[i] as Tdot); v.left:=Trunc((v.real_X-X_tekmap)/Scale_tekMap); {1} v.top:=Trunc((v.real_Y-y_tekmap)/Scale_tekMap); {1} На Form1 находится 1000 компонентов TDot. Этот цикл выполняеться за 3 секунды. Без строки {1} 1.5, без {1} и {2} милисекунды. Как это можно ускорить? Сообщение отредактировано: DimaPetrov - 23.04.2007 5:18 |
![]() ![]() |
| Sergy |
25.04.2007 22:21
Сообщение
#2
|
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Реальное имя: Сергей Репутация: 0 |
А вот эта
Цитата v:=(Form1.Controls[i] as Tdot); строчка вообще не нужна. Если уже проверил тип, то можно приводить его безусловно: Код v := Tdot(Form1.Controls[i]) Или без неё. Операция прямого явного приведения типа не выполняется в RunTime а сразу на этапе компиляции. Ещё компоненты эти твои надо заблокировать прежде чем менять их координаты. если компоненты собственного написания, то можно предусмотреть метод быстрого изменения координаты за одну, а не за две перерисовки. Ещё не ясно как они там взаимодействуют на форме. Так что мало данных для исчерпывающего ответа. |
DimaPetrov Требуется помощь в ускорение исполнения кода 23.04.2007 5:15
klem4
А что это еще за компоненты такие ? Это экземпля... 23.04.2007 14:25
hardcase На Form1 находится 1000 компонентов TDot. Этот цик... 23.04.2007 20:32
volvo Пересчет Alignment-а на время цикла отключить не п... 23.04.2007 20:50![]() ![]() |
|
Текстовая версия | 8.12.2025 12:39 |