Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 416

/ вопрос открыт /

Здравствуйте, эксперты!

Появилась необходимость перехватить нажатие кнопок разворачивания/сворачивание/восстановления mdiChild

или - определить момент добавление/удаление этих кнопок в MainMenu
2х недельное копание в исходниках дало очень много и ничего.

замечу - сообщения WM_MDI* к этому не относятся, т.е. создание перехватчика для MainForm и клиентской части ни к чему не привело.
:(
определил только одно - что при изменении mdiChild, в ClientHandle передается сообщение WM_SIZE, но при обработке сообщение не получается определить кто его послал или кому оно идет

вот код перехватывания в клиентской части:

Приложение:
  1. MyClass = class(TCustomControl)
  2. OldWinProc, NewWinProc: Pointer;
  3. procedure NewWinProcedure(var Msg: TMessage);
  4.  
  5. constructor MyClass.Create(AOwner : TComponent);
  6. begin
  7. NewWinProc := MakeObjectInstance (NewWinProcedure);
  8. OldWinProc := Pointer (SetWindowLong (
  9. ClientHandle, GWL_WNDPROC, Cardinal (NewWinProc)));
  10. end;
  11.  
  12. procedure MyClass.NewWinProcedure(var Msg: TMessage);
  13. //var
  14. //mdi : ^MDICREATESTRUCT;
  15. //wc : TWinControl;
  16. begin
  17.  
  18. Msg.Result := CallWindowProc ( OldWinProc,
  19. ClientHandle, Msg.Msg, Msg.wParam, Msg.lParam);
  20.  
  21.  
  22. if Msg.Msg = WM_MDISETMENU then
  23. ShowMessage('ok');
  24.  
  25. end;
  26.  
  27.  


Тарасов Андрей Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Тарасов Андрей (статус: Посетитель)
Вопрос отправлен: 12 июля 2010, 18:07
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 12 июля 2010, 19:05; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 12 июля 2010, 18:25 [#1]:

Чой-то не вижу в ентом куске кода обработчика сообщения WM_SYSCOMMAND... Не знаю, как оно там с MDIChild-окнами, но попробуй, вдруг чо получится.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Тарасов Андрей

Тарасов Андрей (статус: Посетитель), 12 июля 2010, 18:36 [#2]:

перехват WM_SYSCOMMAND тоже ничего не дал...

точнее в обработчике MainForm он дал возможность перехватить нажатие на оконные кнопки в MainMenu, но не момент их создания/уничтожения.
В клиентской зоне это сообщение не обрабатывается :/
Тарасов Андрей

Тарасов Андрей (статус: Посетитель), 12 июля 2010, 19:05 [#3]:

Короче я докопался до одного момента - все обрабатывает DefMDIChildProc, эта функция вызывается для обработки изменения размера.
Осталось придумать как глобально подменить эту функцию своей.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:41
Выполнено за 0.02 сек.