Не знаю, как насчёт модальной, а псевдомодальную (т.е. форму, при открытии
которой остальные окна становятся недоступными) можно попробывать сделать.
Ниже приведён код ф-ии, которая делает окно с заданным дискриптором
псевдомодальным (или нет). Пример использования: в методе run нужной нам
формы пишем
PHP код:
public void run()
{
...
setFormModal(this.hWnd(), true);
},
а в методе Close соответственно setFormModal(this.hWnd(), false).
static void setFormModal(int _thisHWND, boolean _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(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);
// если надо заблокировать панель инструментов, то раскоментировать
//local_enableWHND(_getParent.call(_thisHWND));
}