Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.76 MB
Время: 0.053 c
3-43356
Gerakl
2004-02-16 10:55
2004.03.14
ADO


1-43677
Mishenka
2004-03-01 00:16
2004.03.14
Кодировка Dos в RichEdit???


14-43875
Dmitriy O.
2004-01-23 13:26
2004.03.14
Поздравляю всех с днем защитника отечества !


14-43810
syte_ser78
2004-02-22 00:29
2004.03.14
free delphi


1-43655
Kyrt
2004-03-02 05:06
2004.03.14
BDE