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

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

как узнать в событии OnExit новый активный объект


andreoman ©   (2008-09-24 12:26:00) 

Здавствуйте. Как узнать в событии OnExit объекта (ну скажем TEdit) какой объект/окно Формы/приложения
получает фокус ввода/становится активным.
Спасибо.


ЮЮ   (2008-09-25 11:17:00) [1]

> [14] MsGuns ©   (25.09.08 11:14)
> А отказаться от гридного редактирования Талмуд не дает ?


Нет, Талмуд призывает отказываться от гридного редактирования :)


MsGuns   (2008-09-25 11:14:00) [2]

А отказаться от гридного редактирования Талмуд не дает ?


Anatoly Podgoretsky   (2008-09-24 15:00:00) [3]

> Vlad Oshin  (24.09.2008 14:02:12)  [12]

А все почему, вместо объяснения самой задачи, объясняют как неправильно делают.


Vlad Oshin   (2008-09-24 14:02:00) [4]


> cxGrid



> Если у тебя в гриде вырабатывается OnExit то и запоминай
> характеристики

на самом деле..


Anatoly Podgoretsky   (2008-09-24 13:45:00) [5]

> andreoman  (24.09.2008 13:38:09)  [9]

Если у тебя в гриде вырабатывается OnExit то и запоминай характеристики, а знать куда будет переходить фокус совсем не требуется.
При обработке Enter в TcxDBTextEdit передавай фокус в запомненые координаты.
Дополнительный бонус, ты сможешь вернуться в теже координаты, даже если переход в TcxDBTextEdit будет не прямой.


andreoman   (2008-09-24 13:38:00) [6]

У меня есть таблица cxGrid , а над ней TcxDBTextEdit, в которой я редактирую формулу (как в Excel) и при нажатии на Enter хочу вернуться в туже ячейку из которой перешол в TcxDBTextEdit.
procedure TfrmInkList.cxDBTextEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if ord(Key) = vk_Return then
 begin
   cxGrid1DBBandedTableView1.Controller.FocusedRecordIndex := var1;
   cxGrid1DBBandedTableView1.Controller.FocusedItemIndex   := var2;    
   cxGrid1DBBandedTableView1.Control.SetFocus;
   key := Chr(0);
 end;
end;

в переменных var1 и var2 я записываю значения строки и столбца, когда фокус переходит из таблицы в TcxDBTextEdit.
procedure TfrmInkList.cxGrid1Exit(Sender: TObject);
begin
  {Если фокус получает TcxDBTextEdit тогда}
  var1:=cxGrid1DBBandedTableView1.Controller.FocusedRecordIndex);
  var2:=cxGrid1DBBandedTableView1.Controller.FocusedColumnIndex);  
end;

скорее всего прейдется использовать cxDBTextEdit1.Focused


Anatoly Podgoretsky   (2008-09-24 13:38:00) [7]

> andreoman  (24.09.2008 13:27:06)  [6]

Сообственно вряд ли есть хорошее решение, а остальное только суррогаты.


Vlad Oshin   (2008-09-24 13:31:00) [8]


> WM_KILLFOCUS не имеет отношения к OnExit

кто утверждал обратное?


> вопрос тогда остаётся активным

в оконной функции ловить сообщение, взводить флаг, в onExit его проверять


Сергей М.   (2008-09-24 13:29:00) [9]


> andreoman   (24.09.08 13:27) [6]


Так ты не удовлетворишь любопытство ?
Есть стойкое подозрение, что сквозная задача реализуется проще и изящней, нежели так как ты видишь ..


andreoman   (2008-09-24 13:27:00) [10]

вопрос тогда остаётся активным


Anatoly Podgoretsky   (2008-09-24 13:20:00) [11]

WM_KILLFOCUS не имеет отношения к OnExit, которые не WinAPI и работает иначе. Например подобное сообщение не будет сделано для многих случаев, например при переходе с TPanel в TGroupBox, в отличии от WM_KILLFOCUS, который является потерей фокуса, OnExit это переход на другой компонент в пределаз контейнера!!!

И сразу насчет ответа на другом форуме ActiveControl

> Note: In some control classes the ActiveControl property updates before the OnExit event occurs.

То есть на него тоже нельзя расчитывать.


Vlad Oshin   (2008-09-24 12:57:00) [12]

Сообщение WM_KILLFOCUS отправляется окну немедленно перед тем, как оно теряет фокус клавиатуры.

Синтаксис

WM_KILLFOCUS
hwndGetFocus = (HWND) wParam; // дескриптор окна, принимающего фокус

Параметры
hwndGetFocus
Значение wParam. Идентифицирует окно, которое принимает фокус клавиатуры (может быть значением ПУСТО (NULL)).


Anatoly Podgoretsky   (2008-09-24 12:54:00) [13]

> andreoman  (24.09.2008 12:26:00)  [0]

Он еще не ушел


DimaBr   (2008-09-24 12:48:00) [14]

http://www.sql.ru/forum/actualthread.aspx?tid=598335


Сергей М.   (2008-09-24 12:37:00) [15]

Любопытно, зачем это может понадобиться ?


Наверх

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