Показать сообщение отдельно
Старый 18.09.2002, 18:41   #3  
xroad is offline
xroad
Участник
 
10 / 16 (1) ++
Регистрация: 03.01.2002
Адрес: Москва
Не знаю, как насчёт модальной, а псевдомодальную (т.е. форму, при открытии
которой остальные окна становятся недоступными) можно попробывать сделать.
Ниже приведён код ф-ии, которая делает окно с заданным дискриптором
псевдомодальным (или нет). Пример использования: в методе run нужной нам
формы пишем
PHP код:
public void run()
{
     ...
     
setFormModal(this.hWnd(), true);
},

а в методе Close соответственно   setFormModal(this.hWnd(), false). 

static 
void setFormModal(int _thisHWNDboolean _bModal)
{
    
DLL             _winApiDLL;
    
DLLFunction     _EnabledWindow;
    
DLLFunction     _getTop;
    
DLLFunction     _getNext;
    
DLLFunction     _getParent;

    
void local_enableWHND(int _lHWND)
    {
        
int lnextWnd;

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

        while (
lnextWnd)
        {
           if (
lnextWnd != _lHWND)
                
_enabledWindow.call(lnextWnd, (!_bModal));

            
lnextWnd =  _getNext.call(lnextWnd2);
        }
    }
    ;
    
_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::DWORDExtTypes::DWORD);

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

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

    
local_enableWHND(_thisHWND);
    
    
// если надо заблокировать панель инструментов, то раскоментировать
    //local_enableWHND(_getParent.call(_thisHWND));

За это сообщение автора поблагодарили: oip (5), moid (1).