![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как поместить форму программы поверх всех? [D6, WinXP]
leonidus © (2005-08-29 15:19:00)Полазил по инету, нашел вот такой метод - в таймере вызываем функции:
SetForegroundWindow(Form1.Handle);
SetWindowPos(Form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE);
Всебы ничего, но во-первых таймер это по моему очень грубый метод, во-вторых в данном случае при выборе другово окна на экране, мое окно прежде чем стать поверх должно моргнуть один раз, это и понятно - окно принудительно прорисовывается, но и это ничего, проблема в том, что теперь невозможно работать с ComboBox`ом, т.е. его выпадающий список это видимо тоже окно а окно главной формы хочет быть поверх него.
Самое интересное в том, что например окно Lingvo можно сделать как мне и нужно, т.е. на самом деле StaOnTop, и при этом все ComboBox`ы в нем будут работать, значит можно так сделать. Подскажите пожалуйста решение.
psa247 (2005-08-31 14:07:00) [1]LockSetForegroundWindow Function
---------------------------------------------------------------
The foreground process can call the LockSetForegroundWindow function to disable calls to the SetForegroundWindow function.
leonidus (2005-08-29 19:11:00) [2]Спасибо большое, работает.
Antonn (2005-08-29 17:44:00) [3]Литл примерчик:
protected
procedure WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING); message WM_WINDOWPOSCHANGING;
procedure TMainForm.WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING);
begin
SetWindowPos(Handle,HWND_TOPmost,Left,Top,Width,Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );
end;
begin...end (2005-08-29 15:51:00) [4]> leonidus © (29.08.05 15:46) [4]
Примерчика нету. Но смысл простой -- обрабатывать сообщение, устанавливать PWindowPos(Message.LParam).hwndInsertAfter = HWND_TOPMOST и возвращать нолик. Однако я не уверен, что это поможет.
leonidus (2005-08-29 15:46:00) [5]>begin...end а можно litle примерчик?
leonidus (2005-08-29 15:39:00) [6]>tesseract не ну это слишком просто:)
на самом деле по моему свойство FormStyle предназначено только для указания стиля формам внутри программы, кто будет выше других, а мне нужно что бы мое окно было поверх всех других окон, т.е. сверху окна любого приложения.
begin...end (2005-08-29 15:37:00) [7]> leonidus © (29.08.05 15:19)
А может быть, вместо таймера WM_WINDOWPOSCHANGING отлавливать?
tesseract (2005-08-29 15:31:00) [8]Form1.FormStyle=fsStayONTop;