Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка WM_LBUTTONDOWN 
:(
    Опции темы
bems
Дата 24.11.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



вот
Код

function MyWindowFromPoint(Point:TPoint):HWND;
var PID:DWORD;
begin
result:=WindowFromPoint(Point);
GetWindowThreadProcessID(result,@PID);
if PID<>GetCurrentProcessID
   then result:=0;
end;



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dmitry_177
Дата 24.11.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Спасибо еще раз большое!!!
PM MAIL   Вверх
Dmitry_177
Дата 30.11.2006, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



В главной процедуре обрабатываю сообщение WM_NCHITTEST,
Код

     WM_NCHITTEST: begin
                     if Window = hWindow then
                       if GetAsyncKeyState(VK_LBUTTON) < 0 then
                         Result := HTCAPTION;
                   end;

И не доходит сообщение WM_LBUTTONDOWN до кнопки, сделав его обработку сабклассингом... Что делать?
PM MAIL   Вверх
bems
Дата 30.11.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



вероятно это потому что ты не вызываешь DefWindowProc. В каких случаях вызывать, а в каких - нет, зависит от того, какого ты хочешь добиться эффекта. Например если ты не хочешь, чтобы окно перетаскивалось за кнопку, то Result := HTCAPTION делай только если курсор не на кнопке, а в противном случае result:=DefWindowProc(...

не очень понятно, как должно по твоему себя вести окно...


--------------------
Обижено школьников: 8
PM MAIL   Вверх
bems
Дата 30.11.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



если начинаешь строить из себя заголовок окна, то смотри WM_NCLBUTTONDOWN и WM_ENTERSIZEMOVE


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dmitry_177
Дата 30.11.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Дело в том что сообщение WM_LBUTTONDOWN вообще не доходит до кнопки, т.е. она не нажимается...
PM MAIL   Вверх
bems
Дата 1.12.2006, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(Dmitry_177 @  30.11.2006,  02:45 Найти цитируемый пост)
 if Window = hWindow then
                       if GetAsyncKeyState(VK_LBUTTON) < 0 then
                         Result := HTCAPTION;

что такое Window и hWindow? если Result := HTCAPTION может произойти и при нажатии на кнопку, то этого и следует ожидать - вместь нажатия окно начнет перетаскиваться. А если по остальному коду выходит, что кнопка исключена в этой ситуации, то нужно предусмотреть для нее вызов DefWindowProc



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dmitry_177
Дата 1.12.2006, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Window: HWND это первый парамент WindowProc, а hWindow это хендл главного окна
PM MAIL   Вверх
bems
Дата 1.12.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



не воспроизводится. Может проблема в чем-то другом? дай больше кода


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dmitry_177
Дата 3.12.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Я разобрался что было не так.. Я сабклассинг делал чуть-чуть неправильно...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1930 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.