![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 12.10.2008
Сообщений: 131
|
![]()
Здравствуйте. Я хочу сделать форму прозрачной при щелчке по заголовке формы. При отпускании кнопки мыши форма восстанавливает свое состояние. Проблема в том, что обработка сообщения WM_NCLBUTTONUP срабатывает только, если форма полноэкранная. А если нет то, сообщение не обрабатывается. КАК ЗАСТАВИТЬ ПРОЦЕДУРУ WMNCLButtonUp СРАБАТЫВАТЬ ПРИ ЛЮБОМ ВИДЕ ОКНА. Спасибо за ответ.
Исходный код: Код:
Последний раз редактировалось rpy3uH; 04.01.2009 в 09:13. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
![]()
событие WM_NCLBUTTONUP кажись с TWinControl вырублено. в справочной системе об этом тишина но в какомто модуле в коментах очерком написано что это не работает.
Ставь локальный хук, хотя это глупость но походу другого выходя просто нет. (но может другие люди подтянутся и найдут выход) перехватывай событие WM_NCMOUSEMOVE оно 100% сработает после отпускание кнопки (даже без перемишение самой мыши), но также оно будет срабатывать и до (недостатки есть всегада, нужно главное знать про их), главное оно не срабатывает во время перетаскивания формы |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.10.2008
Сообщений: 127
|
![]()
Кривовато но работает
Никто не знает больше чем не знаю я
|
![]() |
![]() |
![]() |
#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 кривоват в этом вопросе. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 24.11.2006
Сообщений: 108
|
![]()
Тут прикол в самой винде.
Зделал форму через ВинАпи и результат тотже повторил то что я делал на VC и опять тотже результат посути дело в стандартной обработке, если ее не обрабатывать то тогда все работает но окно не двигается и игнорируются системные кнопки, а вот если обрабатывать то все реагирует но сообщение о отпускании кнопки не срабатывает. Корявость винды |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
![]()
Может так сойдёт:
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Icq сообщение | Marsik | Помощь студентам | 2 | 10.04.2008 04:22 |
Звуковое сообщение. | Небесный | Паскаль, Turbo Pascal, PascalABC.NET | 13 | 17.10.2007 12:24 |