Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Хэндл последнего активного окна


Автор: Antony41 24.5.2009, 18:12
Скажите пожалуйста Можно ли без передачи хэндла последнего активного окна в переменную, узнать его другим способом.
А вобще проблема такая есть форма1(MainForm) форма2(Настройки) форма3(О программе) и тд. и иконка в трее соответственно с popupmenu.
Знаю что перед выпадением меню нужно назначать хэндл какого нибудь окна, а после выпадения нужно посылать wm_null. 
Но вот если к примеру открыта форма в режиме ShowModal. ладно бы только была форма настроек можно было бы назначать активным его, но их много типа там окна обновлений и другие. И после выпадения передаю фокус форме 1, и все формы которые были открыты в режиме showmodal, становятся на заднем плане=(, а форма 1 становится не активной smile 

Код

procedure TForm1.RzTrayIcon1RButtonDown(Sender: TObject);
var
  p: TPoint;
  Hnd:Thandle;
begin
  Hnd:=Form1.Handle;
  SetForegroundWindow(Hnd);
  GetCursorPos(p);
  traymenu.Popup(p.x, p.y);
  PostMessage(hnd, WM_NULL, 0, 0);
  inherited;
end;


Как быть?

Автор: kami 24.5.2009, 19:30
Цитата(Antony41 @  24.5.2009,  18:12 Найти цитируемый пост)
после выпадения передаю фокус форме 1

Screen.ActiveForm?

Автор: Antony41 24.5.2009, 20:05
точно как же я мог забыть про Screen.ActiveForm

Код

procedure TForm1.RzTrayIcon1RButtonDown(Sender: TObject);
var
  p: TPoint;
  Fhwnd:HWND;
begin
  Fhwnd:=Screen.ActiveForm.Handle;
  SetForegroundWindow(FHwnd);
  GetCursorPos(p);
  traymenu.Popup(p.x, p.y);
  PostMessage(Fhwnd, WM_NULL, 0, 0);
  inherited;
end;


Спасибо огромное   smile

Добавлено через 3 минуты и 48 секунд
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)