Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15294
Рейтинг: 1518
#136: 2007-06-22 15:47:40 ЛС | профиль | цитата
Galkov, на счет верхних точек еще думаю. В данный момент положение такого, что данные из потока не идут в параметр элемента, если нет у него соответствующей точки сверху. Поэтом код такой естественно мы получить не сможем. И думается мне, что поведение это более логично, чем то, что было в Дельфи-1.

Однако сейчас основная проблема с точками все также: как, кто и когда должен определять замещение одной из точки данными если на схеме они расположены в одном порядке, в коде используются в другом.

nesco писал(а):
в каком компоненте можно посмотреть, как это реализовано правильно, именно со всеми частями данных?

StrCat
карма: 26
0
Ответов: 9906
Рейтинг: 351
#137: 2007-06-22 16:29:19 ЛС | профиль | цитата
Dilma, да не про то я...

А приведенном коде нет понятия "использован раньше"
Одновременно.
И даже разработчику элемента это известно (про пешеходов говорить не будем пока).
А возможности у разработчика нет, чтобы записать, что в обоих случаях использования имен X и Y входные данные _data_ - иcходные, а не покоцанные во втором...
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#138: 2007-06-22 16:38:23 ЛС | профиль | цитата
во-первых следует сначало посмотреть, что за компонент в целом. Не должны для двух разных точек(или свойств) использоваться одни и теже данные. Ну никак. Это противоречит базовому алгоритму.
карма: 26
0
Разработчик
Ответов: 26072
Рейтинг: 2122
#139: 2007-06-22 16:57:23 ЛС | профиль | цитата
Странно оно работает, а может так и должно (что-то я вообще заработался)? Умудряется подставлять выражение преобразования минуя метод doXXXX, достаточно подключить только верхнюю и нижнюю точки.

[size=-2]------ Добавлено в 16:57
Вот код
func doIntToStr
   fvar(st, old)
if(linked(Result))
old = block.select(BLK_PRIV_VAR)
println(s, ':string;')
block.select(old)
println(s, ' := int2str(', Data, ');')
event(onResult, s)
else
event(onResult, ' int2str(' + Data + ') ')
end
end

func Result
if(linked(doIntToStr))
return(s)
else
return(' int2str(' + Data + ') ')
end
end
Но усложнить всеравно придется и напрямую выражение не получится подставить. Хочу добавить выравнивание до N знаков с заполнителем.
карма: 22

0
Ответов: 9906
Рейтинг: 351
#140: 2007-06-22 17:03:53 ЛС | профиль | цитата
Dilma писал(а):
во-первых следует сначало посмотреть, что за компонент в целом

Хоть 100 порций

hiSwitch.pas
карма: 9

0
Ответов: 3655
Рейтинг: 69
#141: 2007-06-22 17:30:12 ЛС | профиль | цитата
nesco писал(а):
Вот сейчас это как раз, ну очень, актуально.

Конечно если ты сделал уже 300.
Если нет то когда зайти
через годик
через два
Dilma писал(а):
Хотелось бы послушать.

Каждый компонент это мультик(изначально пустой и имеющий только необходимые свойства
типа размер,шрифт,цвет).
Все остальные свойства это мини компоненты(методы).
Которые при необходимости вставляются в мультик.
Например
1)
Точка метод doSave сохраняет данные в файле .(зачем она мне если я не сохраняю данные в файле)
В моём примере этот миникомпонент не вставляется в мультик(и нет проблем).
2)
Тот же метод doSave сохраняет данные только в одном формате ,и позволяет только
последовательное чтение.
Делаем миникомпонент doSave1 который будет сохранять в таком формате что бы допускал
прямое чтение нужной строки. Или в любом другом нужном нам.
Вставляем в мультик получаем тот же компонент только с другими свойствами.
Под миникомпонентом подразумевается Функция(делфи) которую можно сделать самому
или взять готовую.
3) И т.д.
То есть мы получаем компонент который будет читатьвыводить данные сразу те которые нам надо и в нужном формате.
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#142: 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, не зависящий от того, как и через какое место будут сделаны все остальные элементы. И никак иначе сделать не возможно - все таки голову над этим ломали не один год.
карма: 26
0
Ответов: 9906
Рейтинг: 351
#143: 2007-06-22 18:04:24 ЛС | профиль | цитата
Dilma писал(а):
в концепции WEB такой элемент следует растащить по ф-ным блокам

1) растащили
2) собрали ту же функциональность из разных элементов - работает
3) поместили в мультик => получается что для контейнера мы не можем написать hws-файл
Так что ли

[size=-2]------ Добавлено в 18:04
Dilma, про копии метровых строк пример может и неудачный....
Ничего он не копирует, на самом деле - счетчики ссылок увеличивает...
Грубо говоря: кошмар, конечно же, но не полный беспредел таки
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#144: 2007-06-22 18:11:43 ЛС | профиль | цитата
Нет не так. На шаге два мы будем вынуждены неким образом в каком-то месте определить явное дублирование данных из потока. Например так:
func doCheck
  println('if(', check, ') {')
event(onOn, _data_)
println('} else {')
event(onOff, _data_)
println('}')
end

[size=-2]------ Добавлено в 18:11
Galkov писал(а):
Ничего он не копирует

это впрочем и не важно. Проблема с копированием в любом случае решаема использованием PChar на худой конец Важно почуствовать сам процесс вызова большого количества методов на каждый чих программы. А после этого скомпилировать этот пример в Delphi 2 и изумляться тому, что на самом деле это всего одна строка кода...
карма: 26
0
Разработчик
Ответов: 26072
Рейтинг: 2122
#145: 2007-06-22 18:40:50 ЛС | профиль | цитата
Dilma писал(а):
Собственно хотелось бы сразу отметить, что кажущаяся внешняя сложность нового подхода на самом деле во многих случаях облегчает жизнь разработчика

Но до конца полного понимания надо еще много работать (закреплять материал). А если серъезно, то мне понравилось. И в принципе, мы можеи таким способом реализовать идею Вячеслава по конструкции элемент -- функция, если дисретизировать компоненты до уровня одного фунционального вызова конечного языка.

[size=-2]------ Добавлено в 18:40
Вячеслав писал(а):
Если нет то когда зайти
через годик

Может через годик и будет рабочий пакет. Но в настоящем у тебя есть пакет Delphi-1, кто не дает тебе в нем работать. Из него получаются очень неплохие програмки, и красивые, и функциональные. Жаль только то, что никто из вас не совершенствуется в развитии того же схемопостроения. Все используют готовое, или ждут, кто чего за них сделает и не думают сами. Я тоже, поныл, поныл и понял, что за меня никто ничего не сделает, если я это не сделаю сам. И ничего -- написал код сам не заглядывая в пакет WEB, а оказалось, что он так и пишится, и я сделал правильно, а значит на правильном пути и что-то понял.
карма: 22

0
Ответов: 3655
Рейтинг: 69
#146: 2007-06-22 18:42:34 ЛС | профиль | цитата
Dilma писал(а):
Давайте посмотрим, что происходит при выполнение такой вот простой схемки:

Да это понятно.
Непонятно почему после создания схемы нельзя получить готовый файл PAS - как
в делфи(без всех этих копирований.).
Или в делфи тоже 5 раз копируют.
Типа как это происходит в делфи
карма: 0

0
Администрация
Ответов: 15294
Рейтинг: 1518
#147: 2007-06-22 18:57:19 ЛС | профиль | цитата
Вячеслав писал(а):
Непонятно почему после создания схемы нельзя получить готовый файл PAS - как

ну здрасте Получить можно и он получается в Delphi 2, и метод получения этот называется Потоковым Кодогенерированием и именно он реализован в пакете WEB.
карма: 26
0
Ответов: 3655
Рейтинг: 69
#148: 2007-06-22 19:11:01 ЛС | профиль | цитата
Dilma писал(а):
ну здрасте

И вам здрасте
Пишем на китайском получаем PAS .(Delphi 2).
Пишем на PAS - получаем китайский код с 5_ю копированиями (Delphi 1).
карма: 0

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#149: 2007-06-23 00:20:18 ЛС | профиль | цитата
Dilma писал(а):
Потоковым Кодогенерированием

Как в фильме "Назад в будущее", только там был "потоковый накопитель"
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Разработчик
Ответов: 26072
Рейтинг: 2122
#150: 2007-06-23 20:21:19 ЛС | профиль | цитата
Кому интересно -- первый полнофункциональный переделанный компонент Message, со всеми свойствами, как в Delphi-1. Заметь Dilma, описания синтаксиса и примера применения совокупности switch и case у тебя в WEB нет. До всего приходитс доходить самому -- не хорошо это
Вот сейчас Вячеслав даст отзыв... Я уже заранее боюсь .
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)