|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.01.2009, 23:06 | #1 |
Форумчанин
Регистрация: 12.10.2008
Сообщений: 131
|
Сообщение WM_NCLBUTTONUP
Здравствуйте. Я хочу сделать форму прозрачной при щелчке по заголовке формы. При отпускании кнопки мыши форма восстанавливает свое состояние. Проблема в том, что обработка сообщения WM_NCLBUTTONUP срабатывает только, если форма полноэкранная. А если нет то, сообщение не обрабатывается. КАК ЗАСТАВИТЬ ПРОЦЕДУРУ WMNCLButtonUp СРАБАТЫВАТЬ ПРИ ЛЮБОМ ВИДЕ ОКНА. Спасибо за ответ.
Исходный код: Код:
Последний раз редактировалось rpy3uH; 04.01.2009 в 09:13. |
04.01.2009, 03:26 | #2 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
событие WM_NCLBUTTONUP кажись с TWinControl вырублено. в справочной системе об этом тишина но в какомто модуле в коментах очерком написано что это не работает.
Ставь локальный хук, хотя это глупость но походу другого выходя просто нет. (но может другие люди подтянутся и найдут выход) перехватывай событие WM_NCMOUSEMOVE оно 100% сработает после отпускание кнопки (даже без перемишение самой мыши), но также оно будет срабатывать и до (недостатки есть всегада, нужно главное знать про их), главное оно не срабатывает во время перетаскивания формы |
04.01.2009, 10:56 | #3 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 103
|
Кривовато но работает
Никто не знает больше чем не знаю я
|
04.01.2009, 14:39 | #4 |
Форумчанин
Регистрация: 12.10.2008
Сообщений: 131
|
Этот пример я взял из книги "Занимательное программирование на Visual Basic.NET" Александра Климова. И на VB.NET все работает нормально. Правда реализовано через переопределение оконной процедуры WndProc
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) 'Если нажата левая кнопка мыши на заголовке формы If CLng(m.Msg) = WM_NCLBUTTONDOWN Then 'Устанавливаем степень прозрачности формы If Me.Opacity <> 0.5 Then Me.Opacity = 0.5 'Кнопка отпущена ElseIf CLng(m.Msg) = WM_NCLBUTTONUP Then If Me.Opacity <> 1.0 Then Me.Opacity = 1.0 End If MyBase.WndProc(m) End Sub Получается, что Delphi кривоват в этом вопросе. |
04.01.2009, 15:35 | #5 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
Тут прикол в самой винде.
Зделал форму через ВинАпи и результат тотже повторил то что я делал на VC и опять тотже результат посути дело в стандартной обработке, если ее не обрабатывать то тогда все работает но окно не двигается и игнорируются системные кнопки, а вот если обрабатывать то все реагирует но сообщение о отпускании кнопки не срабатывает. Корявость винды |
04.01.2009, 18:05 | #6 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
Может так сойдёт:
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Icq сообщение | Marsik | Помощь студентам | 2 | 10.04.2008 04:22 |
Звуковое сообщение. | Небесный | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 17.10.2007 12:24 |