Форум: "KOL";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизOnFocus для EditBox Найти похожие ветки
← →
Александра (2006-08-06 22:17) [0]Привет, мальчики.
А есть ли аналог сабжа в KOL?
← →
mdw © (2006-08-07 10:06) [1]Есть аналог: OnLeave
← →
MTsv DN © (2006-08-07 16:09) [2]> OnLeave
Не думаю, что Александра имела ввиду наведение мыши...скорее фокусировку для ввода инфы в EditBox...
> А есть ли аналог сабжа в KOL?
В OnMessage обрабатывать WM_SETFOCUS или EN_SETFOCUS. Это перехват фокуса с клавы и OnClick с мыши...
С Уважением MTsv DN
← →
mdw © (2006-08-07 18:36) [3]OnEnter\OnLeave это именно получение\потеря фокуса
наведение мыши - OnMouseEnter\OnMouseLeave
← →
mdw © (2006-08-07 18:41) [4]Давно VCL не пользовал, сейчас посмотрел, а что такое OnFocus?
Может SetFocus? тогда Focused:= True;
В общем, уточните вопрос.
← →
Александра (2006-08-07 22:11) [5]Да, да.
Ну уже ответили на вопрос. Спасибо.
← →
Александра (2006-08-11 09:42) [6]Хм, что-то не отлавливается в OnMessage ни одно сообщение. Что-то не понятно. Ладно, будем копать дальше.
← →
Александра (2006-08-11 21:38) [7]Что я делаю не так:
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;
← →
MTsv DN © (2006-08-12 08:59) [8]Привет...
Да... Ситуация интересная...
Вот описание из 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???
← →
MTsv DN © (2006-08-12 09:08) [9]2 Александра
> OnEnter\OnLeave это именно получение\потеря фокуса
Обрати внимание на OnEnter... Это как раз твой OnFocus...обработчик EN_SETFOCUS!!!
Хотя ситуация с перехватом EN_SETFOCUS меня все также интересует...
С Уважением MTsv DN
← →
MTsv DN © (2006-08-12 09:21) [10]> 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
← →
Александра (2006-08-12 18:11) [11]OnEnter\OnLeave работает, а msg.message нет.
Правда при открытии проекта возникает ошибка "A call to an OS function failed" Может из-за этого?
← →
MTsv DN © (2006-08-13 07:58) [12]>OnEnter\OnLeave работает, а msg.message нет.
>
> Правда при открытии проекта возникает ошибка "A call to an OS function failed" Может из-за этого?
Как-то витиевато выразилась ;)
Если ты о том, что msg.message=EN_SETFOCUS не отлавливается, из-за ошибки, то это не так...у меня ошибки нет, а EN_SETFOCUS не отлавливается...
А если ошибка появилась после использования OnEnter\OnLeave, то это где-то у тебя "косяк"... Возможно необходим Ребилд KOL"а...
С Уважением MTsv DN
← →
ANTPro © (2006-08-13 10:03) [13]MTsv DN © (13.08.06 7:58) [12]
EN_SETFOCUS не отлавливается...
При вводе текста срабатывает без проблем.
← →
Александра (2006-08-13 13:31) [14]Да вообще ни одно сообщение не отлавливается. От KOLForm ловится. Голова сломается от таких фокусов.
← →
ANTPro © (2006-08-13 13:38) [15]Александра (13.08.06 13:31) [14]
Давай код: посмотрим, что Delphi7 скажет по этому поводу :)
← →
MTsv DN © (2006-08-13 18:53) [16]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
← →
Александра (2006-08-16 10:24) [17]Код в [7]
← →
MTsv DN © (2006-08-16 13:30) [18]> Код в [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-19 00:42) [19]Так а чего мне кнопки. Мне мышу надо ловить. А editbox"s у меня на kolpanel - табуляция переползает сразу на кнопки, расположенные прямо на форме. Чего не делаешь - ничего не помогает. Слетает и всё тут.
← →
parovoZZ © (2006-08-20 01:21) [20]Может из-за KolPanel такое происходит? Вернее ничего не происходит.
← →
Александра (2006-08-20 23:16) [21]Хм, что интересно. Стоило только убрать or, как всё заработало:
WM_SETFOCUS :
begin
result := true;
//
end;
К чему бы это?
← →
Александра (2006-08-20 23:29) [22]Но при варианте [21] не мигает курсор в EditBox. :(
← →
ANTPro © (2006-08-21 20:02) [23]Александра (20.08.06 23:29) [22]
А что надо получить в итоге?
Если отлеживание потери/получения фокуса, то OnLeave/OnEnter (на kolpanel тоже работает проверял).
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.042 c