Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизDelphi - "рулез форева"! Найти похожие ветки
← →
Anatoly Podgoretsky © (2010-02-15 19:26) [120]> DVM (15.02.2010 19:01:51) [111]
Это от привычки удваивать.
← →
Anatoly Podgoretsky © (2010-02-15 19:27) [121]> DVM (15.02.2010 19:11:54) [114]
Культура языка не отделима от самого языка.
← →
Игорь Шевченко © (2010-02-15 19:31) [122]
> Приведений типов в C++.
в С++ доступен синтаксисint(PListBox(Sender)->Items->Objects[1]);
http://en.wikibooks.org/wiki/C%2B%2B_Programming/Type_Casting
← →
Kerk © (2010-02-15 19:32) [123]
> Anatoly Podgoretsky © (15.02.10 19:13) [116]
>
> > Kerk (15.02.2010 17:48:19) [79]
>
> Только эт в английском это @
Не вижу связи между латинским et и английским at. Ну разве что визуально похожи :)
← →
Anatoly Podgoretsky © (2010-02-15 19:36) [124]> Kerk (15.02.2010 19:32:03) [123]
Скрипач ты ЭТ от ЭНД не отличаешь?
← →
Kerk © (2010-02-15 19:42) [125]
> Anatoly Podgoretsky © (15.02.10 19:36) [124]
Отличаю. "ET" и "AND" - это одно слово, но на разных языках. А "AT" и "AND" - разные слова, но на одном языке.
← →
@!!ex © (2010-02-15 20:00) [126]<offtop>
Сейчас вникаю в идею сигнально/слотового обмена сообщения из Qt.
Это нечто... то чего не хватало для полноценной разработки независимых компонентов в дельфи.
В качестве изучения решил написать небольшой менеджер ресурсов для локальных нужд...
и получается лучше и красивее чем на дельфи.
</offtop>
← →
oxffff © (2010-02-15 20:47) [127]
> @!!ex © (15.02.10 20:00) [126]
Прочитал. Не понял где повод для радости?
Каждый Qt-объект (не только вызуальные элементы!) может генерировать некоторые сигналы, жестко
зашитые в структуру его класса. Сигнал -- это функция, объявленная в специальной секции signals
и не имеющая реализации ("тела") а только передаваемые аргументы. К сигналу объекта (заметьте, не класса) могут быть подключены слоты. Слот -- это всего лишь метод, также объявленный в специальных секциях "slots". Слоты
могут быть доступными (секция "public slots"), защищенными ("protected slots") и
скрытыми ("private slots"). При помощи специального метода connect слот подсоединяется к сигналу.
Небольшой пример:
connect(myValueDetector, SIGNAL(ValueChange( Value a),
myApplicationUpdater, SLOT(onValueChange( Value a ))));
После чего при каждом "испускании" сигнала ValueChange объектом myValueDetector
будет вызываться слот onValueChange объекта myApplicationUpdater.
Плюсы -- к одному сигналу можно подключить несколько слотов.
Минусы -- один слот нельзя использовать для нескольких сигналов (например, для обработки группы кнопок). Сравните с системой событий VCL/CLX -- там как раз всё наоборот.
Можешь почитать реализацию в SAP.
http://help.sap.com/saphelp_nw04/helpdata/en/41/7af4eca79e11d1950f0000e82de14a/frameset.htm
Потом прочитать реализацию в .Net.
Тот самый MulticastDelegate и подумать почему он является объектом кучи.
И что мешает сделать тоже самое в Delphi?
Причем здесь Delphi?
← →
@!!ex © (2010-02-15 20:51) [128]> [127] oxffff © (15.02.10 20:47)
> Минусы -- один слот нельзя использовать для нескольких сигналов
> (например, для обработки группы кнопок). Сравните с системой
> событий VCL/CLX -- там как раз всё наоборот.
Правда чтоли??
Походу у меня сломанная Qt, позволяет привязывать к слоту кучу сигналов. :"(
А как это сделать на дельфи?
← →
oxffff © (2010-02-15 21:05) [129]
> @!!ex © (15.02.10 20:51) [128]
> > [127] oxffff © (15.02.10 20:47)
> > Минусы -- один слот нельзя использовать для нескольких
> сигналов
> > (например, для обработки группы кнопок). Сравните с системой
>
> > событий VCL/CLX -- там как раз всё наоборот.
>
> Правда чтоли??
>
> Походу у меня сломанная Qt, позволяет привязывать к слоту
> кучу сигналов. :"(
> А как это сделать на дельфи?
Плохо отзываешься о Delphi.
http://blogs.embarcadero.com/abauer/2008/08/15/38865
← →
@!!ex © (2010-02-15 21:08) [130]> [129] oxffff © (15.02.10 21:05)
нече так огород...
я не сомневаюсь что можно сделать все, написать свой MOC для дельфи, например.
И переписать все компоненты с поддержкой данного генерика....
Но это не сделано.
И до тех пор, пока сделано не будет - бессмысленно.
← →
oxffff © (2010-02-15 21:20) [131]
> @!!ex © (15.02.10 21:08) [130]
Мне больше интереснее посмотреть на универсальный invoker слотов QT.
Пришли исходник.
← →
@!!ex © (2010-02-15 21:25) [132]> [131] oxffff © (15.02.10 21:20)
Исходник чего?
Он же на уровне Qt реализован и моего понимания кода не хватит чтобы его оттуда выдрать в полном размере.
← →
Игорь Шевченко © (2010-02-15 21:25) [133]
> http://blogs.embarcadero.com/abauer/2008/08/15/38865
А зачем такой огород ?
← →
oxffff © (2010-02-15 21:30) [134]
> @!!ex © (15.02.10 21:25) [132]
> > [131] oxffff © (15.02.10 21:20)
>
> Исходник чего?
> Он же на уровне Qt реализован и моего понимания кода не
> хватит чтобы его оттуда выдрать в полном размере.
Жаль.
← →
oxffff © (2010-02-15 21:37) [135]
> Игорь Шевченко © (15.02.10 21:25) [133]
>
> > http://blogs.embarcadero.com/abauer/2008/08/15/38865
>
>
> А зачем такой огород ?
Например, если желаете прикрепить >1 обработчика вместо одного.
В противном случае вам придется писать некую обертку которая внутри производит вызов в цикле. НО это придется делать для каждого типа функции,процедуры,метода.
← →
oxffff © (2010-02-15 21:43) [136]
> Игорь Шевченко © (15.02.10 21:25) [133]
>
> > http://blogs.embarcadero.com/abauer/2008/08/15/38865
>
>
> А зачем такой огород ?
У .Net в этом отношении преимущество поскольку
Method Implementation Flags
The nonterminal symbol <impl> in the method definition form denotes the implementation
flags of the method (the ImplFlags entry of a Method record). The implementation flags are
defined in the enumeration CorMethodImpl in CorHdr.h and are described in the following list:
• Code type (mask 0x0003):
• cil (0x0000). The default. The method is implemented in common intermediate
language (CIL, a.k.a. IL or MSIL). Yes, I realize that CIL does not sound like a good
abbreviation for those familiar with the innards of the Visual C++ compiler,
because in that area it traditionally means “C intermediate language.” You can use
the il keyword if you don’t like cil. Or don’t use either of them; it is a default flag
anyway.
• native (0x0001). The method is implemented in native platform-specific code.
• optil (0x0002). The method is implemented in optimized IL. The optimized IL is
not supported in existing releases of the common language runtime, so this flag
should not be set.
> • runtime (0x0003). The method implementation is automatically
> generated by the
> runtime itself. Only certain methods from the base class
> library (Mscorlib.dll) carry
> this flag. If this flag is set, the RVA of the method must
> be 0.
← →
@!!ex © (2010-02-15 21:54) [137]> [133] Игорь Шевченко © (15.02.10 21:25)
Вещь замечательная.
Позволяет добиться принципиально нового уровня абстракции при создании компонентов.
Жаль только в дельфи эта штука мертворожденная, поскольку понятно, что никто не будет переделывать компоненты и саму РАД для поддержки этой технологии... а без поддержки основными модулями она бессмысленна.
← →
oxffff © (2010-02-15 21:55) [138]
> Жаль только в дельфи эта штука мертворожденная
Вы врач? :)
← →
Игорь Шевченко © (2010-02-15 21:57) [139]oxffff © (15.02.10 21:37) [135]
Не совсем понимаю - возможность вызвать для обработки одного события несколько процедур с разной сигнатурой ? А зачем ?
← →
Игорь Шевченко © (2010-02-15 21:57) [140]@!!ex © (15.02.10 21:54) [137]
> Вещь замечательная.
> Позволяет добиться принципиально нового уровня абстракции
> при создании компонентов.
Пример был бы более убедителен.
← →
oxffff © (2010-02-15 22:01) [141]
> Позволяет добиться принципиально нового уровня абстракции
> при создании компонентов.
Просто сказочный уровень абстракции.
Welcome to the next level.
← →
oxffff © (2010-02-15 22:05) [142]
> Игорь Шевченко © (15.02.10 21:57) [139]
> oxffff © (15.02.10 21:37) [135]
>
> Не совсем понимаю - возможность вызвать для обработки одного
> события несколько процедур с разной сигнатурой ? А зачем
> ?
Несколько процедур с идентичной сигнатурой.
Просто сейчас вам придется писать идентичный код для разных сигнатур.
.. (a:integer;b:integer)
for proc in Procs do proc(a,b)
.. (a:integer;b:integer;c:integer)
for proc in Procs do proc(a,b,c)
....
← →
Игорь Шевченко © (2010-02-15 22:11) [143]oxffff © (15.02.10 22:05) [142]
> Несколько процедур с идентичной сигнатурой.
Это вроде и без намаза можно сделать, или я опять же чего-то не понимаю.
> Просто сейчас вам придется писать идентичный код для разных
> сигнатур.
Ну да. Это настолько страшно, что отсутствие необходимости писания такого кода выдается за сказочно новый уровень абстракции ?
Все-таки наглядный пример был бы более полезен.
← →
@!!ex © (2010-02-15 22:18) [144]> [138] oxffff © (15.02.10 21:55)
> Вы врач? :)
Я пользователь, который не видит применения данной технологии в дельфи на данный момент времени.
Учитывая что VCL к единому стилю привести не могут, не то что на другую технологию перевести - поддержки со стороны VCL не будет никогда. А значит и возможности для использования тоже, т.к. если мешать обычные события и слот/сигнальные, то мы не упрощения кода добьемся, а усложнения.
Т.к. что не вижу пока будущего у этой технологии в дельфи.
> [140] Игорь Шевченко © (15.02.10 21:57)
Простой пример ничего не покажет, т.к. нет никакой разницы с событиями на мелких задачах, а большой пример я не имею желания делать, т.к. уже спать очень хочу.
Основное различие в том, что мы у объекта пишем не обработчик события, а реакцию на событие.
Разница в том, что обработчик предназначен для обрабатывания конкретного события, конкретного объекта.
А реакция может быть абстрагирована от самого события.
Например, сейчас имеем класс хранящий в себе набор параметров.
Ему нужно реагировать на изменение этих параметров через визуальные компоненты.
Я объявляю слот-реакцию типа dataModified и мне нужно знать изменился какой-то checkbox или в текстовом поле изменили текст, или еще что-то подобное произошло. Просто идет реакция на изменение данных.
При этом checkbox одновременно сообщает хранилищу, что данные изменились и при этом не теряет возможности сообщать другим объектам о том, что на него кликнули.
Понятно, что пример немного кривой, т.к. менять данные хранящиеся в классе напрямую - это неверно.
Но сейчас придумать более правильный пример, спать уже очень хочется.
← →
oxffff © (2010-02-15 22:20) [145]
> Игорь Шевченко © (15.02.10 22:11) [143]
> Ну да. Это настолько страшно, что отсутствие необходимости
> писания такого кода выдается за сказочно новый уровень абстракции
> ?
А для тех кто смотрит сквозь абстракции безусловно это не впечатлит.
Собственно и ничем тут впечатлять. Грубо есть некий способ реагировать на событие нескольким обработчикам(то есть события в контейнере) и есть обобщенный типобезопасный способ их вызова.
>Все-таки наглядный пример был бы более полезен.
Я бы тоже хотел увидеть вход на метауровень.
← →
@!!ex © (2010-02-15 22:21) [146]> [139] Игорь Шевченко © (15.02.10 21:57)
> Не совсем понимаю - возможность вызвать для обработки одного
> события несколько процедур с разной сигнатурой ? А зачем
> ?
Например событие изменения выбранного элементы в списке.
Одному объекту достаточно узнать о самом факте изменения.
Другой объект хочет узнать какой элемент выбран в данный момент.
Важно что не нужно делать несколько событий, чтобы сообщить РАЗНЫМ объекатм о факте изменения.
А разные сигнатуры позволяют инициировать событие с полным списокм параметров, а получатели сами выбирают какие параметры отбросить.
← →
@!!ex © (2010-02-15 22:24) [147]> [141] oxffff © (15.02.10 22:01)
> Просто сказочный уровень абстракции.
> Welcome to the next level.
Ну лично для меня это пока откровение.
Тот уровень взаимодействия что я вижу в большинстве Дельфи проектах(видимо просто не вижу нормальных) очень сильно связывают объекты между собой, что на мой взгляд неправильно и я всегда стремился от этого избавиться.
Сейчас у меня есть такая возможность и это оооочень радует. :)
← →
Игорь Шевченко © (2010-02-15 22:27) [148]@!!ex © (15.02.10 22:21) [146]
> Например событие изменения выбранного элементы в списке.
>
> Одному объекту достаточно узнать о самом факте изменения.
>
> Другой объект хочет узнать какой элемент выбран в данный
> момент.
> Важно что не нужно делать несколько событий, чтобы сообщить
> РАЗНЫМ объекатм о факте изменения.
Я тоже не вижу тут необходимости делать несколько событий, поскольку событие одно - изменение элемента в списке.
← →
oxffff © (2010-02-15 22:31) [149]
> А разные сигнатуры позволяют инициировать событие с полным
> списокм параметров, а получатели сами выбирают какие параметры
> отбросить.
Что то мне это напоминает SAP. Интересно кто у кого содрал.
Собственно магия в словах присутствует. Но ее там нет.
НО!!!
Корретней написать что получатель события реагирует строго на событие с конкретной сигнатурой, но у него есть возможность просто псевдопроигнорировать часть или все параметры. Но это не магия .
Ее здесь нет.
← →
oxffff © (2010-02-15 22:39) [150]
> @!!ex © (15.02.10 22:24) [147]
> > [141] oxffff © (15.02.10 22:01)
> > Просто сказочный уровень абстракции.
> > Welcome to the next level.
>
> Ну лично для меня это пока откровение.
> Тот уровень взаимодействия что я вижу в большинстве Дельфи
> проектах(видимо просто не вижу нормальных) очень сильно
> связывают объекты между собой, что на мой взгляд неправильно
> и я всегда стремился от этого избавиться.
> Сейчас у меня есть такая возможность и это оооочень радует.
> :)
Для того, чтобы связать одни объекты с другими, ну просто задаться такой целью. И здесь multicastdelegate не причем. IMHO.
← →
@!!ex © (2010-02-15 22:40) [151]> [148] Игорь Шевченко © (15.02.10 22:27)
Вот именно. ;)
Вы сейчас привели пример на уровне:
Объеет должен знать о существовании списка.
Так вот: не должен.
Мне чем и нравится то, что я сейчас изучаю - очень четкое отделение визуального представления и внутренней обработки.
Объект не знает и не должен знать что за событие вызвало изменение данных. Элемент в списке выбрали, или файл с данными изменился, или по сети данные пришли.
Есть факт изменения данных, но нет привязки к самому объекту, который данные изменяет.
> [149] oxffff © (15.02.10 22:31)
Да я и не говорил что магия. :)
Просто очень хорошая идея, ИМХО.
P.S.
Все. Пойду спать.
Спасибо всем за дискуссию. Она позволила мне лучше понять весь свалившияйся на меня материал.
← →
Eraser © (2010-02-15 22:42) [152]> [144] @!!ex © (15.02.10 22:18)
не сказал бы что это уж очень хороший подход. получается события логических объектов надо привязывать к UI.
мне больше нравится механизм экшинов в делфи, вот там можно четко разграничить UI и логику, в большинстве случаев.
← →
oxffff © (2010-02-15 22:43) [153]
> Что то мне это напоминает SAP. Интересно кто у кого содрал.
Как говорят наши Пермские коллеги: Это все "Дойчен Солдатен".
Видимо немецкие солдаты являются поклонниками QT.
← →
Anatoly Podgoretsky © (2010-02-15 22:45) [154]> Игорь Шевченко (15.02.2010 22:27:28) [148]
Очередная поделка для ла, то есть не очень опытных программистов.
← →
oxffff © (2010-02-15 22:48) [155]>@!!ex © (15.02.10 22:40) [151]
> Вот именно. ;)
> Вы сейчас привели пример на уровне:
> Объеет должен знать о существовании списка.
>
> Так вот: не должен.
Интересно есть например такое событие как TNotifyEvent.
Где здесь в сигнатуре явное указание инициатора события?
← →
Игорь Шевченко © (2010-02-15 22:57) [156]@!!ex © (15.02.10 22:40) [151]
> Вот именно. ;)
> Вы сейчас привели пример на уровне:
> Объеет должен знать о существовании списка.
>
> Так вот: не должен.
Э...тут я запутался. Есть список, на изменение "выбранного элемента" которого должны быть реакции у каких-то объектов. Эти реагирующие объекты не должны знать о списке ?
← →
xayam © (2010-02-15 23:25) [157]Удалено модератором
← →
картман © (2010-02-16 01:56) [158]
> Есть список, на изменение "выбранного
> элемента" которого должны быть реакции у каких-то объектов.
> Эти реагирующие объекты не должны знать о списке ?
до чего наука дошла, однако)
← →
@!!ex © (2010-02-16 09:46) [159]> [154] Anatoly Podgoretsky © (15.02.10 22:45)
> Очередная поделка для ла, то есть не очень опытных программистов.
Я не видел ни одного нормально проекта на дельфи. везде адское переплетение событие между формами и объектами....
> [155] oxffff © (15.02.10 22:48)
> Где здесь в сигнатуре явное указание инициатора события?
Ну так не умеют же компоненты его генерировать.
> [156] Игорь Шевченко © (15.02.10 22:57)
> Эти реагирующие объекты не должны знать о списке ?
Нет, не должны. Они должны знать о факте изменения выбранного элемента, а не о том, что список(который является визуальным отображение и никак с функциональностью этих объектов не связан) изменился.
← →
pasha_golub © (2010-02-16 10:05) [160]Тут давеча бриффинг по Fulcrum был. Я связан non-disclosure agreement, посему открыто говорить не могу, но есть подозрения, что Винда будет не единственной платформой. :)
Страницы: 1 2 3 4 5 6 7 8 вся ветка
Форум: "Прочее";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.83 MB
Время: 0.123 c