![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnFocus для EditBox [Delphi, Windows]
Александра © (2006-08-06 22:17:00)Привет, мальчики.
А есть ли аналог сабжа в KOL?
ANTPro (2006-08-21 20:02:00) [1]Александра (20.08.06 23:29) [22]
А что надо получить в итоге?
Если отлеживание потери/получения фокуса, то OnLeave/OnEnter (на kolpanel тоже работает проверял).
Александра (2006-08-20 23:29:00) [2]Но при варианте [21] не мигает курсор в EditBox. :(
Александра (2006-08-20 23:16:00) [3]Хм, что интересно. Стоило только убрать or, как всё заработало:
WM_SETFOCUS :
begin
result := true;
//
end;
К чему бы это?
parovoZZ (2006-08-20 01:21:00) [4]Может из-за KolPanel такое происходит? Вернее ничего не происходит.
Александра (2006-08-19 00:42:00) [5]Так а чего мне кнопки. Мне мышу надо ловить. А editbox's у меня на kolpanel - табуляция переползает сразу на кнопки, расположенные прямо на форме. Чего не делаешь - ничего не помогает. Слетает и всё тут.
MTsv DN (2006-08-16 13:30:00) [6]> Код в [7]Ну и что...
Александра, посмотри внимательнее код какой я привел... Что перехватываю, что фильтрую... Если уж совсем, рабочий код:
function TForm1.EditBox1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := false;
if (Msg.message = WM_KEYUP) then //Отлов отжатие клавиши
begin
if (Msg.wParam = 9) then //Фильтр Tab,
if Form1.Form.Tabulate then //если Tabulate = true
Beep(400, 10); //Твое действие
if (Msg.wParam = 9) or //Фильтр Tab и стрелок "Влево", "Вправо",
(Msg.wParam = 38) or
(Msg.wParam = 40) then
if Form1.Form.TabulateEx then //если TabulateEx = true
Beep(400, 10); //Твое действие
end;
end;
С Уважением MTsv DN
Александра (2006-08-16 10:24:00) [7]Код в [7]
MTsv DN (2006-08-13 18:53:00) [8]2 Александра
Вот перехват фокус с клавиатуры:
function TForm1.EditBox1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := false;
if (Msg.message = WM_KEYUP) then
if (Msg.wParam = 9) or (Msg.wParam = 38) or (Msg.wParam = 40) then
Beep(400, 10);
end;
Для получения фокуса EditBox'f с клавы, ты жмешь, а потом отпускаешь кнопку Tab для Tabulate и Tab/Стрелка "->"/Стрелка "<-" для TabulateEx... Вот отлавливай и фильтруй сообщение WM_KEYUP и коды клавиш Msg.wParam...
С Уважением MTsv DN
ANTPro (2006-08-13 13:38:00) [9]Александра (13.08.06 13:31) [14]
Давай код: посмотрим, что Delphi7 скажет по этому поводу :)
Александра (2006-08-13 13:31:00) [10]Да вообще ни одно сообщение не отлавливается. От KOLForm ловится. Голова сломается от таких фокусов.
ANTPro (2006-08-13 10:03:00) [11]MTsv DN © (13.08.06 7:58) [12]
EN_SETFOCUS не отлавливается...
При вводе текста срабатывает без проблем.
MTsv DN (2006-08-13 07:58:00) [12]>OnEnter\OnLeave работает, а msg.message нет.
>
> Правда при открытии проекта возникает ошибка "A call to an OS function failed" Может из-за этого?
Как-то витиевато выразилась ;)
Если ты о том, что msg.message=EN_SETFOCUS не отлавливается, из-за ошибки, то это не так...у меня ошибки нет, а EN_SETFOCUS не отлавливается...
А если ошибка появилась после использования OnEnter\OnLeave, то это где-то у тебя "косяк"... Возможно необходим Ребилд KOL'а...
С Уважением MTsv DN
Александра (2006-08-12 18:11:00) [13]OnEnter\OnLeave работает, а msg.message нет.
Правда при открытии проекта возникает ошибка "A call to an OS function failed" Может из-за этого?
MTsv DN (2006-08-12 09:21:00) [14]> P.S. Что за сообщения $B005 и $BD33???
$B005
CM_BASE = $B000
CM_DIALOGKEY = CM_BASE + 5 = $B005
$BD33
CN_BASE = $BC00
WM_CTLCOLOREDIT = $0133
CN_CTLCOLOREDIT = CN_BASE + WM_CTLCOLOREDIT = $BD33
С Уважением MTsv DN
MTsv DN (2006-08-12 09:08:00) [15]2 Александра
> OnEnter\OnLeave это именно получение\потеря фокуса
Обрати внимание на OnEnter... Это как раз твой OnFocus...обработчик EN_SETFOCUS!!!
Хотя ситуация с перехватом EN_SETFOCUSменя все также интересует...
С Уважением MTsv DN
MTsv DN (2006-08-12 08:59:00) [16]Привет...
Да... Ситуация интересная...
Вот описание из MSDN'а для EN_SETFOCUS:
The EN_SETFOCUS notification message is sent when an edit control receives the keyboard focus. The parent window of the edit control receives this notification message through a WM_COMMAND message.
В итоге, отлавливается-то EN_SETFOCUS отлавливается, но только когда фокус теряется 8( а не когда получает...
Вот код отслеживания сообщений, поступающих на EditBox...
function TMainForm.EditBoxMessage(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
Result := false;
lb.Add('$'+Int2Hex(Msg.message, 4));
if Msg.message = EN_SETFOCUS then
begin
MsgOK('');
end;
end;
Кто-нибудь может прокомментировать такое поведение EN_SETFOCUS???
P.S. Что за сообщения $B005 и $BD33???
Александра (2006-08-11 21:38:00) [17]Что я делаю не так:
function TEditFrm.SysBoxMessage(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
result := false;
case msg.message of
WM_SETFOCUS or EN_SETFOCUS :
begin
result := true; //не попадаем сюда
....
end;
WM_KILLFOCUS or EN_KILLFOCUS :
begin
result := true; //и сюда тоже
.....
end;
end;
end;
Александра (2006-08-11 09:42:00) [18]Хм, что-то не отлавливается в OnMessage ни одно сообщение. Что-то не понятно. Ладно, будем копать дальше.
Александра (2006-08-07 22:11:00) [19]Да, да.
Ну уже ответили на вопрос. Спасибо.
mdw (2006-08-07 18:41:00) [20]Давно VCL не пользовал, сейчас посмотрел, а что такое OnFocus?
Может SetFocus? тогда Focused:= True;
В общем, уточните вопрос.