Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.02;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.065 c
14-1103103050
Павел
2004-12-15 12:30
2005.01.02
Не грузится Windows


14-1102801981
Perwomai
2004-12-12 00:53
2005.01.02
Отмена льгот в России - заключение немецких СМИ


14-1102662368
MBo
2004-12-10 10:06
2005.01.02
Пятничные задачи. Вася Пупкин сегодня отдыхает.


1-1103270172
Alien_D
2004-12-17 10:56
2005.01.02
Как спрятать MDIChild


1-1103287960
Mate_ru
2004-12-17 15:52
2005.01.02
Image