07.04.2009, 12:38 | #1 |
Участник
|
Как вернуть фокус на форму после вызова infolog?
Добрый день!
Необходимо возвращать фокус на форму после выполнения некоторых операций и вывода их результата в инфологе. Т.е. инфолог как бы должен остаться в бэкграунде. Пытаюсь экспериментировать на clicked у Button на форме, но результата нет - инфолог всегда поверху остаётся. Может надо какой redraw на форме переписать.... подскажите! Это мои безуспешные попытки: X++: void clicked() { #define.UserDLL('USER32') int handle; DLL _winApiDLL = new DLL(#UserDLL); DLLFunction setActiveWindow = new DLLFunction(_winApiDLL, 'SetActiveWindow' ); boolean res; int res2; int WM_MDINEXT=0x0224; int WM_MDIACTIVATE=0x0222; int WM_MDIMAXIMIZE=0x0225; int WM_MDIGETACTIVE=0x0229; ; setActiveWindow.returns(ExtTypes::DWord); setActiveWindow.arg(ExtTypes::DWord); // breakpoint; handle = element.hWnd(); super(); info("test"); res = WinApi::setForegroundWindow(handle); WinApi::setWindowText(handle,strfmt("%1",res)); // ScannedCode.setFocus(); // ScannedCode.setSelection(0,strlen(ScannedCode.text())); infolog.activateWindow(handle); // WinApi::setWindowPos(handle,0,0,2,2); setActiveWindow.call(handle); // handle = winapi::getForegroundWindow(); // WinApi::setWindowPos(handle,0,0,2,2); // handle = winapi::sendMessage(infolog.hWnd(),WM_MDIGETACTIVE,0,""); // WinApi::setWindowText(handle,strfmt("%1",res2)); // WinApi::setWindowPos(handle,0,0,2,2); element.setActive(); element.formOnTop(); } |
|
07.04.2009, 12:53 | #2 |
Administrator
|
так пойдет?
X++: void clicked() { ; info("Тест"); super(); infolog.viewBuild(); infolog.activateWindow(element.hWnd()); }
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: petr (4), rkorchagin (1). |
07.04.2009, 12:59 | #3 |
Участник
|
Спасибо!
|
|
Теги |
info, setactive, setfocus, фокус, форма, infolog, view, activate |
|
|