2013-08-08 2 views
0

У меня есть основная форма и вторичная форма как с некоторыми элементами управления DBAware из общей базы данных. В настоящее время я использую ShowModal, но я хотел бы иметь возможность использовать Modal для возврата к основной форме и навигации по базе данных.Как сказать, что немодальный потерял/восстановил фокус

На вторичной основе я могу заменить TDBEdits на TEdits и наполнить их данными, когда я покажу вторичную форму. Нет никаких средств для навигации по базе данных во вторичной форме, но если пользователь может вернуться к основной форме, в которой они могут перемещаться, мне нужно будет сбросить курсор базы данных, когда они вернутся к второстепенной.

Как я могу сказать, что вторичная форма только что потеряла фокус? Я могу захватить позицию курсора базы данных.

Как узнать, когда вторичная форма снова получает фокус? Поэтому я могу сбросить курсор базы данных, если он был перемещен перед возвратом.

Thanks p.s. Пожалуйста, не задавайте вопросов о том, почему и/или альтернативные предложения. Это существующее приложение, и я действительно не хочу исправлять мили кода. Как дерьмовый, так как он работает много лет, и клиент хочет изменить его. :)

ответ

5

Используйте форму OnActivate и OnDeactivate событий. OnActivate вызывается, когда форма получает фокус, и OnDeactivate вызывается, когда он теряет его.

Обратите внимание, что эти события запускаются только тогда, когда фокус передается в вашем собственном приложении. Если вам нужно знать, когда ваше приложение само по себе теряет или получает фокус, используйте вместо этого TApplication.OnActivate и TApplication.OnDeactivate.

+0

Спасибо, Кен, я не знал, что деактивировать был огонь по утрате фокуса. Я попробовал OnActivate, чтобы обнаружить, что пользователь возвращается, но он не срабатывает, если форма все еще полностью видима, скажем, в одну сторону от основной. Если он покрыт основной формой, то он работает. – user2220358

3

Вы можете ознакомиться с onActivate и onDeactivate событиями вторичной формы. Я думаю, что это то, что вам нужно.

Примечание: OnDeactivate работает только в том случае, если фокус переключается на другую форму проекта. Например, у меня есть project1.exe, который создает 2 формы Form1 и Form2. Поэтому Form1 OnDeactivate вызывает триггеры, если я ccick Form2. Но он не будет срабатывать, если я нажму кнопку «Блокнот».

+0

Спасибо, но Кен избил вас до удара, так как оба ответа показывают «12 часов назад». :) Это все в рамках одного проекта, поэтому я дам OnDeactivate попробовать. – user2220358

Смежные вопросы