| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как узнать у кого был фокус |
| Автор: ShadeSt 9.8.2005, 14:19 |
| На форме есть несколько TEdit'ов, в какой-то момент времени один из них получает фокус, можно ли узнать какой компонент на форме был активным до него? Можно в событии OnExit запоминать Sender'а, а есть ли какой нибудь другой способ?? |
| Автор: AntonSaburov 9.8.2005, 14:30 |
| Посмотри свойство ActiveControl - и тебе будет счастье. |
| Автор: ShadeSt 9.8.2005, 15:05 |
| ActiveControl - содержит элемент, который в данный момент имеет фокус. А мне хотелось бы узнать у кого был фокус до него. т.е. например. на форме два edit'a один из них активен, нажимаем таб, переходим в следующий (например в editNN), в событии OnEnter ( editNNEnter(Sender...) ) хотелось бы знать от кого пришел фокус. |
| Автор: Snowy 9.8.2005, 15:10 |
| Для этого заведи себе глобальную переменную - указатель. А в OnEnter и проверяй. Если он nil, значит первый. Если нет, то имеешь указатель. После этого сразу присваивай указателю себя. |
| Автор: Girder 9.8.2005, 15:18 |
| WM_SETFOCUS |
| Автор: ShadeSt 9.8.2005, 15:18 |
| В том то и дело что сейчас так и работает, просто почему-то кажется что это неправильно как-то и хотелось узнать есть ли др. способы. |
| Автор: Snowy 9.8.2005, 15:27 | ||
Другие способы есть, но, думаю, этот самый логичный. Если только ты не делаешь отдельный OnEnter для каждого едита. |
| Автор: ShadeSt 9.8.2005, 15:32 |
| Для всех Edit'ов один обработчик. А другие способы это только сообщениями windows? |
| Автор: Snowy 9.8.2005, 15:52 |
| Вот способ еще проще: На OnExit можно узнать: Form.ActiveControl - контрол, который стал активен. Sender - контрол, который был активен до этого. |
| Автор: Song 9.8.2005, 22:34 | ||
|
| Автор: p0s0l 9.8.2005, 22:43 |
| Song, фокус передаваться может не только по порядку TabOrder-ов... Например, если щелкнули мышкой по какому-либо контролу... |
| Автор: Song 9.8.2005, 23:21 |
| :yes: Тогда только запоминать предыдущий TWinControl |
| Автор: Romikgy 10.8.2005, 09:57 |
| WM_ACTIVATE fActive = LOWORD(wParam); // activation flag fMinimized = (BOOL) HIWORD(wParam); // minimized flag hwndPrevious = (HWND) lParam; // window handle hwndPrevious Value of lParam. Identifies the window being activated or deactivated, depending on the value of the fActive parameter. If the value of fActive is WA_INACTIVE, hwndPrevious is the handle of the window being activated. If the value of fActive is WA_ACTIVE or WA_CLICKACTIVE, hwndPrevious is the handle of the window being deactivated. This handle can be NULL. Кажется это должно те подойти |
| Автор: Snowy 10.8.2005, 10:00 | ||||||
А это здесь причем? Здесь вот:
Нет. |
| Автор: Romikgy 10.8.2005, 10:07 |
| А разве при получении фокуса окно не становиться активным? |
| Автор: Snowy 10.8.2005, 10:13 | ||
Окно да. Но речь о Едитах. |
| Автор: Romikgy 10.8.2005, 11:10 | ||
Можно делать тоже только перехватывая wm_setfocus |
| Автор: Snowy 10.8.2005, 11:26 | ||
Можно. Как вариант... Однако с запоминанием более просто. К тому же без запоминания мы не узнаем какой был последний едит, если фокус был передан не едиту. Пример: Фокус на едит1. Перешли на едит2 - был едит1 Перешли на Едит4 - был едит2 Перешли на Мемо1 Перешли на Едит3 - был едит4. Вот тут без запоминания едит3 никогда не узнает, что до него был едит4 |
| Автор: ShadeSt 10.8.2005, 16:10 |
| Всем спасибо. Буду запоминать у кого был фокус и не заморачиваться. |
| Автор: Romikgy 10.8.2005, 16:26 | ||
Я могу и ошибатся, но насколько я знаю , либой контрол является окном |
| Автор: Song 11.8.2005, 09:04 |
| Смотря что понимать под словом "контрол". |
| Автор: Rennigth 11.8.2005, 09:09 |
| Romikgy тотже TLabel не окно. |
| Автор: Romikgy 11.8.2005, 16:21 | ||||
Уточняю все классы типа TWinControl Добавлено @ 16:24
Да это не окно , это картинка /производная от класс TGraphicControl = class(TControl) /, а спрашивали про эдит |
| Автор: Song 11.8.2005, 16:28 |
| Ну я под контролами например понимаю любой элемент интерфейса. Так что... Добавлено @ 16:28 в котором что-то вводится или выводится |
| Автор: Romikgy 12.8.2005, 08:29 | ||
Софистикой будем заниматся Или тему обсуждать ? |
| Автор: Song 12.8.2005, 11:23 | ||
Я имел ввиду, что нет никакого исключающего правила на слово "контрол", поэтому говорить
по меньшей мере неправильно. Или добавить "в моём понимании". |
| Автор: Romikgy 12.8.2005, 12:25 | ||
Извени , забыл добавить
|