Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Вниз

Формочки... Много формочек!!!   Найти похожие ветки 

 
XopoSHiy   (2003-09-11 19:41) [0]

Hi All,

Возникла такая проблема.
Есть главная alwaysOnTop форма. Hа ней кнопочки, которые показывают разные другие формы. Допустим открыта главная форма и еще парочка других. Тогда при попытке перетащить главную форму, все остальные появляются на переднем плане, даже если они не были активны.
А мне хочется, чтобы если неглавное окошко было где-то позади других окон (не моего приложения), то при активаци главной формы вперед вылезало ТОЛЬКО главное окошко. Остальные чтоб где были, там и оставались.

Вот убился уже - не понимаю как это сделать. Перекопал все исходники VCL так и не понял :(

Может кто уже сталкивался - помогите....


 
Андрей Сенченко   (2003-09-11 20:41) [1]

Ну дык ... убей Form N.Create из кода application и делай его по нажатию кнопки.

Память опять же сэкономишь.


 
XopoSHiy   (2003-09-11 21:45) [2]

Совершенно очевидно, что я это уже попробовал, перед тем как в форум писать ;)
Разницы нет!

Я даже больше скажу. Я засёк какие мессаги приходят в WndProc "неглавной" формы, при активации главной формы. И отрубил их все! Так вот окошко перестало рисоваться нормально(WM_NCPAINT я тоже отрубил :), но все равно появляется (его становится видно, например, когда мышкой поводишь по тому месту где форма должна быть.

Так что появляется "неглавная" формочка НЕ в результате получения какого-либо сообщения :(

Куда дальше копать даже и не знаю...


 
Андрей Сенченко   (2003-09-11 21:56) [3]

вот не нужно лазать слишком глубоко, если не уверен к чему это приведет.

Еще раз.
При добавлении формы ( юнита ) в проект Дельфя атоматом добавляет вот сюда :

program nnn;

uses
Forms,
nnn1 in "nnn1.pas" {FmMain},

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TFmMain, FmMain);
Application.Run;
end.


еще один
Application.CreateForm(TFmMain, FmMain);

Достаточно убрать эту процедуру на кнопку ( или какое то иное событие ее вызова ) и эта форма перестанет создаваться при старте.
Безусловно необходимо делать ей Free в момент выхода из нее.

Есть конечно вариант, что вопрос был задан не совсем корректно.


 
XopoSHiy   (2003-09-12 06:00) [4]

Я понял ;)
Видимо действительно я не совсем понятно выразился.
Еще разик:
У меня открыто две формы. Form1 и Form2 моего приложения. Form1 - главная форма. Открываем notepad, так, чтобы он загородил Form2. Теперь щелкаем по главной форме Form1. И наблюдаем, как вместе с Form1 на передний план (поверх notepad-а) вылезает также и Form2.
Вопрос: Как сделать так, чтобы в подобной ситуации вперед вылезала только та форма, по которой я щелкнул мышью, а все остальные оставались на заднем плане.

Hint: предложенный способ создания формы я испробовал первым же делом. Он не дает желаемого результата. То есть все формы лезут вперед разом, при активации хотя бы одной.


 
XopoSHiy   (2003-09-12 09:44) [5]

Ну, что? Неужели никто не сталкивался с такой же проблемой?
ап!


 
AGGRESSOR   (2003-09-12 10:20) [6]

Если это уж такая проблема- схитри. Отправляй свою вторую форму на задний план по хендлеру при активации главной формы :)


 
XopoSHiy   (2003-09-12 10:43) [7]

Ну да.
Осталось только научится поределять, на каком месте вторая форма была до активации первой, и научится "отправлять на задний план" в точности в то место, где она была до активации основного... По-моему эта задачка еще покруче, чем первоначальная ;)


 
Vlad   (2003-09-12 10:50) [8]

Попробуй при создании формы Form2, в качестве owner дать Application или nil


 
XopoSHiy   (2003-09-12 11:15) [9]

Пробовал :) Эффект нулевой. Все как прежде.


 
Плохиш_   (2003-09-12 11:25) [10]

2XopoSHiy (12.09.03 06:00) [4]
Вообще-то, на передний план (поверх notepad-а) вылезает не форма, а приложение со всеми принадлежащими ему формами
Надеюсь так понятно?

А для твоей проблемы: минимизируй ненужные формы


 
XopoSHiy   (2003-09-12 12:53) [11]

Больше всего я боялся, что мне ответят именно так :\

После небольшого расследования получилось вот что.
Окошки вылазят на передний план после того как Application в своем обработчике WndProc обрабатывает сообщение WM_WINDOWPOSCHANGING. Причем обрабатывает он его не сам, а передает некоему обработчику по умолчанию вот таким образом:
Result := DefWindowProc(FHandle, Msg, WParam, LParam);

А эта функция в свою очередь определена в модуле Windows.pas так:
function DefWindowProc; external user32 name "DefWindowProcA";

Так что, имхо, тупик.

С другой стороны совершенно не понятно, как этот самый DefWindowProc узнает о существовании всех моих остальных форм! Также следствие показало, что при вызове функции
function SetForegroundWindow; external user32 name "SetForegroundWindow";
с хэндлом главной или неглавной формочки, вытаскивает на передний план ВСЕ открытые формы приложения. :(

Так что я с чистым сердцем ставлю крест на этой затее.
Но если кто-то найдет выход - сообщите :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.011 c
4-82550
Prov
2003-07-22 13:27
2003.09.25
Сменить фон едита


1-82268
Zhouck
2003-09-15 11:42
2003.09.25
Как связаться с OpenOffice ?


3-82138
Kosha
2003-09-03 14:28
2003.09.25
Работа с дробными числами в Access


6-82368
Leran2003
2003-07-24 15:44
2003.09.25
IdHTTP


1-82313
Михаил
2003-09-15 16:08
2003.09.25
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский