Делаю так:
| Код | /**************************************************************************** * TfrmInputCaptcha - ввод каптчи * *****************************************************************************/
//--------------------------------------------------------------------------- #ifndef uInputCaptchaH #define uInputCaptchaH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp>
#include "uMain.h" #include <Buttons.hpp> #include <ExtCtrls.hpp> //frmMain //--------------------------------------------------------------------------- class TfrmInputCaptcha : public TForm { __published: TImage *imgCaptcha; TBitBtn *btnCancel; TBitBtn *btnOk; TEdit *edtCaptcha; TLabel *Label1; TTimer *tmrFlashWindow;
void __fastcall btnOkClick (TObject *Sender); void __fastcall btnCancelClick (TObject *Sender); void __fastcall tmrFlashWindowTimer(TObject *Sender);
public: __fastcall TfrmInputCaptcha (TComponent* Owner, TMemoryStream *pmsMS);
private: //фокус void __fastcall vOnActivate (TWMActivate &a); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_ACTIVATE, TWMActivate, vOnActivate) END_MESSAGE_MAP(TForm) }; //--------------------------------------------------------------------------- #endif
/**************************************************************************** * TfrmInputCaptcha - ввод каптчи * *****************************************************************************/
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop
#include "uInputCaptcha.h" //frmInputCaptcha //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- //DONE: конструктор __fastcall TfrmInputCaptcha::TfrmInputCaptcha(TComponent *Owner, TMemoryStream *pmsMS) : TForm(Owner) { /*DEBUG*/XASSERT(NULL != pmsMS);
tmrFlashWindow->Interval = 500; tmrFlashWindow->Enabled = true; } //--------------------------------------------------------------------------- //TODO: мигание в панели задач void __fastcall TfrmInputCaptcha::tmrFlashWindowTimer(TObject *Sender) { ::FlashWindow(Application->Handle, true); } //--------------------------------------------------------------------------- //TODO: фокус формы void __fastcall TfrmInputCaptcha::vOnActivate(TWMActivate &a) { if (WA_INACTIVE == a.Active) { //покинули форму
} else { //активировали форму ShowMessage(_T("активировали форму")); //<<<<<< форма еще не получила фокус, а мсжбокс вывалился tmrFlashWindow->Enabled = false;
a.Result = 0; } } //---------------------------------------------------------------------------
|
Нажимая кнопку из главной формы ("Старт") , при создании дочекрней формы запускается таймер. Пока он не сработал "кладу" форму на под какое-нибудь окно (т.е. форма не имеет фокуса). Вроде бы дочерняя форма фокуса не получала, но мсжбокс вываливатся (см. код).
Добавлено через 10 минут и 11 секунд Получилось так:
| Код | //TODO: мигание в панели задач void __fastcall TfrmInputCaptcha::tmrFlashWindowTimer(TObject *Sender) { HWND hWnd = NULL; TCHAR szBuff[MAX_PATH + 1] = {0}; const tString csWndText = Caption;
hWnd = ::GetForegroundWindow(); int iSize = ::GetWindowText(hWnd, szBuff, MAX_PATH);
if (csWndText == tString(szBuff, iSize)) { tmrFlashWindow->Enabled = false;
return; }
::FlashWindow(Application->Handle, true); }
|
|