Показать сообщение отдельно
Старый 29.07.2009, 11:45   #10  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,495 / 1070 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
тогда проще сделать вызываемую форму модальной.

в run() формы добавьте

X++:
void run()
{
    WinApi::setFormModal(this.hWnd(), true);
}
в класс WinApi добавьте
X++:
static HWND setFormModal(hWND _thisHWND, boolean _bModal, HWND _parentHWND = 0)
{
    DLL             _winApiDLL;
    DLLFunction     _EnabledWindow;
    DLLFunction     _getTop;
    DLLFunction     _getNext;
    DLLFunction     _getParent;

    void local_enableWHND(HWND _lHWND, HWND _pHWND = 0)
    {
        int lnextWnd;

        if (!_pHWND)
            _pHWND = _getParent.call(_lHWND);

        lnextWnd = _getTop.call(_getParent.call(_lHWND));

        while (lnextWnd)
        {
           if (lnextWnd != _lHWND && WinApi::getWindowText(lnextWnd) != "@SYS25246")
                _enabledWindow.call(lnextWnd, (!_bModal));

            lnextWnd =  _getNext.call(lnextWnd, 2);
        }
    }
    ;
    _winApiDLL              = new DLL('user32');
    _getNext                = new DLLFunction(_winApiDLL, "GetWindow");
    _EnabledWindow          = new DLLFunction(_winApiDLL, "EnableWindow");
    _getTop                 = new DLLFunction(_winApiDLL, "GetTopWindow");
    _getParent              = new DLLFunction(_winApiDLL, "GetParent");

    _getParent.returns(ExtTypes::DWORD);
    _getParent.arg(ExtTypes::DWORD);

    _EnabledWindow.returns(ExtTypes::DWORD);
    _EnabledWindow.arg(ExtTypes::DWORD, ExtTypes::DWORD);

    _getTop.returns(ExtTypes::DWORD);
    _getTop.arg(ExtTypes::DWORD);

    _getNext.returns(ExtTypes::DWORD);
    _getNext.arg(ExtTypes::DWORD, ExtTypes::DWORD);

    local_enableWHND(_thisHWND);

    if (!_parentHWND)
        _parentHWND = _getParent.call(_thisHWND);

    local_enableWHND(_getParent.call(_thisHWND));

    return _parentHWND;
}