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

Вниз

Как из своего класса обрабатывать сообщения некого окна?   Найти похожие ветки 

 
Zilog ©   (2004-12-16 14:58) [0]

Как из своего класса обрабатывать сообщения некого окна?

есть у меня класс, возникла нужда обработать некоторые сообщения адресованные форме. В классе известен только handle этого окна.

Каким образом это можно сделать?


 
Digitman ©   (2004-12-16 15:04) [1]

while PeekMessage(msg, somehandle, 0, 0, PM_REMOVE) do
 begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
 end;


 
Zilog ©   (2004-12-16 15:53) [2]

я так понимаю PeekMessage надо вызывать постоянно, на предмет проверки новых сообщений... мне это не совсем подходит.
Да и PM_REMOVE видимо следует, к тому же поменять на PM_NOREMOVE, чтобы не лишить окошко обрабатывать положенные ей месседжи.

А нет ли возможности переопределить обработку сообщений на себя? Чтобы процедура обработки вызывалась по мере появления новых сообщений.


 
Digitman ©   (2004-12-16 16:00) [3]

Удалено модератором


 
Суслик ©   (2004-12-16 16:00) [4]


> А нет ли возможности переопределить обработку сообщений
> на себя?

переопределить оконную функцию.


 
Zilog ©   (2004-12-16 16:05) [5]

>>ЧТО ТЕБЕ НАДОБНО, СТАРЧЕ ...

делаю компонент, который влияет на визуализацию окна.
Нужно обрабатывать сообщения, которые возникают к примеру при перемещении окна...


 
Zilog ©   (2004-12-16 16:08) [6]

>>ЧТО ТЕБЕ НАДОБНО, СТАРЧЕ ...

делаю компонент, который влияет на визуализацию окна.
Нужно обрабатывать сообщения, которые возникают к примеру при перемещении окна...


 
Digitman ©   (2004-12-16 16:18) [7]

SetWindowLong() - самое простое и очевидное решение.


 
Zilog ©   (2004-12-16 16:18) [8]

>>Digitman ©   (16.12.04 16:00) [3]
>>см. SetWindowLong() с параметром GWL_WNDPROC

GWL_WNDPROC - Sets a new address for the window procedure.

Получается SetWindowLong полностью переопределяет оконные функции?


 
Суслик ©   (2004-12-16 16:20) [9]


> Получается SetWindowLong полностью переопределяет оконные
> функции?

1 получи старое значене оконной функции
2 определи новую функцию. В случае если есть потребность вызова старой фнукции вызываешь.


 
Reindeer Moss Eater ©   (2004-12-16 16:20) [10]

Интересно, а как можно переопределить "неполностью"


 
Digitman ©   (2004-12-16 16:21) [11]


> Получается SetWindowLong полностью переопределяет оконные
> функции?


да.
с условиями, оговоренными в MSDN


 
Zilog ©   (2004-12-16 16:21) [12]

>>Reindeer Moss Eater ©

ну к примеру после обработки сообщений родной оконной процедурой, сообщения (необработанные) передавались мне :)
Или такое невозможно?


 
Суслик ©   (2004-12-16 16:23) [13]


>  [12] Zilog ©   (16.12.04 16:21)

наоборот делай...
ну в общем я написал уже выше


 
Zilog ©   (2004-12-16 16:23) [14]

>Суслик ©   (16.12.04 16:20) [9]
>1 получи старое значене оконной функции

не намекнёте ли название функции?


 
Суслик ©   (2004-12-16 16:25) [15]


>  [14] Zilog ©   (16.12.04 16:23)

Неужели не догадаешься сам? :)))
Set на Get замени...


 
Digitman ©   (2004-12-16 16:30) [16]

Удалено модератором


 
Суслик ©   (2004-12-16 16:32) [17]

Удалено модератором


 
Zilog ©   (2004-12-16 16:32) [18]

Удалено модератором


 
Digitman ©   (2004-12-16 16:33) [19]

Удалено модератором


 
Zilog ©   (2004-12-16 16:34) [20]

Удалено модератором


 
Суслик ©   (2004-12-16 16:36) [21]

Удалено модератором


 
Zilog ©   (2004-12-16 16:39) [22]

Удалено модератором


 
Zilog ©   (2004-12-16 16:40) [23]

Удалено модератором


 
Zilog ©   (2004-12-16 16:42) [24]

непонимаю, что указывать в качестве нового параметра?

new address for the window procedure -

и как мне узнать адрес своей процедуры?


 
Суслик ©   (2004-12-16 16:44) [25]


>  [24] Zilog ©   (16.12.04 16:42)
> и как мне узнать адрес своей процедуры?

открываешь в модуле classes.pas тело фукнции AllocateHWnd и изучаешь содержимое, как модно тут говорить, до полного пресветления.


 
Digitman ©   (2004-12-16 16:48) [26]


> указание тобою на размеры моего мозга, явно тебе чети не
> делает


мне оно по поясу - твоя якобы оценка якобы моей якобы чести.


> что указывать в качестве нового параметра


адрес оконной ф-ции.


> как мне узнать адрес своей процедуры


для начала неполохо было бы НАПИСАТЬ самому эту ф-цию.
и потом уе рассуждать, кто кому какую честь делает или не делает.

справка, сударь, дана для чтения, анализа и последующих действий по образу и подобию !  а не для "щоб було".


 
Суслик ©   (2004-12-16 16:51) [27]

Вечная тема - спецы и новички-торопыги :)))


> [26] Digitman ©   (16.12.04 16:48)


Собственно вопрос о том, как из метода сделать оконную функцию (а это нужно, т.к. речь была про класс) вполне закономерен. И не сразу наткнешься на реализацию этого.

Имхо.


 
Digitman ©   (2004-12-16 16:55) [28]


> Собственно вопрос о том, как из метода сделать оконную функцию
>


не согласен.
в вопросе об это нет ни слова.
более того - нет и не может быть никаких сообщений, адресованных форме, ибо Win32, сам понимаешь, знать не знает ни о каких бы то там ни было формах : там есть "окна" и не более того. А применительно к "окнам" есть и соотв. Win32API-ф-ции , о которых было и конкретные упомимнание и намеки.


 
Digitman ©   (2004-12-16 16:58) [29]


> сообщения некого окна


> сообщения адресованные форме


пока не будет четкого понимания соответствия и взаимосвязи этих терминов, механизмов, реализаций - реакция моя будет всегда одна и та же.


 
Суслик ©   (2004-12-16 17:01) [30]

Удалено модератором


 
Zilog ©   (2004-12-16 21:04) [31]

Удалено модератором


 
Anatoly Podgoretsky ©   (2004-12-16 21:34) [32]

Удалено модератором


 
Zilog ©   (2004-12-16 21:39) [33]

Удалено модератором


 
Gero ©   (2004-12-16 22:27) [34]

Удалено модератором


 
Verg ©   (2004-12-16 22:30) [35]

Удалено модератором


 
Gero ©   (2004-12-16 22:34) [36]

Удалено модератором


 
Fay ©   (2004-12-17 05:32) [37]

Весёлая ветка 8)


 
Zilog ©   (2004-12-17 15:17) [38]

а сабж моржно сделать через
Application.OnMessage
без вышеописанного геморроя.

>>Fay ©   (17.12.04 05:32) [37]
Да, старческий маразм даёт о себе знать.


 
Digitman ©   (2004-12-17 15:25) [39]


> Zilog ©   (17.12.04 15:17) [38]


> сабж моржно сделать через
> Application.OnMessage


цитирую :


> из своего класса


TApplication - ТВОЙ класс ?!

И ты в вопросе, конечно же, ЯВНО упомянул, что твой класс создает окно в основном трэде процесса ?!

И у кого после этого "маразм", спрашивается ?

Уймись.
И садись за книжки.


 
Zilog ©   (2004-12-17 15:41) [40]

>>Digitman ©   (17.12.04 15:25) [39]
>>И у кого после этого "маразм", спрашивается ?

У тебя например.
Отсутствие достаточных знаний - не признак маразма.
А вот необьяснимое желание научить всех жить, указать каждому пальцем направление - как минимум повод задуматься.

Я конечно понимаю, что ты себя очень любишь, но не надо при каждом случае это показывать.



Страницы: 1 2 вся ветка

Форум: "Основная";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.038 c
3-1102348101
Dimedrol
2004-12-06 18:48
2005.01.02
Все равно TTable не сортирует


4-1100620136
webpauk
2004-11-16 18:48
2005.01.02
WM_NCHITTEST


14-1102582579
Кудесник
2004-12-09 11:56
2005.01.02
Может кто перевести страницу текста на нормальный английский?


3-1102426786
Александр В
2004-12-07 16:39
2005.01.02
Как прервать ADOQuery.Open?


14-1102721809
Piter
2004-12-11 02:36
2005.01.02
Кто-нибудь пользовался Skype?





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