Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 4698
Рейтинг: 426
#1: 2009-11-26 20:45:39 ЛС | профиль | цитата
Набор(6 шт) компонентов для работы с типами, описание:
Type_Create - создает новый тип
Type_Add - добавляет переменные в существующий тип
Type_Set - устанавливает значение существующих переменных
Type_MultiMem - извлекает значения выбранных переменных
Type_Delete - Удаляет переменные из типа
Type_Array - позволяет работать с типом как с массивом
Более подробное описание в схеме, хелп я рисовал(именно рисовал) впервые, так что не пинать
В архиве есть иконка type.ico для вкладки Type, ее можно положить в ElementsDelphi abs
Скачать последнюю версию(лучше всего пользоваться последней версией с SVN)
карма: 10
8
файлы: 1type.rar [14.9KB] [489]
Голосовали:Administrator, Genius, 3042, Konst, filyaxxxcom, miver, sla8a, Poputchik
Ответов: 1304
Рейтинг: 405
#2: 2009-11-26 22:51:13 ЛС | профиль | цитата
Assasin, пинать не буду если скажешь где взять ShareMyType.pas .
карма: 3

0
Ответов: 8
Рейтинг: 1
#3: 2009-11-26 23:46:27 ЛС | профиль | цитата
где взять? Fatal: File not found: 'ShareMyType.dcu'
------------ Дoбавленo в 23.48:
будем пинать если не дашь нам ентот файл...
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2009-11-27 00:52:32 ЛС | профиль | цитата
подход конечно интересный. Думаю такие элементы давно бы уже появились, если бы не слишком большой процент попадания DesignTime информации в конечное приложение. Поэтому МТ явилось некой альтернативой между удобством и эффективностью.

Замечания же после беглого осмотра можно сделать какие:
1) по onError мы давно уже выдаем коды ошибок, а тексты приводим в справке - это более универсально
2) в именах свойств лучше не использовать знак _
3) не совсем ясна полезность св-ва GType_Enabled
карма: 27
0
Разработчик
Ответов: 4698
Рейтинг: 426
#5: 2009-11-27 08:32:53 ЛС | профиль | цитата
MAV писал(а):
пинать не буду если скажешь где взять ShareMyType.pas

Я по этой причине почему-то проснулся ночью, проснулся и вспомнил "забыл в архив добавить ShareMyType.pas!"
Вот он заветный файл для уже скачавших архив выше, архив также перезалил
ShareMyType
Dilma,
1) хорошо, это поправлю, но только справку то я нарисую, а посмотреть ее никто не сможет, если только ее при установке компонентов не скопировать в Help
2) Исправил
3) Это свойство полезно в следующем code_15822.txt
------------ Дoбавленo в 08.35:
Да, кстати, я еще добавил имени не быть чувствительным к регистру, так что лучше заново скачать архив из первого поста
------------ Дoбавленo в 08.44:
Dilma писал(а):
слишком большой процент попадания DesignTime информации в конечное приложение

Поподробнее, что еще за DesingTime?
------------ Дoбавленo в 11.30:
Еще раз перезалил архив:
Исправлен баг : Type_Create - невозможно очистить тип методом doClear
Для тех кто скачал:
Заменить файл ElementsDelphicodeType_Create.pas на этот
карма: 10
0
файлы: 3sharemytype.rar [1KB] [309], code_15822.txt [1.7KB] [448], hitype_create.rar [724B] [331]
Ответов: 1926
Рейтинг: 172
#6: 2009-11-27 15:46:19 ЛС | профиль | цитата
Assasin писал(а):
Поподробнее, что еще за DesingTime


Это время проектирования прогрммы, то есть сборка в среде. RunTime - это уже время запущенной программы.

Зачем нужна верхняя точка GType, если в почти каждом компоненте есть параметр Name, где указыватся имя типа? Можно сделать его как менеджер, чтобы не было никаких точек GType и FType.
------------ Дoбавленo в 15.48:
И ещё: мне непонятна суть компонентов, т.е. для чего они могут быть использованы. Ведь новый тип переменной обычно отличается действительно новым типом хранимых данных (типа "картинка", "текст").
карма: 9
0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2009-11-27 16:02:31 ЛС | профиль | цитата
3042 писал(а):
Можно сделать его как менеджер, чтобы не было никаких точек GType и FType.

вероятно реализация менеджера в данном случае была бы не самым удачным решением, поскольку данные могут быть полностью переданы в потоке(как и стандартные Stream).

3042 писал(а):
И ещё: мне непонятна суть компонентов, т.е. для чего они могут быть использованы.

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


------------ Дoбавленo в 16.05:
так же стоит добавить, что такой вариант МТ оптимальным образом переносится на пакеты класса FTCG и является гораздо более предпочтительнее классического решения - там проблем с избыточной информацией в RunTime нет.
карма: 27
2
Голосовали:3042, Konst
Ответов: 1926
Рейтинг: 172
#8: 2009-11-27 17:19:24 ЛС | профиль | цитата
То есть, это что-то типа записей в Pascal, где каждое поле имеет своё имя и может иметь любой тип.
карма: 9
0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2009-11-27 17:30:55 ЛС | профиль | цитата
3042, ну Assasin в туториале именно так и описывал
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2009-11-27 17:31:25 ЛС | профиль | цитата
Dilma, а кто мешал в структуре TData ввести поле Name, тогда каждые переданные данные могли бы быть именованы. В структуре MT-потока, в таком случае, можно было бы именовать каждую цепь. Или это -- не так
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2009-11-27 18:07:57 ЛС | профиль | цитата
nesco писал(а):
а кто мешал в структуре TData ввести поле Name

nesco, тормознутости текущей реализации пакета стало мало?
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2009-11-27 18:44:17 ЛС | профиль | цитата
Dilma писал(а):
тормознутости текущей реализации пакета стало мало?

Гы. Тормознутости хватает, но не думаю, что предложенная выше реализация (Type) будет работать быстрее
И как может лишнее поле сильно влиять на быстродействие, если мы передаем указатель на структуру, а не саму структуру, если только не копируем их, как при MT
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2009-11-27 21:48:54 ЛС | профиль | цитата
nesco писал(а):
Тормознутости хватает, но не думаю, что предложенная выше реализация (Type) будет работать быстрее

речь идет не о реализации Type - речь идет о работе схем, в которых это вообще не используется

nesco писал(а):
И как может лишнее поле сильно влиять на быстродействие, если мы передаем указатель на структуру, а не саму структуру, если только не копируем их, как при MT

рассмотрим простой код из Share.pas
#pas
procedure _hi_OnEvent(const PointEvent:THI_Event;Value:THiInt);
var Data:TData;
begin
dtInteger(Data,Value);
OnEvent(PointEvent,Data);
end;
казалось бы две строчки кода, к которым добавление нового поля ну никаким боком не относится. Однако вспоминаем, что тип string это тот же самый класс, для правильной работы которого нужно вызывать конструктор и деструктор (в С и С++ это можно было бы увидеть воочию открыв исходник класса), а точнее в Delphi вызывается InitArray для каждого строкового и массивного поля из общего метода InitRecord. Отсюда получаем, что добавление <field>:string в структуре TData приведет как минимум к вызову одной лишней подпрограммы во всех методах, в которых есть локальные переменные TData вне зависимости от того, как где и когда они используются. На самом деле добавление поля sdata это уже было неверным решением, хоть и дающем в последствии некоторую простоту обращения с типом.
карма: 27
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#14: 2009-11-27 23:01:53 ЛС | профиль | цитата
Да, все правильно, для локальных структур это существенно влияет на быстродействие, все верно ты написал. У меня совсем вылетело из головы, что под локальные переменные выделяется память, которая при уничтожении экземпляра, должна быть возвращена
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#15: 2009-11-28 00:49:41 ЛС | профиль | цитата
nesco писал(а):
У меня совсем вылетело из головы, что под локальные переменные выделяется память, которая при уничтожении экземпляра, должна быть возвращена

не совсем так. Если переменная или структура состоит из простых типов данных(байт, слово, двойное слово и т.д.), то память под нее выделяется в стеке одной командой процессора путем изменения адреса в единственном регистре. При этом количество локальных переменных или полей в структуре совершенно ни на что не влияет, кроме значения приращения стекового регистра. Для освобождения памяти этот самый регистр еще раз инкрементится, но в обратную сторону. Так что тип добавляемого поля тут является главным критерием снижения производительности.
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)