Вверх ↑
Этот топик читают: Гость
Главный модератор
Ответов: 2997
Рейтинг: 395
#511: 2013-05-20 14:11:47 ЛС | профиль | цитата
Да есть такое. Проще всего отредактировать ini файл:
random.ini

#ini
...
Max=The exclusive upper bound of the random number to be generated. Max must be greater than or equal to zero. ARG(int)|1|0
...

Потом что-нибудь придумаем.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4623
Рейтинг: 746
#512: 2013-05-20 14:18:23 ЛС | профиль | цитата
Nic, тоже с подобным сталкивался - если значение свойства равно по-умолчанию, то оно перекрывается значением из потока.
Есть какие-то соображения? Например, в стандартном пакете значение из потока берется, если значение свойства 0 или "". Может как-то можно усовершенствовать систему приоритетов?
карма: 26

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#513: 2013-05-20 23:34:18 ЛС | профиль | цитата
Netspirit, приоритеты сейчас такие (от высшего к низшему): верхняя точка, свойство (не по-умолчанию), поток.
Проверка на 0, или "", или что угодно не вариант, так как в пакете много значений по-умолчанию отличных от нуля и прочих значений. Поэтому не надо выдумывать искусственных значений по-умолчанию, как в компоненте Random. Пользователь сам знает какое ему надо верхнее значение диапазона случайных чисел.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4623
Рейтинг: 746
#514: 2013-05-21 11:48:46 ЛС | профиль | цитата
Да тут просто проблема в том, что стояло, допустим, в Random по-умолчанию Max=100. Меня это значение устраивает. А тут из потока прилетает 1000 - и всё. Единственный вариант получить корректно это "100" - поставить в этом месте в потоке заглушку типа DoData.

Чтобы этого не было, ты предложил поставить в ini по-умолчанию 0. В более общем смысле - чтобы иметь возможность получать значение из потока, нужно во всех свойствах, для которых есть верхняя точка, предусматривать такое значение по-умолчанию, которое либо не используется в самом свойстве, либо в справке указывать, что может понадобиться перекрыть поток с помощью DoData.

Тут можно только немного уменьшить количество таких случаев, если в кодогенераторе немного подправить логику чтения потока: если свойство равно по-умолчанию - читать поток только, если в нем есть данные, иначе подставлять свойство по-умолчанию (в примере tig-rrr именно тот случай, когда при пустом потоке логично было бы подставить свойство, каким бы оно ни было). На то оно и "по-умолчанию", чтобы стоять, когда нет других данных.
карма: 26

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#515: 2013-05-21 12:30:40 ЛС | профиль | цитата
Netspirit писал(а):
предусматривать такое значение по-умолчанию, которое либо не используется в самом свойстве

Само понятие "значение по-умолчанию" означает что, даже если оно явно не указано как параметр, его значение используется при вызове метода. Max=100 в документации MSDN по классу System.Random не фигурирует - это "выдуманное" значение. Однако, свойство Opacity=1.0 для класса System.Windows.Forms.Form "настоящее" значение по-умолчанию.
Netspirit писал(а):
... при пустом потоке логично было бы подставить свойство, каким бы оно ни было...


Это не общий случай, а очень частный, так как разработчик может его реализовать использую скрипт:
#hws
func XXXX(data)
if(not linked("Data") and not len(data))
property = this.props("Data").value
end
end
Такой подход где-то используется в "ранних" компонентах пакета.

Если сможете привести пример, где предложенную вами логику невозможно реализовать средствами языка, тогда добавим ее в кодогенератор.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4623
Рейтинг: 746
#516: 2013-05-21 12:49:26 ЛС | профиль | цитата
Приведенный фрагмент, по-моему, не удобен - он не полный, так как в нем нельзя получить значение из потока. Полностью он должен был бы выглядеть так (извиняюсь за ошибки - RTCG не знаю):

#hws
func XXXX(_data)
if(linked("Data"))
val = Data // С верхней точки
elseif(isdef(this.props("Data")) and len(_data)) // Из потока, если в нем есть данные и свойство равно по-умолчанию
// На данный момент всё работает именно так, за исключением проверки and len(_data)
val = _data
else
val = this.props("Data").value // Иначе из свойства.
end
end
Вот если проверку elseif...else выполнял бы кодогенератор, в FTCG это выглядело бы так:

#hws
func XXXX(_data)
val = Data
end

карма: 26

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#517: 2013-05-22 10:15:45 ЛС | профиль | цитата
Netspirit, если сделать как предлагаете Вы, то в каждом компоненте появится ограничение на получение данных из потока. Например, мы никогда не получим из потока параметр="" (пустая строка) или ноль (0) и тогда уже надо будет придумывать скрипт для решения этой проблемы. Так в чём разница с тем как сделано сейчас?
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 4623
Рейтинг: 746
#518: 2013-05-22 11:08:16 ЛС | профиль | цитата
В том, что мы сейчас в большинстве случаев не получим значения свойства по-умолчанию, так как оно будет перекрываться потоком, даже пустым. И приходится делать искусственное значение по-умолчанию, которым можно пожертвовать, чтобы получить значение из потока.

Нюанс: 0 или "" мы не получим из потока, если будем их проверять с помощью len(). Тогда как для кодогенератора должна быть разница между
event(onResult, 0)
и
event(onResult)

Первый вариант должен быть приоритетнее перед свойством по-умолчанию, а второй - наоборот. Уточню, в чем разница: в первом случае typeof(_data) должно быть dtInteger, во втором - dtNull.
карма: 26

0
Администрация
Ответов: 15295
Рейтинг: 1519
#519: 2013-05-22 23:19:37 ЛС | профиль | цитата
Эта проблема в новых версиях решается шаблоном - по-умолчанию везде нули и пустые строки, шаблоном накатываются свойства, достаточные для работы элемента, и далее если разработчику они не нужны, он их просто выставляет в исходное состояние и принимает из потока все, что необходимо
карма: 26
1
Голосовали:sla8a
Ответов: 4623
Рейтинг: 746
#520: 2013-05-23 12:20:05 ЛС | профиль | цитата
Примерно понятно. Я просто мыслю в категориях стандартного пакета, почему и начал это обсуждение. Там с шаблонами элементов не нужно возиться.
карма: 26

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#521: 2013-06-04 21:11:16 ЛС | профиль | цитата
Простой асинхронный сканер портов: PortScanner
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Главный модератор
Ответов: 2997
Рейтинг: 395
#522: 2013-06-09 00:49:56 ЛС | профиль | цитата
Пример чтения содержимого почтового ящика: MailClient
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Главный модератор
Ответов: 2997
Рейтинг: 395
#523: 2013-06-15 00:59:01 ЛС | профиль | цитата
Тестовый макет нового проекта Class:
cnet_project_class.png
cnet_project_class_concept.png
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
2
файлы: 2cnet_project_class.png [21.2KB] [902], cnet_project_class_concept.png [132.9KB] [703]
Голосовали:iarspider, Мартынов
Ответов: 5446
Рейтинг: 323
#524: 2013-06-15 10:51:49 ЛС | профиль | цитата
Nic, я преклоняюсь перед твоим трудолюбием!
карма: 1

0
Ответов: 33
Рейтинг: 1
#525: 2013-06-22 01:22:28 ЛС | профиль | цитата
Прошу просветить по одному вопросу.Приложение созданное этим пакетом не запускается на Compact Net Framework v3.7 т.е.выпадает ошибка -Не найдено имя файла или сборки "System.Windows.Forms,Version=2.0.0.0,Culture=neutral,PublicKeyToken=B77A5C561934E089"либо одна из их зависимостей.
Понятно что версия компакт урезанная и в ней кой-чего не хватает.Что то можно сделать или безнадежно?
карма: 1

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