Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.67.48] |
|
Сообщ.
#1
,
|
|
|
Привет Всем
У меня несколько форм, как сделать чтобы неглавная форма была поверх всех окон? Причем форма (которую нужно сделать поверх всех) у меня появляется только после скрытия главной. Ставлю FormStyle:=fsStayOnTop, но это не помогает. Пробовал по всякому - не получилось.. |
Сообщ.
#2
,
|
|
|
Отцепи ее от главного окна.
procedure TForm2.FormShow(Sender: TObject); begin SetWindowLong(Handle, GWL_HWNDPARENT, GetDesktopWindow); SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); end; |
Сообщ.
#3
,
|
|
|
Большое спасибо! Все работает вопрос решен
|
Сообщ.
#4
,
|
|
|
Таже проблема, но формы у меня делаются допустим так:
Application.CreateForm(TFormSticker, Stick[Count]); То есть описан класс TFormSticker и я создаю много форм подобным образом. Мне нужно избранные из них делать поверх всех окон. И еще: как сделать, чтобы эти мои формы не сворачивались вместе с главной формой? |
Сообщ.
#5
,
|
|
|
Передавай хэндл созданной формы тому коду который я привел.
|
Сообщ.
#6
,
|
|
|
Не получается. Не видит он Хандл создаваемых форм. Вставил бы весть проект для наглядности. Как файл архива прикрепить - не пойму. Помогите, пожалуйста.
|
Сообщ.
#7
,
|
|
|
как это не видит?
Application.CreateForm(TFormSticker, Stick[Count]); SetWindowLong(TForm(Stick[Count]).Handle, GWL_HWNDPARENT, GetDesktopWindow); SetWindowPos(TForm(Stick[Count]).Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); |
Сообщ.
#8
,
|
|
|
Заработало. Спасибо огромное!
Добавлено Я так понимаю, передав HWND_NOTOPMOST, окно вернется в свое прежнее состояние. А вот как можно проверить, HWND_NOTOPMOST или HWND_TOPMOST у окна и менять при случае? |
Сообщ.
#9
,
|
|
|
Проверять можно так:
{поверх всех окон} //Смотрим Есть-ли тама птишка If Self.N5.Checked = True then //если есть ана тама,- сделаем абратна, то исть не поверх всех окон SetWindowPos(TForm(Stick[1]).Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) else //если ана тама нету,- сделаем поверх всех окон SetWindowPos(TForm(Stick[1]).Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE); //Птишка= не птишка :) Self.N5.Checked:= not (Self.N5.Checked); Но это через менюшечку. А как функцией проверить? |
Сообщ.
#10
,
|
|
|
if (GetWindowLong(Handle, GWL_EXSTYLE) and WS_EX_TOPMOST) = WS_EX_TOPMOST then ShowMessage('Состояние окна: поверх всех окон') else ShowMessage('Состояние окна: обычное'); |