Текущий архив: 2004.03.14;
Скачать: CL | DM;
ВнизКак создать событие на изменение своей переменной Найти похожие ветки
← →
Digitman (2004-02-27 17:48) [120]
> Только MyObj.Dispatch(Msg) не использовать
это почему же не использовать, если как раз для того и предназначен Dispatch() и механизм трансляции подобных дин.вызовов ?
В результате работы Dispatch() и будет вызван метод DoIt банальным call dword ptr [reg32] .. обычный вызов подпрограммы !
← →
Никто (2004-02-27 17:48) [121]Еще раз для всех (вновь пришедших) желающих принять участие в дискуссии: речь идет не о Win-сообщениях, а о сообщениях в контексте ООП.
← →
Silver_ (2004-02-27 17:49) [122]
> MasterKolyan (27.02.04 17:38) [112]
В чем дело то. Вроде усе нормально. Да и потом
> Может че напортачил но ход мыслей думаю ясен
главное подчеркнуто
← →
Defunct (2004-02-27 17:50) [123]Никто (27.02.04 17:32) [110]
> Иначе говоря: объект не будет откликаться на сообщения, которые у него не описаны (в секции public).
Ого, хорошее высказывание..
Проверьте в одом модуле:
Obj1 = Object
Prirvate
Procedure DoIt;
End;
Obj2 = Object
Private
Procedure DoThat;
End;
...
Implementation
Var O1 : Obj1;
O2 : Obj2;
Porcedure Obj1.DoIt;
Begin
End;
Procedure Obj2.DoThat;
Begin
O1.DoIt;
End;
Begin
O2.DoThat;
End.
← →
Digitman (2004-02-27 17:50) [124]
> Никто (27.02.04 17:42) [118]
опять же ты напрасно здесь пытаешься противопоставить заведомо различные вещи) ... дин.метод - это дин.метод, стат.метод - это стат.метод
← →
Digitman (2004-02-27 17:55) [125]
> Никто (27.02.04 17:42) [118]
в терминологии и концепции ООП нет ни слова ни о каких спецификаторах метода message MESSAGE_CODE
это же специальный спецификатор (мало ли таких еще в каждом отдельно взятом языке ООП-программирования !), который предписывает компилятору совершенно иное, специальное поведение при генерации кода метода и регистрации его в тех или иных ран-тайм-таблицах !
← →
Никто (2004-02-27 17:58) [126]2 Digitman
Потому что вот этим: MyObj.Dispatch(Msg) вы отсылаете объекту ссобщение (с точки зрения ООП) обработать ваши личные (на пару с Борландом и Майкрософтом) данные (а имеено Msg), преобразовав их перед этим дополнительно и решив "куда же их еще переслать?". Причем, метод этой дополнительной обработки (диспетчеризации) никоим образом не определяется в ООП (кстати, метод Dispatch - разработка Borland"a, а Microsoft тут является только лишь законодателем формата Msg). То же самое (с некоторыми допущениями) Вам сделает обыкновенная оконная функция, в которой ООП и не пахнет.
← →
Mikhial (2004-02-27 17:58) [127]
> Digitman © (27.02.04 17:55) [125]
Да бростье - бесполезно :)
← →
WebErr (2004-02-27 18:00) [128]
> WebErr © (27.02.04 17:13) [99]
> а поподробнее можно, или в виде кода хотябы представить...
const
WM_SOMEMESSAGE = WM_USER + 1;
...
TSomeClass = class(...)
...
procedure CatchMsg(var Msg: TMessage); message WM_SOMEMESSAGE;
...
end;
...
procedure CatchMsg(var Msg: TMessage);
begin
// делай тут что хочешь
end;
А вот как и что будет посылать это сообщение, в этом вся и загвоздка! Можно сделать вообще просто, используя VCL, вместо твоей переменной изменять какой-нибудь компонент, а потом ловить возникающее событие - тут уж никакого API не надо! :)))) Но если хочешь API, то изменяй что-то, что вызывает событие, так как сама по себе переменная - это область памяти, т. е. системе пофигу что там лежит - там роется пользователь-программер (извените за каламбур, но область эта называется пользовательской :).
← →
Mikhail (2004-02-27 18:00) [129]Ну нравится человеку на другом языке говорить ...
← →
Mikhail (2004-02-27 18:01) [130]Ну нравится человеку на другом языке говорить ...
← →
Digitman (2004-02-27 18:05) [131]
> Никто (27.02.04 17:58) [126]
> Потому что вот этим: MyObj.Dispatch(Msg) вы отсылаете объекту
> ссобщение
никаких сообщений я объекту тем самым не отсылаю)
в конечном итоге я просто (как и в любом ином случае) вызываю одну из подпрограмм, внутренне реализуемых классом объекта, адрес который вычисляется не статически, а динамически, на основании данных, заранее подготовленных компилятором на этапе компиляции по моим же (как программиста) указаниям
ладно, устал я вже)
ушел.
попытайся, если есть терпение, таки отстоять свою т.з. другим коллегам
← →
Никто (2004-02-27 18:06) [132]2 Digitman
С чего все началось:
Никто (27.02.04 14:37) [5]
1. По идеологии ООП "вызов метода" аналогичен "посылке сообщения".
Ни о каких Борландах, Майкрософтах, окнах и прочих особенностях Windows ни слова не было сказано. Только про идеологию ООП.
Но видимо, это было масло в огонь. Потому что читать ответы Вы, видимо не научились.
"что за ерунда ?" - ваш ответ. Будьте добры, поясните, что ерундового в основах ООП? Лишь то, что Вы про них не читали, а знаете только из практического опыта? Но это еще не повод заводить научные диспуты.
P.S. Кстати, я там же написал:
2. "Событие на изменение переменной" - это из области свойств:
property MyVariable: integer read m_iMyVariable write SetMyVariable;
в таком случае SetMyVariable - метод, вызываемый при (попытке) изменения переменной (см. п. 1).
← →
Никто (2004-02-27 18:18) [133]Блин... а работы то навалили! Пошел я отседава...
← →
Verg (2004-02-27 18:22) [134]Слушай, а при чем тут Win-не-Win?
Если абстрактно,
Я сообщениями называю возможно отложенный вызов метода объекта(ов) удовлетворяющего(их) неким условиям, заложенным в самом сообщении или какой-либо процедуры с содержимым этого сообщения в качестве его(ее)параметра. Отсюда следует, что процедуры или методы объектов, вызов которых будет осуществлен для обработки сообщения, должны имет одинаковый, заранее оговоренный прототип. Сообщения могут быть установлены в очередь(и) по принципу FIFO- "первый вошел, первый вышел" (очередность).
Т.е. главный свойства - унификация, адресность, оложенность/очередность.
Вызов произвольного метода же ничем таким ограничен быть не может и принципально ничем не отличается от вызова некоей процедуры с сыллкой на экземпляр объекта в качестве неявного (но фактического) параметра.
Реализация механизмов сообщений известна еще задолго до появления компиляторов c языков ООП. (Я думаю, примерно, когда почту придумали).
Поэтому термин сообщение (message) нельзя вот так, с легкой руки, подарить ООП для обозначения вызова метода.
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2004.03.14;
Скачать: CL | DM;
Память: 0.74 MB
Время: 0.025 c