Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2008, 18:45   #1
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию Как обрабатывать нажатие на кнопке?

Как можно обработать щелчок (да и другие события) на кнопке?
Кнопка создается на WinAPI
AidarBik вне форума Ответить с цитированием
Старый 05.02.2008, 18:46   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Если "Кнопка создается на WinAPI", значит у нее есть оконная процедура, в которой нужно обработать нужные события. В чем вопрос-то?
B_N вне форума Ответить с цитированием
Старый 05.02.2008, 18:50   #3
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Код:
Button:=CreateWindowEx(0, 'Button', 'Добавить', WS_CHILD or WS_VISIBLE, 184, 24, 81, 25, pWnd, 0, HInstance, nil);
В какой процедуре это надо обрабатывать?
Пытался в оконной процедуре формы (pWnd), но при нажатии на кнопку ничего не происходит.
AidarBik вне форума Ответить с цитированием
Старый 05.02.2008, 19:12   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Надо объявить функцию по прототипу
LRESULT BtnWndProc(HWND hWnd, UINT Msg, WPARAM wParam,LPARAM lParam); (в паскале это будет что-то вроде function BtnWndProc(hWnd : HWND; Msg, wParam, lParam : dword) : dword; ) Через GetWindowLong(hWnd, GWL_WNDPROC) взять у кнопки адрес старой оконной процедуры, запомнить его, через SetWindowLong(hWnd, GWL_WNDPROC, <Адрес новой процедуры>); установить новый адрес (не забывая в функции BtnWndProc после необходимых действий возвращать управление старой процедуре (адрес которой мы запомнили).

Само собой это всё БЕЗ классов. Под hWnd понимается хэндл самой кнопки. Справитесь?
B_N вне форума Ответить с цитированием
Старый 05.02.2008, 19:18   #5
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Я сделал по-другому, кажется работает:
Код:
while GetMessage(pMsg, 0, 0, 0) do
begin
if (pMsg.hwnd = Button) and (pMsg.message = WM_LBUTTONUP) then
begin
//Нажал на кнопку
end;
TranslateMessage(pMsg);
DispatchMessage(pMsg);
end;
Но появился еще один вопрос. Как сделать кнопку недоступной (WinAPI)?
AidarBik вне форума Ответить с цитированием
Старый 05.02.2008, 19:24   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

1. В каком месте стоит этот цикл?
2. Что подразумевается под "недоступной"? Если disabled, то EnableWindow(hWnd, 0);
B_N вне форума Ответить с цитированием
Старый 05.02.2008, 19:27   #7
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

Цикл стоит после создания всех компонентов. После цикла ничего нет.
Спасибо.
P.S. А где можно взять справочник по WinAPI?
AidarBik вне форума Ответить с цитированием
Старый 05.02.2008, 19:35   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

1. "После создания всех компонентов" это где??? не в OnCreate, надеюсь?
2. Всё, что будет отправлено из текущего потока через SendMessage в этот цикл не попадет.
3. Справочник по WinApi можно взять, как минимум, здесь: http://www.google.com/search?hl=en&q...=Google+Search
Если траффик позволяет, лучше скачать MSDN http://www.microsoft.com/express/dow...n/Default.aspx - совсем другие пироги
B_N вне форума Ответить с цитированием
Старый 05.02.2008, 19:37   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

справочные файлы из MS SDK также устанавливаются вместе с Delphi 7.
rpy3uH вне форума Ответить с цитированием
Старый 05.02.2008, 19:38   #10
AidarBik
Форумчанин
 
Регистрация: 12.06.2007
Сообщений: 130
По умолчанию

OnCreate? Проект то на WinAPI.
Код:
begin
//Создаю окно и компоненты
while GetMessage(pMsg, 0, 0, 0) do
begin
if (pMsg.hwnd = Button) and (pMsg.message = WM_LBUTTONUP) then
begin
//Нажал на кнопку
end;
TranslateMessage(pMsg);
DispatchMessage(pMsg);
end;
end.
Спасибо за ссылки.
AidarBik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить компонент TTrackBar обрабатывать события мыши? Никки Общие вопросы Delphi 5 29.08.2008 14:17
Рисунок на кнопке JIimonKa Общие вопросы Delphi 3 27.05.2008 07:41
Могут ли обрабатывать нажатия клавиш окна, отличные от активного? Gorlum Общие вопросы Delphi 14 27.10.2007 17:28
как обрабатывать события с клавы? proglamer Паскаль, Turbo Pascal, PascalABC.NET 13 25.10.2007 11:41
скрипт, который бы смог забирать почту с почтового сервера (pop3) и обрабатывать ее Hallo PHP 11 21.11.2006 21:18