Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2007, 00:02
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Вопрос о форме

Как сделать чтобы форма(программа) была всегда активной, т.е. видимой, бе ручной активации, всегда. У меня на переводчике есть такая кнопка "Сделать поверх всех окон", и какая бы не была открыта программа, пока не выключишь эту опции, программа всегда будет видимой и активной. Как можно это сделать все вроде пробовал и на событие "FormDeactivate" ставил Form1.Activate; но скорее всего нужно идти от этого события и делать окно активным, но как, объясните.
Хотя почему-то на это событие ничего не поставишь, не имя заголовок формы, я правильно понял, что оно вызывается, когда форма не активна ?
Ответить с цитированием
  #2  
Старый 30.12.2007, 00:15
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию

form1.FormStyle:=fsstayontop;
Ответить с цитированием
  #3  
Старый 30.12.2007, 00:37
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Восклицание

Код:
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  
Старый 30.12.2007, 12:53
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Лампочка Спасибо

Спасибо, но как это можно применить на QForms. Т.К. у меня, например есть там другие формы: Form1, Form2...
Ответить с цитированием
  #5  
Старый 30.12.2007, 15:05
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Вопрос Ну кто-нибудь знает ?

Как это применить к 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  
Старый 30.12.2007, 17:00
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль Помогите

Ну кто-нибудь, скажите, как это сделать ?
Ответить с цитированием
  #7  
Старый 30.12.2007, 18:52
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Печаль

Сорри, был занят...
Хм, похоже никак, т.к у 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  
Старый 30.12.2007, 18:59
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Печаль жаль

ОООчень жаль, но всё-таки, наверное это как-то возможно, просто ещё никто не встречал, ведь у меня в переводчике есть и другие окна, а он может быть поверх всех.
Ладно, спасибо хоть, что-нибудь ответили.
Ответить с цитированием
  #9  
Старый 30.12.2007, 19:53
Аватар для Oleg
Oleg Oleg вне форума
Активный
 
Регистрация: 29.11.2007
Адрес: Оренбургская обл., Россия
Сообщения: 261
Репутация: 15
Восклицание Цитата

Цитата:
Сообщение от Rokuell
факт остаётся фактом - свойство fsStayOnTop неработает
Просто добавь в инициализации формы
Код:
application.RestoreTopMosts;
Это работает в одной форме, но не в QForm
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter