aa = ::CallWindowProc((FARPROC)fOldProc,hwnd, uMsg, wParam, lParam);
return aa;
}
то возникает глюк, который заключается в том, что в дальнейшем все сообщения от окон данного потока идут на кнопку, и соответственно, на каком бы окошке потока не щелкнул мышой левой кнопкой — вылазит MessageBox.
Кто-нить может объяснить почему так происходит?
Здравствуйте, sfates, Вы писали:
S>то возникает глюк, который заключается в том, что в дальнейшем все сообщения от окон данного потока идут на кнопку, и соответственно, на каком бы окошке потока не щелкнул мышой левой кнопкой — вылазит MessageBox. S>Кто-нить может объяснить почему так происходит?
Очевидно какой-то глюк с Mouse Capture.
Можно
1. Не использовать стандартную кнопку, а рисовать самому.
2. В Дельфи/Билдере нотификации автоматически отражаются, т.е. можно попытаться обрабатывать не WM_LBUTTONDOWN а что-то вроде CN_CLICKED или как его там.
3. Попытаться пофиксить поведение захвата мыши.
Здравствуйте, Кодёнок, Вы писали:
Кё>Очевидно какой-то глюк с Mouse Capture.
это понятно, просто сам факт того что MessageBox так убивает — это странно, такого не должно же быть....
Кё>Можно Кё>1. Не использовать стандартную кнопку, а рисовать самому. Кё>2. В Дельфи/Билдере нотификации автоматически отражаются, т.е. можно попытаться обрабатывать не WM_LBUTTONDOWN а что-то вроде CN_CLICKED или как его там. Кё>3. Попытаться пофиксить поведение захвата мыши.
Это понятно, можно и TButton использовать, но хочеться до правды докапаться, поросидел с этим целый день, искал в инете ответ.... ничего нет...вот и решил на форуме вопрос задать.....
Мож все-таки кто-нить знает причину????
Самое прикольное, что если также поступить с Builder-овской кнопкой (TButton) или VC++ (CButton), то получается то же самое, хотя они-то не используют стандартные кнопки, а сами рисуют....
Здравствуйте, sfates, Вы писали:
S>Самое прикольное, что если также поступить с Builder-овской кнопкой (TButton) или VC++ (CButton), то получается то же самое, хотя они-то не используют стандартные кнопки, а сами рисуют....
Здравствуйте, sfates, Вы писали:
Кё>>Они оба используют стандартную кнопку
S>Как так? Ведь если посмотреть, то они имеют классы окон CButton и TButton, и просто button-ом там и не пахнет? Я ошибаюсь?
Они просто подменили имя класса окна, либо исопльзуют свой класс, но стандартную оконную процедуру (кнопки).
Здравствуйте, Кодёнок, Вы писали:
[skip] Кё>Они оба используют стандартную кнопку.
Не факт. Delphi/Builder 1..6 — все время рисовали через DrawFrameControl()
Здравствуйте, GU Glez, Вы писали:
Кё>>Они оба используют стандартную кнопку. GG>Не факт. Delphi/Builder 1..6 — все время рисовали через DrawFrameControl()
Это они TBitBtn рисовали, а TButton нет. Ничего кроме куска исходника VCL опровержением не считаю
Здравствуйте, sfates, Вы писали:
Кё>>Они просто подменили имя класса окна, либо исопльзуют свой класс, но стандартную оконную процедуру (кнопки).
S>А исходя из чего сделаны данные выводы? И я не поиню ф-цию, которая подменяет имя класса окна.....
Исходя из копания в исходниках VCL давным-давно, с наивным желанием слегка модифицировать TButton под свои нужды Это верно для Delphi 3..7.
Здравствуйте, Кодёнок, Вы писали:
Кё>Исходя из копания в исходниках VCL давным-давно, с наивным желанием слегка модифицировать TButton под свои нужды Это верно для Delphi 3..7.
Ну и интрига.... я думал у них все по-честному , ну а все-таки ф-цию, которая подменяет имя класса окна не помните случаем, мож пригодиться......
Здравствуйте, sfates, Вы писали:
Кё>>Исходя из копания в исходниках VCL давным-давно, с наивным желанием слегка модифицировать TButton под свои нужды Это верно для Delphi 3..7.
S>Ну и интрига.... я думал у них все по-честному , ну а все-таки ф-цию, которая подменяет имя класса окна не помните случаем, мож пригодиться......
Я тоже не знаю такой Скорее всего и нет. Они зарегистрировали класс TButton, а в вместо DefWindowProc используют процедуру класса Button.
Здравствуйте, Кодёнок, Вы писали: Кё>Это они TBitBtn рисовали, а TButton нет. Ничего кроме куска исходника VCL опровержением не считаю
+1
Имелось ввиду про TBitBtn, а TButton — рисуют вызовом CallWindowProc(WNDPROC_OF_BUTTON_CLASS, ...) . Исходников VCL нет — не пользуемся.