Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnFocus для EditBox [Delphi, Windows]


Страницы:   1 2

Александра ©   (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;

В общем, уточните вопрос.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо