![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что передать в качестве окна для SetForegroundWindow ? [D7, WinXP]
ANB © (2005-06-21 11:40:00)Сделал вот такую функцию для перевода окна наверх :
procedure Set_Foreground_Window (hWindow : THandle);
var i : Integer;
dwTimeout : DWord;
begin
if (hWindow = 0) then Exit;
i := 0;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, 0);
try
repeat
SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_HOTKEY, hWindow);
SwitchToThisWindow(hWindow, True);
SetForegroundWindow(hWindow);
Inc(i);
until ((hWindow = GetForegroundWindow) or (i > 5));
finally
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
end;
end;
Есть избыточность, причем я еще и 5 раз это прокручиваю. Вставил в эту функцию отладку - проверяю - стало ли окно верхним (hWindow = GetForegroundWindow), прогнал с ней - постоянно ругается, типа хендлы не совпадают. Хотя на вид, визуально, вроде все работает. Собственно проблема следующая :
если я передаю хендл окна верхнего уровня - все пашет, а вот что передавать, если мне нужно поднять наверх MDI Child окно ? (хэндл самого окна или хэндл родительского окна ? Или есть еще какие варианты ?)
ANB (2005-06-21 16:00:00) [21]То есть оптимально сначала поднять приложение, а потом Child окно ?
А почему я сейчас поднимаю только Child и все работает, только не очень устойчиво (2-3% сбоев) и бибикает ?
Игорь Шевченко (2005-06-21 15:19:00) [22]ANB © (21.06.05 14:58) [4]
> - точно хэндл главного окна никуда подсовывать не надо ?
Ну почему же - если приложение не на переднем плане, то его надо туда поместить
ANB (2005-06-21 14:58:00) [23]
> Практика - критерий истины
- дык и в текущем варианте вроде все работает, тока пикает постоянно.
> handle нужного окна ? :)
- точно хэндл главного окна никуда подсовывать не надо ?
Игорь Шевченко (2005-06-21 14:52:00) [24]ANB © (21.06.05 14:50) [2]
> - а им какой хендл передать
handle нужного окна ? :)
> И поможет ли ?
Практика - критерий истины
ANB (2005-06-21 14:50:00) [25]
> Игорь Шевченко © (21.06.05 12:50) [1]
- а им какой хендл передать ? И поможет ли ?
Игорь Шевченко (2005-06-21 12:50:00) [26]
> а вот что передавать, если мне нужно поднять наверх MDI
> Child окно
Надо вызывать функцию BringWindowToTop, SetWindowPos или аналогичную.