Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

Как создать событие на изменение своей переменной   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.74 MB
Время: 0.019 c
1-43535
Mentov
2004-02-29 17:50
2004.03.14
RichEdit


1-43560
LAndreyV
2004-02-27 18:05
2004.03.14
Компиляция с поддержкой БД. Как?


3-43284
iVovs
2004-02-12 10:34
2004.03.14
Хранение файлов в Paradox


1-43562
MasterKolyan
2004-02-27 14:19
2004.03.14
Как создать событие на изменение своей переменной


14-43852
denkop
2004-02-18 22:42
2004.03.14
настройка аутентификации пользователей LAN в XP Pro





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский