Shleps писал(а):Аналогично - голый канвас и скрипты.
Если заглядывали внутрь tpg, то там сплошняком такое
Это все-же не совсем скрипт, а скорее то что я назвал "описание переменных "
FORM__TEXTAREA_Gen_HTM.var
- Код: Выделить всё
(*SEdit*********************************
VN:"F_STR_ИМЯ" REM:"" NZ:""
VN:"DrawList" REM:"" NZ:"FORM 0 16777215/ИМЯ/ЗАПРОС/43 48-323 250nrFORM_TEXTAREA 0 16777215 ИМЯ Подпись B_01 submit 106 108 202 208 END"
VN:"OP" REM:"" NZ:"FORM_TEXTAREA 0 16777215ИМЯПодписьB_01submit 106 108 202 208 1 END"
VN:"F_COD_ИМЯ" REM:"" NZ:"<form action="ЗАПРОС" method="Get" style="BACKGROUND-COLOR: #FFFFFF;COLOR: #000000; POSITION: absolute; TOP:48px; LEFT:43px; width:280px;height:202px;">"
VN:"FC_COUNT_ИМЯ" REM:"" NZ:"2"
VN:"FC_N_ИМЯ" REM:"" NZ:"1"
VN:"Y_ИМЯ" REM:"" NZ:"100"
//****************************************)
Только в "визуализаторе данных" все значительно менне хаотично, что разумеется плюс.
(Но у меня этот "псевдокод" генерируются "редактором скриптов"(точнее встроенной в него "мини-IDE"), так что особо понятным ему быть необязательно )
А "классический скрипт" это что-то вроде этого
STAR_R_DRW.ps
- Код: Выделить всё
// Прорисовка звезды
Var
S,S1:String;
x,y,x1,y1,i:Longint;
x2,y2,x3,y3:Longint;
Function Next1(Var SS:String;Ch:Char):String;
var i:Longint;
begin
I:=Pos(Ch,SS);
If i>0 then begin
Result:= Copy (ss,1,i-1);
delete(SS,1,i);
end
end;
Begin
S:=GetParam('OP');
S1:=Next1(s,' ');
DRW_SetPenColor ( StrToInt(Next1(s,' ') ));
DRW_SetBrushColor ( StrToInt(Next1(s,' ') ));
SetParam('RET_RECT',S) ; // Возвращаю границы 'X Y-X1 Y1'
X:=StrToInt(Next1(s,' '));
Y:=StrToInt(Next1(s,'-'));
X1:=StrToInt(Next1(s,' '));
Y1:=StrToInt(S);
x2:=X+ ((x1-x) div 2);
y2:=y+ ((y1-y) div 2);
x3:=X+ ((x1-x) div 3);
y3:=y+ ((y1-y) div 3);
Drw_Line(x,y3, x1,y3);
Drw_Line(x1,y3,x,y1);
Drw_Line(x2,Y,x,y1);
Drw_Line(x2,Y,x1,y1);
Drw_Line(x1,y1,x,y3);
end.
То есть почти полноценный произвольный кусок алгоритма на языке высокого уровня.
Добавлено спустя 37 минут 4 секунды:
Shleps писал(а):Вот на этом скриншоте в углу статистика гласит, что на экране 28000 примитивов.
Это значит, что каждый честно перерисованный кадр интерпретировалось 28000+ строк текста.
Это то что я называю заслуженная гордость!
(У меня до тыщи элементов в списке команд (максимум 400- 500) не доходило ни разу впрочем сама задача этого не требовала в принципе, это же не мини Корел Драв и даже неполноценный редактор, веб-станиц, а чтото вроде "редактора форм в лазарусе". )
Добавлено спустя 12 минут 43 секунды:
Shleps писал(а):На экран оно вываливается практически как есть. Т.е. отрисовка каждого кадра это интерпретация всей программы.
Что можно - кешируется в уже распарсенном состоянии, но зум и скролл в любом случае заставят всё пересчитать.
Может поэтому рендер кажется неотзывчивым?
Я делал псевдо кэширование в "метафайлы" в результате как минимум скрипты прорисовки гонялись только при реальном изменении данных ( скролл работал по уже просчитанным данным, масштабирования рабочего поля у меня нет, но есть "хитровывернутый" выбор элемента мышкой ( суть проблемы в том что я "в общем виде" не знаю границы рисуемой фигуры заранее) так что там кэширование в "метафайлы" тоже было более чем полезно + скриптовая перерисовка шла для каждого элемента отдельно при их перемещении и масштабировании ).
А "отзывчивость" можно повысить разместив критически медленный блок рендера в отдельном потоке. Текущий расчет "срывается" по приходу следующего пакета данных не успев завершится ? Ну и черт с ним! Пользователь этого не увидит, а реакция будет "космической". (это уже из более свежего опыта работы с условной риалтайм обработкой данных )