![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Фокус [D5, WinME, WinXP]
vgb © (2003-05-04 13:40:00)Мастера, помогите, pls.
Как заставить кнопку потерять фокус? Что-то типа, как в калькуляторе, после нажатия на кнопку она тут-же теряет фокус?
Пытался с помощью SendMessage(...), но в хелпе не нашел никаких похожих параметров.
Заранее СПАСИБО!
VGB (2003-05-04 17:37:00) [1]2Юрий Зотов
Спасибо, помогло!!!
Думаю на этом вопросе можно ставить жирную точку.
Юрий Зотов (2003-05-04 16:07:00) [2]В первом параметре DrawFrameControl требует хэндл контекста устройства, а Вы зачем-то подсовываете ей хэндл окна. Естественно, она ничего и не рисует - негде ей рисовать.
var
DC: HDC;
...
DC := GetDC(MainWindowHandle);
try
DrawFrameControl(DC, ...)
finally
ReleaseDC(MainWindowHandle, DC)
end
VGB (2003-05-04 15:57:00) [3]2Mbo
А как использовать эту самую DrawFrameControl?
Делаю так:
var
R: TRect;
begin
R.Left:=100;
R.Top:=100;
R.Right:=120;
R.Bottom:=120;
DrawFrameControl(MainWindowHandle, R, DFC_BUTTON, DFCS_BUTTONPUSH);
end;
Главное окно остается пустым. В описании данной функции в Help-е наткнулся на FillRect, но так и не понял, что к чему. Разъесните пожалуйста "тугодуму" (это моя первая прога на API).
VGB (2003-05-04 14:40:00) [4]2Dmk
> SendMessage(self.Button1.Handle, WM_KILLFOCUS, 0, 0);
Спасибо, то что надо!!! Только вот еще проблема. Затеял я это вследствии того, что при получении фокуса кнопке, форма не получает сообщений на нажатие клавишь. Теперь, после нажатия на кнопку она тут же теряет фокус, но вот сообщения WM_KEYDOWN форма все равно не получает:(
2MBo
> принцип тот же - не настоящая кнопка-окно
Идея хорошая, т.к. тут же решается и описаная выше проблема. Надобы попробовать.
> Можно, конечно, отслеживать, откуда пришел фокус...
К сожаленю не годится...
Dmk (2003-05-04 14:16:00) [5]Попробуй это
SendMessage(self.Button1.Handle, WM_KILLFOCUS, 0, 0);
или переведи фокус на другой объект
MBo (2003-05-04 14:16:00) [6]принцип тот же - не настоящая кнопка-окно, а нарисованная, например, DrawFrameControl с обработкой сообщений от родителя в ее области.
Можно, конечно, отслеживать, откуда пришел фокус - и переводить назад, но это имхо, нехорошо - может, он воообще на элементе другого окна был
VGB (2003-05-04 14:02:00) [7]Прога на WinApi
MBo (2003-05-04 13:49:00) [8]А может, SpeedButton использовать? Оно и фокуса не принимает