Вопросы и Ответы
16. Почему не получается создать окно StayOnTop (всегда наверху)?
Создать окно которое всегда будет наверху (не будет перекрываться другими окнами) несложно, для этого достаточно полю FormStyle объекта TForm присвоить значение fsStayOnTop. И это прекрасно работает... до тех пор пока Вам не понадобится несколько раз сделать окно то нормальным, то снова StayOnTop. Если это делать процедурами RestoreTopMosts и NormalizeTopMosts иногда происходит необъяснимое игнорирование второй процедуры и Ваше окно остается навсегда (до завершения) в положении "...наверху".
Для предотвращения подобного стоит пользоваться процедурой API:
procedure SetWindowPos(Wnd: HWnd; WndInsertAfter: HWnd; X, Y, cx, cy: Integer; Flags: Word);
эта процедура позволяет делать с окном очень много, но мы остановимся лишь на двух возможностях интересующих нас.
............
VAR isTopMost: Boolean;
............
procedure
TForm1.bTopMostClick(Sender: TObject); IF
isTopMost THEN {Окно
в состояние - всегда наверху} ELSE {Окно
в нормальное состояние} isTopMost
:= NOT isTopMost; end; ............
begin
SetWindowPos(Application.Handle, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOSIZE Or SWP_NOMOVE)
SetWindowPos(Application.Handle, HWND_NOTOPMOST, 0, 0, 0,
0, SWP_NOSIZE Or SWP_NOMOVE)
...предыдущая страница следующая...
оглавление