Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.108 c
2-1269192324
Невилл
2010-03-21 20:25
2010.08.27
Delphi2009 и StringGrid


2-1269770353
Delphist2
2010-03-28 13:59
2010.08.27
locktype в ADO


2-1274677239
viktooor
2010-05-24 09:00
2010.08.27
Поис в диапазоне дат


2-1267710669
Евгений Р.
2010-03-04 16:51
2010.08.27
Использование tOpenDialog


15-1275668249
xayam
2010-06-04 20:17
2010.08.27
События в javascript





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский