Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Как поместить форму программы поверх всех?   Найти похожие ветки 

 
leonidus ©   (2005-08-29 15:19) [0]

Полазил по инету, нашел вот такой метод - в таймере вызываем функции:

SetForegroundWindow(Form1.Handle);
SetWindowPos(Form1.Handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE+SWP_NOSIZE);

Всебы ничего, но во-первых таймер это по моему очень грубый метод, во-вторых в данном случае при выборе другово окна на экране, мое окно прежде чем стать поверх должно моргнуть один раз, это и понятно - окно принудительно прорисовывается, но и это ничего, проблема в том, что теперь невозможно работать с ComboBox`ом, т.е. его выпадающий список это видимо тоже окно а окно главной формы хочет быть поверх него.

Самое интересное в том, что например окно Lingvo можно сделать как мне и нужно, т.е. на самом деле StaOnTop, и при этом все ComboBox`ы в нем будут работать, значит можно так сделать. Подскажите пожалуйста решение.


 
tesseract ©   (2005-08-29 15:31) [1]

Form1.FormStyle=fsStayONTop;


 
begin...end ©   (2005-08-29 15:37) [2]

> leonidus ©   (29.08.05 15:19)

А может быть, вместо таймера WM_WINDOWPOSCHANGING отлавливать?


 
leonidus ©   (2005-08-29 15:39) [3]

>tesseract не ну это слишком просто:)
на самом деле по моему свойство FormStyle предназначено только для указания стиля формам внутри программы, кто будет выше других, а мне нужно что бы мое окно было поверх всех других окон, т.е. сверху окна любого приложения.


 
leonidus ©   (2005-08-29 15:46) [4]

>begin...end а можно litle примерчик?


 
begin...end ©   (2005-08-29 15:51) [5]

> leonidus ©   (29.08.05 15:46) [4]

Примерчика нету. Но смысл простой -- обрабатывать сообщение, устанавливать PWindowPos(Message.LParam).hwndInsertAfter = HWND_TOPMOST и возвращать нолик. Однако я не уверен, что это поможет.


 
Antonn ©   (2005-08-29 17:44) [6]

Литл примерчик:

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;


 
leonidus ©   (2005-08-29 19:11) [7]

Спасибо большое, работает.


 
psa247 ©   (2005-08-31 14:07) [8]

LockSetForegroundWindow Function
---------------------------------------------------------------
The foreground process can call the LockSetForegroundWindow function to disable calls to the SetForegroundWindow function.



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.047 c
14-1129553071
Игорь Шевченко
2005-10-17 16:44
2005.11.06
Почти по Екклезиасту...


3-1127561698
Viper
2005-09-24 15:34
2005.11.06
Типы данных


14-1129150278
Германн
2005-10-13 00:51
2005.11.06
Непонятный глюк на форуме


3-1127721768
_vvv_
2005-09-26 12:02
2005.11.06
DBExpress async call


4-1125644854
Руслан
2005-09-02 11:07
2005.11.06
Посылка сообщения