Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.85 MB
Время: 0.089 c
15-1264555860
Kostafey
2010-01-27 04:31
2010.08.27
Патент на изобретение


15-1267521403
sniknik
2010-03-02 12:16
2010.08.27
Символ + и TIdURI.URLEncode, как правильно?


15-1269615443
tesseract
2010-03-26 17:57
2010.08.27
собери себе ОС


15-1267565402
Юрий
2010-03-03 00:30
2010.08.27
С днем рождения ! 3 марта 2010 среда


3-1240576232
Гарик
2009-04-24 16:30
2010.08.27
Пользователи в Oracle