Вверх ↑
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2008-02-27 18:47:27 ЛС | профиль | цитата
а зачем соваться? Убираем все ReadXXX и заменяем их непосредственно на названия точек и св-тв элемента. Ну и весь код в println заворачиваем. Получаем всего три строки для отрисовки линии на контексте любого элемента:


#hws
lng.decl_loc_var(h, 'integer')
println(h, ' := GetDC(', handle, ');')
println('movetoex(', h, ', ', x1, ', ', y1, ', nil);')
println('lineto(', h, ', ', x2, ',', y2, ');')

а вот пример с элементом CustomCode:
code_8495.txt
------------ Дoбавленo:

вот такая схема на стандартных элементах


Add(For,14132473,210,63)
{
End=40000
link(onEvent,1540346:doDraw,[])
}
Add(Button,2905006,154,63)
{
Left=150
Top=55
link(onClick,14132473:doFor,[])
}
Add(Img_Line,1540346,266,63)
{
DrawSource=1
link(Point1,8838912:Point,[])
link(Point2,10428738:Point,[(286,55)(328,55)])
}
Add(PointXY,8838912,273,14)
{
X=10
Y=10
}
Add(PointXY,10428738,322,14)
{
X=10
Y=100
}

выполняется примерно за секунду. Тоже самое, собранное на рассыпухе в FTCG выполняется примерно вдвое быстрее(100 тыс итераций против 40).
Причем код получаем полностью компактный - ничего лишнего:

#pas
procedure TClassFTCG_Tools_1050E60.event_doCompare(var Data:TData; index:word);
var
h1:integer;
i4:integer;
begin
h1 := GetDC(str2int(ToString(Data)));
val2 := h1;
for i4 := 0 to 180000 do
begin
movetoex(val2, 10, 10, nil);
lineto(val2, 10, 100);
end;
end;
карма: 27
0
файлы: 1code_8495.txt [765B] [275]