Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Модальные формы


0990 ©   (2010-01-14 17:35:00) 

в приложении в определенный момент времени автоматом вызывается модальная форма. Проблема в том, что в 1 из 1000 случаев она непонятно как оказывается позади главной, и я не могу получить к ней доступ т.к. главная закрывает ее полностью. В чем может быть дело.


Игорь Шевченко   (2010-01-15 20:58:00) [1]

http://transl-gunsmoker.blogspot.com/2009/01/blog-post_6896.html


0990   (2010-01-15 13:20:00) [2]


> Форма при этом создается или только показывается ранее созданная
> ?


Создается. Application.CreateForm(...)


ANB   (2010-01-15 13:06:00) [3]


> автоматом вызывается модальная форма

Форма при этом создается или только показывается ранее созданная ?


0990   (2010-01-15 12:48:00) [4]

Проблему решил написанием промежуточного класса:


const
 MSG_SET_TOP = WM_USER + 1;

type

 { TTopForm }

 TTopForm = class(THelpForm)
 private
   procedure MsgSetTop(var Message: TMessage); message MSG_SET_TOP;
 protected
   procedure DoShow; override;
 end;

{ TTopForm }

procedure TTopForm.DoShow;
begin
 inherited;
 if fsModal in FormState then
   try
     PostMessage(Handle, MSG_SET_TOP, 0, 0);
   except
   end;
end;

procedure TTopForm.MsgSetTop(var Message: TMessage);
begin
 try
   SetWindowPos(Handle, HWND_TOP, 0, 0, 0, 0,
     SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOOWNERZORDER or
     SWP_NOREPOSITION or SWP_NOSIZE);
 except
 end;
end;


Ega23   (2010-01-15 12:45:00) [5]


> И это прописать в инструкции для пользователя?


Да.
Если ты поищешь разные программы с модальными окнами, и потом поиспользуешь их, то увидишь точно такой же эффект.


Darvin   (2010-01-15 12:22:00) [6]


> Alt + Tab

И это прописать в инструкции для пользователя?


Ega23   (2010-01-15 12:08:00) [7]

Alt + Tab


Darvin   (2010-01-15 12:01:00) [8]

У меня такой косяк тоже наблюдается. Создаю с параметром Application или Application.CreateForm()


sniknik   (2010-01-15 10:57:00) [9]

с модальной формой я такого не видел... но если это есть то может быть вызвано теми же причинами, например созданием формы с nil в параметрах... не знаю в общем как но аналогия, имхо, очевидна.
и еще, имхо, очевидна необходимость в дополнительных исходных данных про создание/использовании формы. или нет?


Darvin   (2010-01-15 10:00:00) [10]

Вообще-то, в вопросе шла речь не о MessageBox-е, а о модальной форме ;-)


Ганя   (2010-01-14 20:05:00) [11]

С MessageBox забавная ситуация иногда бывает при вызове дефолтного обработчика исключения.
Выглядит это так, что при вызове Application.MessageBox внутри него неправильно определяется параметр - дескриптор окна.
Функция Windows.MessageBox возвращает соответствующий код ошибки, но его никто не анализирует, и сообщение просто не появляется на экране.
Теперь что происходит у пользователя - он жмет кнопку команды, при выполнении происходит какое-либо исключение, в том числе оно может быть вполне прикладным, но сообщения об ошибке он не видит, и предполагает, что операция завершилась успешно, а потом возникает взаимное непонимание.
Почему в параметры попадает не тот дескрипторЮ, и при каких условиях так бывает - понять не удалось.


clickmaker   (2010-01-14 18:08:00) [12]

> бывает если не указываешь овнера у MessageBox

это не то. Так и в приложении на АПИ можно бокс спрятать. Он даже отдельной кнопкой на таскбаре может быть


sniknik   (2010-01-14 17:56:00) [13]

бывает если не указываешь овнера у MessageBox, с другим не сталкивался.


clickmaker   (2010-01-14 17:53:00) [14]

правкой генофонда и пересборкой вцл, разве что
я лично не разбирался, в чем там косяк. может, кто-то из местных знает


0990   (2010-01-14 17:50:00) [15]


> глюк VCL


как его исправить не подскажите?


clickmaker   (2010-01-14 17:47:00) [16]

> В чем может быть дело

глюк VCL


Ega23   (2010-01-14 17:43:00) [17]

Alr + Tab


Наверх

Титульная страница Поиск, карта сайта Написать письмо