//--------------------------------------------------------------------------- void __fastcall TTVPMainForm::ApplicationDeactivate(TObject *Sender) { ApplicationActivating = false; TVPHideModalAtAppDeactivate(); TVPHideFontSelectFormAtAppDeactivate(); TVPMinimizeFullScreenWindowAtInactivation(); // fire compact event TVPDeliverCompactEvent(TVP_COMPACT_LEVEL_DEACTIVATE); // set application-level stay-on-top state if(ApplicationStayOnTop) SetWindowPos(Application->Handle,HWND_TOPMOST ,0,0,0,0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE); else SetWindowPos(Application->Handle,HWND_NOTOPMOST ,0,0,0,0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE); // set sound volume TVPResetVolumeToAllSoundBuffer(); // trigger System.onDeactivate event TVPPostApplicationDeactivateEvent(); }
//--------------------------------------------------------------------------- void __fastcall TTVPMainForm::ApplicationMinimize(TObject *Sender) { // fire compact event ApplicationNotMinimizing = false; TVPDeliverCompactEvent(TVP_COMPACT_LEVEL_MINIMIZE); // set sound volume TVPResetVolumeToAllSoundBuffer(); }
void tTVPApplication::OnDeactivate( HWND hWnd ) { if( hWnd != GetMainWindowHandle() ) return; application_activating_ = false; TVPMinimizeFullScreenWindowAtInactivation(); // fire compact event TVPDeliverCompactEvent(TVP_COMPACT_LEVEL_DEACTIVATE); // set sound volume TVPResetVolumeToAllSoundBuffer(); // trigger System.onDeactivate event TVPPostApplicationDeactivateEvent(); }
//--------------------------------------------------------------------------- void __fastcall TTVPMainForm::SystemWatchTimerTimer(TObject *Sender) { if(TVPTerminated) { // this will ensure terminating the application. // the WM_QUIT message disappears in some unknown situations... ::PostMessage(TVPMainForm->Handle, WM_USER+0x31/*dummy msg*/, 0, 0); Application->Terminate(); ::PostMessage(TVPMainForm->Handle, WM_USER+0x31/*dummy msg*/, 0, 0); } // call events DWORD tick = GetTickCount(); // push environ noise TVPPushEnvironNoise(&tick, sizeof(tick)); TVPPushEnvironNoise(&LastCompactedTick, sizeof(LastCompactedTick)); TVPPushEnvironNoise(&LastShowModalWindowSentTick, sizeof(LastShowModalWindowSentTick)); TVPPushEnvironNoise(&MixedIdleTick, sizeof(MixedIdleTick)); POINT pt; GetCursorPos(&pt); TVPPushEnvironNoise(&pt, sizeof(pt)); // CPU clock monitoring { static bool clock_rough_printed = false; if(!clock_rough_printed && TVPCPUClockAccuracy == ccaRough) { tjs_char msg[80]; TJS_sprintf(msg, TJS_W("(info) CPU clock (roughly) : %dMHz"), (int)TVPCPUClock); TVPAddImportantLog(msg); clock_rough_printed = true; } static bool clock_printed = false; if(!clock_printed && TVPCPUClockAccuracy == ccaAccurate) { tjs_char msg[80]; TJS_sprintf(msg, TJS_W("(info) CPU clock : %.1fMHz"), (float)TVPCPUClock); TVPAddImportantLog(msg); clock_printed = true; } } // check status and deliver events DeliverEvents(); // call TickBeat tjs_int count = TVPGetWindowCount(); for(tjs_int i = 0; i<count; i++) { tTJSNI_Window *win = TVPGetWindowListAt(i); win->TickBeat(); } if(!ContinuousEventCalling && tick - LastCompactedTick > 4000) { // idle state over 4 sec. LastCompactedTick = tick; // fire compact event TVPDeliverCompactEvent(TVP_COMPACT_LEVEL_IDLE); } if(!ContinuousEventCalling && tick > LastRehashedTick + 1500) { // TJS2 object rehash LastRehashedTick = tick; TJSDoRehash(); } if(LastCloseClickedTick && tick - LastCloseClickedTick > 3100) { // display force suicide confirmation form if(TVPHaltWarnForm) { TVPHaltWarnForm->Visible = true; } else { TVPHaltWarnForm = new TTVPHaltWarnForm(Application); TVPHaltWarnForm->Visible = true; } } // ensure modal window visible if(tick > LastShowModalWindowSentTick + 4100) { // ::PostMessage(Handle, WM_USER+0x32, 0, 0); // This is currently disabled because IME composition window // hides behind the window which is bringed top by the // window-rearrangement. LastShowModalWindowSentTick = tick; } }