Форум: "KOL";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
ВнизНе модальная форма без фокуса Найти похожие ветки
← →
kichrot © (2007-03-02 15:39) [0]Если форма (не главная) создается автоматически на этапе запуска программы (т.е. ее создание задано в свойствах проекта) и свойство Visible = False , то при применении:
Form2.Form.Visible := True;
форма становится видимой и фокус ей не передается. Это положение меня устраивает. Не устраивает лишь факт, что форма (которая используется в качестве сигнализации) постоянно висит в памяти.
При изменении настроек проекта и создании формы через код, после применения:
Form2.Form.Visible := True;
форма становится видимой, но ей еще передается фокус, что меня совершенно не устраивает.
В чем разница и как реализовать, что бы во втором случае форма не получала фокус.
← →
Vladimir Kladov (2007-03-02 18:26) [1]API не отменяется, Handle у окна есть. ShowWindow( ..., SW_SHOW or SW_NOACTIVATE );
Что значит форма висит в памяти? Нешто она занимает так много памяти? Одна форма? На ней 10000 контролов? В машине < 4M оперативки?
Имеет смысл откладывать на будущее, до первого вызова, создание форм, когда их много. Но не имеет смысла каждый раз убивать и создавать форму только ради экономии. Я еще признаю такой метод в качестве ленивого способа сброса всех состояний. Но тогда надо обеспечивать, чтобы в следующий раз она восстановила свое местоположение на экране, хотя бы, а это еще ленивей.
← →
kichrot © (2007-03-03 10:39) [2]
> API не отменяется, Handle у окна есть. ShowWindow( ...,
> SW_SHOW or SW_NOACTIVATE );
>
> Что значит форма висит в памяти? Нешто она занимает так
> много памяти? Одна форма? На ней 10000 контролов? В машине
> < 4M оперативки?
>
> Имеет смысл откладывать на будущее, до первого вызова, создание
> форм, когда их много. Но не имеет смысла каждый раз убивать
> и создавать форму только ради экономии. Я еще признаю такой
> метод в качестве ленивого способа сброса всех состояний.
> Но тогда надо обеспечивать, чтобы в следующий раз она восстановила
> свое местоположение на экране, хотя бы, а это еще ленивей
Спасибо за ответ. Очень приятно, что на данной ветке форума всегда хоть, что-то да ответят, в отличие от других веток на данном форуме.
Я програмист-дилетант, хотя и с достаточно большим стажем. Как говорится "для себе". И всегда готов прислушаться к мнению професионалов и творчески пременить чужой опыт.
Почему я решил создавать форму кодом а не через настройки проекта? В одной из тем форума, в которой обсуждался размер оперативки занимаемой KOL-приложением по сравнению с VCL-приложением, Вы Владимир рекомендовали создавать формы по мере необходимости. Да это и логично.
Конечно экономия памяти в моем случае (в связи с тем, что форма используется в качестве визуальной сигнализации, при наступлении некого события, то контролов на ней нет вообще) минимальная, но нужно быть последовательным во всем (хотя отсутствие принципов, тоже принцип).
Управление визуализацией сигнальной формы у меня реализована в отдельном потоке. При создании сигнальной формы, если в качестве родителя брать аплет или главную форму, то при наступлении события по которому сигнальная форма начинает появлятся на экране через заданные промежутки времени (мигать), нет возможности обратится к главной форме через контекстное меню при нажатии правой кн. мыши на значке в трее, сигнальная форма при своем появлении забирает фокус. Этот эфект отсутствует если создавать форму через параметры проекта.
Пробовал ShowWindow( ..., SW_SHOW or SW_NOACTIVATE ); который Вы предлагаете, но получается офигенный тормоз. Почему не знаю.
Нашел свое решение:
Создаю форму: NewForm(nil, Form2);//форма без родителя
Задаю Form2.Form.ExStyle := WS_EX_TOOLWINDOWS;//не показывается значок на панели задач при применении Form2.Form.Visible := True
в событи onShow сигнальной формы:
Form.Focused := False;
D "njv ckexft dct hf,jnftn rfr vyt ytj,[jlbvj/
← →
alex3 (2007-03-03 21:21) [3]К примеру так:
form2.form.Visible:=true;
//Делаем форму2 неактивной
Postmessage(form2.form.Handle,wm_NCActivate,0,0);
//если надо, делаем форму1 активной
Postmessage(form1.form.Handle,wm_NCActivate,2,0);
← →
имя (2007-08-08 22:42) [4]Удалено модератором
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2008.03.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c