![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Virgo |
|
|||
|
Unregistered |
Подскажите, пожалуйста, я новичок в этом деле
Есть две формы: fmMain и fmChild TfmChild = class(TForm) все остальные формы в проекте наследуются от fmChild На fmChild реализую некоторые вещи, одинаковые для всех наследуемых от нее, в частности, при создании дочерней необходимо на главной динамически создать кнопки аналогичные системным Таким образом на fmChild я рисую на главной форме нужные кнопки с помощью функции DrawFrameControl(WDc,RMax,DFC_CAPTION, DFCS_CAPTIONMAX); Создаю четыре собственных сообщения, обработчики сообщений wm_BtnClkMin = wm_User + 111; wm_BtnClkMax = wm_User + 112; wm_BtnClkClose = wm_User + 113; wm_BtnClkRestore = wm_User + 114; private procedure wmBtnClkMin(var msg: TMessage); message wm_BtnClkMin; procedure wmBtnClkMax(var msg: TMessage); message wm_BtnClkMax; procedure wmBtnClkClose(var msg: TMessage); message wm_BtnClkClose; procedure wmBtnClkRestore(var msg: TMessage); message wm_BtnClkRestore; public procedure DrawBtnMin; procedure DrawBtnMax; procedure DrawBtnClose; procedure DrawBtnRestore; Ниже пример для одной кнопки, для других аналогично procedure TfmChild.DrawBtnMin; var WDc: HDc; Cx,Cy: Integer; Row, Col : Integer; XFrame, Yframe: Integer; begin WDc := GetWindowDc(fmMain.Handle); Cx := GetSystemMetrics(SM_CXSize); Cy := GetSystemMetrics(SM_CYSize); xFrame := GetSystemMetrics(SM_CXFrame); yFrame := GetSystemMetrics(SM_CYFrame); RMin := Bounds(fmMain.Width - 3*Cx - 2, yFrame + Cy + 2, Cx - 2, Cy - 4); if Press then DrawFrameControl(WDc,RMin,DFC_CAPTION, DFCS_CAPTIONMIN or DFCS_PUSHED) else DrawFrameControl(WDc,RMin,DFC_CAPTION, DFCS_CAPTIONMIN); ReleaseDc(fmMain.Handle,WDC); fmMain.wmncLButtonUp(wm_NclButtonUp):= wmncLButtonUp(wm_NclButtonUp); end; procedure TfmChild.wmBtnClkMin(var msg: TMessage); begin ShowWindow(self.WindowHandle,SW_MINIMIZE); end; procedure TfmChild.wmncLButtonUp(var msg: TWMncLBUTTONUP); var pt: TPoint; begin inherited; pt := Point(msg.XCursor - Left,msg.YCursor - top); if PtInRect(RMin,pt) then begin Press := False; DrawBtnMin; PostMessage(Handle, wm_BtnClkMin, 0,0); end; if PtInRect(RMax,pt) then begin Press := False; DrawBtnMax; PostMessage(Handle, wm_BtnClkMax, 0,0); end; if PtInRect(RClose,pt) then begin Press := False; DrawBtnClose; PostMessage(Handle, wm_BtnClkClose, 0,0); end; end; ------------------------------- Вопрос - как мне на главной форме правильно обработать сообщения (нажатие на эти кнопки) |
|||
|
||||
| Pathfider |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 13.7.2004 Где: все там же Репутация: нет Всего: 1 |
Если ты хочешь обрабатать только сообщения, то используй локальную ловушку - PeekMessage
--------------------
Trust is a weakness |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |