Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что передать в качестве окна для SetForegroundWindow ? [D7, WinXP]


Страницы:   1 2

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 или аналогичную.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо