Вверх ↑
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2007-06-22 17:57:29 ЛС | профиль | цитата
nesco писал(а):
Странно оно работает, а может так и должно (что-то я вообще заработался)?

я уверен, что человек не видивший в глаза Delphi-1 будет считать это само сабой разумеющимся. Собственно хотелось бы сразу отметить, что кажущаяся внешняя сложность нового подхода на самом деле во многих случаях облегчает жизнь разработчика. Кроме того, если ты посмотришь внимательно на элементы палитры WEB, то увидишь что большинство из них имеют такую же структуру, как в IntToStr:
func do<name>
   fvar(st, old)
if(linked(Result))
old = block.select(BLK_PRIV_VAR)
println(s, ':<type>;')
block.select(old)
println(s, ' := <func name>(', Data, ');')
event(onResult, s)
else
event(onResult, '<func name>(' + Data + ') ')
end
end

func Result
if(linked(do<name>))
return(s)
else
return('<func name>(' + Data + ') ')
end
end

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

Galkov писал(а):
hiSwitch.pas

в концепции WEB такой элемент следует растащить по ф-ным блокам

[size=-2]------ Добавлено в 17:57
Вячеслав писал(а):
Каждый компонент это мультик(изначально пустой и имеющий только необходимые свойства
типа размер,шрифт,цвет).
Все остальные свойства это мини компоненты(методы).
Которые при необходимости вставляются в мультик.

Вячеслав, это очень общая идея. Насколько возможно её реализовать в рамках полюбившейся вам модели Delphi-1 сказать поэтому сложно. То, что было расписано про методы проблемой к сожалению и не являлось - как раз с методами в данной модели все было хорошо. Чтобы было понятно, о каких проблемах идет речь приведу самый банальный пример. Давайте посмотрим, что происходит при выполнение такой вот простой схемки:
Add(Button,7232119,126,161)
{
Left=80
Top=105
Data=String(test)
link(onClick,16006348:doMessage,[])
}
Add(Message,16006348,182,161)
{
}

и так при нажатие на кнопку происходит событие _OnClick и выполняется вот эта строка:
_hi_OnEvent_(_event_onClick,_prop_Data);[/code]
и так мы уже имеем один лишний вызов процедуры и две лишние передачи параметра(а это драгоценное время и байты в программе :!: )
лезем в share.pas видим:
procedure _hi_OnEvent_(const PointEvent:THI_Event;var Data:TData);
var dt:TData;
begin
dt := Data;
OnEvent(PointEvent,dt);
end;
и что мы тут видим? dt := Data; <---- полное копирование данных! представте себе, что это такое если в данных строка объемом в несколько мегабайт(гигабайт....)
OnEvent(PointEvent,dt); <------ еще один лишний вызов и передача двух параметров

дальше смотрим, что такое OnEvent. Код приводить не буду ничего особо катастрофичного там нет, кроме еще одного(!) вызова и передачи аргументов.

и только теперь управление передается на метод doMessage:
procedure THIMessage._work_doMessage;
...
begin
Mes := ReadString(_Data,_data_Message,_prop_Message);
....
end;
Mes := ReadString(); <----- опять полное копирование всех данных(!)

лезем опять в share.pas и видим такую картину:
function ReadString(var Data:TData; PointData:THI_Event; const Def:string):string;
begin
...
Result := ToString(Data);
...
end;
Result := ToString(); <----- и еще раз сделали копию(!)

function ToString;
begin
....
data_str : Result := Data.sdata;
....
end;
Result := Data.sdata; <----- ну от того, что мы и в пятый раз скопируем уже ничего не изменится....


и вот теперь представте на секунду, что это базис стандартного пакета hiasm, не зависящий от того, как и через какое место будут сделаны все остальные элементы. И никак иначе сделать не возможно - все таки голову над этим ломали не один год.
карма: 27
0