![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модальные формы
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