![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Как, по-простому, и можно ли, вообще, узнать куда уходит или откуда пришел фокус?
Спасибо PS Я пришел к этой задаче от следующей. Есть чек-бокс. Когда он чекнут должно открыться(сделаться видимым) поле текстового ввода. На анчек, то поле должно обнулиться и закрыться(сделаться невидимым) . Кроме того, если по выходу из текстового поля оно пустое, надо анчекнуть чек-бокс и закрыть текстовое поле. Ниже привожу код, но он меня не вполне удовлетворяет - отсюда и вопрос.
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Первое, что приходит на ум и самое простое решение - пишем свой компонент, который объединяет CheckBox и Edit в некий свой собственный компонент с своим характерным поведением. Собственно сила ООП именно в таких решениях. А ещё свойство формы ActiveControl указывает на контрол, на котором находится фокус.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Не уверен, чтл это самое простое...Про силу в своем, по меньшей мере, неоднозначно. Написание собственных компонентов, ПО-МОЕМУ, должно происходить либо от их уникальности(нет близких аналогов), либо, наоборот, массовости - нужно через одного или проходит насквозь через весь проект. Данный пример ни под то, ни под другое определение не попадает. Тут, скорее всего, я просто не вижу элементарного алгоритмического решения. Собственно, полный код и приведен для любопытствующих.
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
TScreen::OnActiveControlChange не поможет делу?
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| brb |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Vyacheslav,
я боюсь, что не понял идеи... Дело в том, что код, приведенный мною, требует лишнего клика если фокус приходит с любого 3-го объекта. Потому мне и надо знать куда/откуда уходит/приходит фокус или найти лучший алгоритм --------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Это так, но гораздо более частой причиной написания компонентов является инкапсуляция - здесь как раз классический пример, когда инкапсуляция позволит легко и красиво решить задачу. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ну что-то вроде этого, если я правильно понял.
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| brb |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
Vyacheslav
Как сочетается это и это
А далее, в соответствии с моим примером
спасибо. --------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
||||||
|
|||||||
| Vyacheslav |
|
||||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
TScreen::OnActiveControlChange - событие, которое возникает при смене фокуса имеет тип
В Builder'е это всего лишь указатель на метод объекта (подчеркиваю, не класса, а конкретного объекта - это расширение С++), т.к в отличие от обычного указателя содержит не только указатель на функцию но и на сам объект( всего длина 8 байт). Объявляется на Builder c помощью ключевого слова __closure. Т.е кодом
я указателю на метод объекта присваиваю указатель на ChangeFocus, который как раз и является таким методом.
Аналогичную ситуацию ты проделываешь каждый раз, когда в дизайне задаешь обработчики событий. Просто здесь обработчкик присваивается не в дизайне, а во время исполнения. Надеюсь, я ответил на твой вопрос
В общем, да. Просто я не вдавался в подробности реализации, а предлагал вариант получения контрола, от которого пришел фокус -------------------- С уважением, Вячеслав Ермолаев |
||||||||||
|
|||||||||||
| brb |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 7.1.2003 Репутация: нет Всего: нет |
А вот это то, что я хотел!
--------------------
Сказки - удивительная вещь! Самое удивительное, что в них верят только маленькие дети, которым их рассказывают мамы и мамы, которым их рассказывают подросшие дети. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |