PDA

Просмотр полной версии : Hint от ToolBar выводит на передний план Form1



Shouldercannon
30.06.2010, 14:24
Открыл все три формы. На двух из них есть ToolBar с одной кнопкой имеющей Hint. При наведении курсора мыши на кнопку в Toolbar, после вывода Hint все остальные формы становятся позади основной (Form1) и причём вывести их можно на передний план только по клику на заголовоке, а не на теле формы. Даже если на Form2 навести курсор на кнопку ToolBar, то после вывода Hint снова на переднем плане Form1. Что за баг такой? И почему при двух открытых формах (Form1, Form2) при нажатии на кнопку в Form2 при показе Form3, Form2 уходит на задний план за Form1 и Form3, Должно же быть так: поверх Form1 Form2, а поверх Form2 Form3?

somewhere
30.06.2010, 16:03
У тебя в Unit2 есть такой код:


Params.WndParent := GetDesktopWindow;

После него Form2 принадлежит десктопу и тем самым рушит правильный наследственный порядок отображения окон. Причем происходит это после показа самой формы - как только она ловит Repaint (а это происходит и при выводе хинта и при нажатии на кнопку). Желательно бы этой форме дать основное окно в качестве Parent или не менять параметр вообще

Shouldercannon
30.06.2010, 17:12
Желательно бы этой форме дать основное окно в качестве Parent или не менять параметр вообще
Прошу прощения это как?

somewhere
30.06.2010, 17:38
Хотя бы просто перед этой строчкой поставь // пометив ее как коментарий или удали. И тогда 99.9% все будет в норме

Shouldercannon
30.06.2010, 17:59
Убрав Params.WndParent := GetDesktopWindow; появилась новая проблема. Открыты две формы, каждая из них имеет кнопку на панели задач. Если свернуть вторую форму, то всё нормально как были две кнопки на панели задач так и остались, но если свернуть первую (основную), то на панели задач остаётся кнопка только главной формы, а второй нет.

somewhere
30.06.2010, 22:13
Значит убирай Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW из Unit2, а лучше целиком CreateParams

Shouldercannon
30.06.2010, 23:12
Нельзя, формы должны быть как "независимые приложения".

somewhere
30.06.2010, 23:21
Присутствие на таскбаре не делает форму независимым приложением... ;) вообще постановка фразы некорректна, форма - это форма, а приложение - это приложение. Не надо их под одну гребенку. Значит надо начинать сначала - выяснять что вообще требуется

Shouldercannon
30.06.2010, 23:27
Все формы должны стать "свободными". Чтобы при сворачивании основной не сворачивались все остальные и чтобы каждая из форм имела кнопку на панели задач.

Пересмотрим систему. Убираем procedure CreateParams(var Params: TCreateParams); override; и переходим на
Код:


procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;

Теперь осталось решить проблему сворачиваниях всех открытых форм при сворачивании Form1 (Главной формы).

P.S. А если использовать мультипоточность?