| 
| 
 | Вопрос # 4 368/ вопрос открыт / | 
 |  Здравствуйте!При показе или перед показом Hint кнопки на Toolbar все открытые формы уходят за главную.
 Открыл все три формы. На двух из них есть ToolBar с одной кнопкой имеющей Hint. При наведении курсора мыши на кнопку в Toolbar, после вывода Hint все остальные формы становятся позади основной (Form1) и причём вывести их можно на передний план только по клику на заголовоке, а не на теле формы. Даже если на Form2 навести курсор на кнопку ToolBar, то после вывода Hint снова на переднем плане Form1. Что за баг такой? И почему при двух открытых формах (Form1, Form2) при нажатии на кнопку в Form2 при показе Form3, Form2 уходит на задний план за Form1 и Form3, Должно же быть так: поверх Form1 Form2, а поверх Form2 Form3?
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) 
|  |   Вопрос задал: Shouldercannon (статус: Посетитель)Вопрос отправлен: 30 июня 2010, 14:19
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Мережников Андрей Здравствуйте, Shouldercannon!В DelphiWorld приведен такой пример кода (см. в приложении)
 Приложение:Переключить в обычный режим type   TForm = class(TForm)     {...}   protected     procedure CreateParams(var Params: TCreateParams); override;   end;  implementation  {...}  procedure TForm2.CreateParams(var Params: TCreateParams); begin   inherited CreateParams(Params);   Params.ExStyle   := Params.ExStyle or WS_EX_APPWINDOW;   Params.WndParent := GetDesktopWindow; end; 
|  | Ответ отправил: Мережников Андрей (статус: Абитуриент)Время отправки: 30 июня 2010, 18:37
 
 |  
 Мини-форум вопросаВсего сообщений: 5; последнее сообщение — 1 июля 2010, 13:20; участников в обсуждении: 2. 
|   | Shouldercannon (статус: Посетитель), 30 июня 2010, 18:09 [#1]:Проблема заключалась в Params.WndParent := GetDesktopWindow;. Убрав Params.WndParent := GetDesktopWindow; появилась новая проблема. Открыты две формы, каждая из них имеет кнопку на панели задач. Если свернуть вторую форму, то всё нормально как были две кнопки на панели задач так и остались, но если свернуть первую (основную), то на панели задач остаётся кнопка только главной формы, а второй нет. Может есть альтернатива Params.WndParent := GetDesktopWindow;, менее проблематичная?
 |  
|   | Вадим К (статус: Академик), 30 июня 2010, 22:21 [#2]:Delphi 2005 и младше? И формы немодальные? если они не модальные, то они не могут оставаться поверх основной. Если хочется, что бы были - делайте модальными.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Shouldercannon (статус: Посетитель), 30 июня 2010, 23:15 [#3]:Delphi 7. Не модальные. Нато и делалось, чтобы можно было открыть несколько Форм и свободно переключаться между ними. |  
|   | Вадим К (статус: Академик), 1 июля 2010, 03:55 [#4]:Дело в том, что в 7 делфи кнопка на панели задач это не кнопка главной формы. Это кнопка невидимого окна. Поэтому, когда ее сворачивают, то сворачивается и все другие формы. Что же делать? Попробовать в 2007 делфи и старше. Во вторых можно попробовать перепроектировать приложение (да, понимаю, это звучит дико и возможно рушит Ваши представления, но ... может там действительно плохой интерфейс?). В третьих, если нужно так, что бы три формы были независимы, но порядок соблюдался - это опять толчек к модальным формам. Если же формы "очень независимы", то может это три разных приложения? В виндовс не принято приложениям делать кнопки для всех своих окон, а просто сделать в меню "окна" список окон. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Shouldercannon (статус: Посетитель), 1 июля 2010, 13:20 [#5]:Соблюдение парядка не требуется. CreatParams заменил на procedure TForm2.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
end;Теперь осталось решить проблему сворачивания всех форм при сворачивании основной. 
 P.S. А если использовать мультипоточность?
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |