|
#1
|
||||
|
||||
Вопрос о форме
Как сделать чтобы форма(программа) была всегда активной, т.е. видимой, бе ручной активации, всегда. У меня на переводчике есть такая кнопка "Сделать поверх всех окон", и какая бы не была открыта программа, пока не выключишь эту опции, программа всегда будет видимой и активной. Как можно это сделать все вроде пробовал и на событие "FormDeactivate" ставил Form1.Activate; но скорее всего нужно идти от этого события и делать окно активным, но как, объясните.
Хотя почему-то на это событие ничего не поставишь, не имя заголовок формы, я правильно понял, что оно вызывается, когда форма не активна ? |
#2
|
|||
|
|||
form1.FormStyle:=fsstayontop;
|
#3
|
||||
|
||||
Код:
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); - То же самое, но так поверх всех окон можно сделать любое окно, зная его идентификатор, для твоей формы это Form1.Handle А так обратно: Код:
SetWindowPos(Form1.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#4
|
||||
|
||||
Спасибо
Спасибо, но как это можно применить на QForms. Т.К. у меня, например есть там другие формы: Form1, Form2...
|
#5
|
||||
|
||||
Ну кто-нибудь знает ?
Как это применить к QForms. т.к. у меня, например есть там другие формы: Form1, Form2... в одной типа "о программе" и т.д. Как мне нужно заменить Form1 на QForm
Код:
SetWindowPos(Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); Последний раз редактировалось Oleg, 30.12.2007 в 16:16. |
#6
|
||||
|
||||
Помогите
Ну кто-нибудь, скажите, как это сделать ?
|
#7
|
||||
|
||||
Сорри, был занят...
Хм, похоже никак, т.к у QForms свойство Handle имеет другой тип, не HWND, и в процедурах из модуля Windows, его использовать нельзя... кстати Form1.FormStyle:=fsStayOnTop; тоже не работает, даже не знаю почему, может ошибка в исходниках... PS: В обычной форме из модуля Forms при присвоении свойства fsStayOnTop происходит пересоздание формы с новым параметром, залез в отладку, происходит вызов: TCustomForm.SetFormStyle(fsStayOnTop) -> TWinControl.UpdateControlState -> TWinControl.UpdateShowing -> TWinControl.CreateHandle -> TCustomForm.CreateWnd и вот в последнем методе и проверяется свойство: модуль Forms строка 3712: Код:
case FormStyle of ... fsStayOnTop: SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE); end; в QForms разобраться немогу, похоже там всё подобное этому вызывается из DLL - qtintf70.dll , поэтому скорее всего ошибка разработчиков: факт остаётся фактом - свойство fsStayOnTop неработает Велик и могуч наш Object Pascal ! ICQ: 357-591-887 Последний раз редактировалось Rokuell, 30.12.2007 в 19:25. |
#8
|
||||
|
||||
жаль
ОООчень жаль, но всё-таки, наверное это как-то возможно, просто ещё никто не встречал, ведь у меня в переводчике есть и другие окна, а он может быть поверх всех.
Ладно, спасибо хоть, что-нибудь ответили. |
#9
|
||||
|
||||
Цитата
Цитата:
Код:
application.RestoreTopMosts; |