Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.05 c
2-1175055373
npu3pak
2007-03-28 08:16
2007.04.22
Как добавить новые строки в базу на accesse?


15-1174957429
Gero
2007-03-27 05:03
2007.04.22
Посоветуйте проигрыватель звука


6-1161955996
Free_Breeze
2006-10-27 17:33
2007.04.22
Вопрос по фреймам


15-1174690671
eXPell
2007-03-24 01:57
2007.04.22
Ну, разве что для интереса)))


10-1131624226
Ruslanyd
2005-11-10 15:03
2007.04.22
Подключение к открытому файлу *.xls