-
У меня есть программа где используется много разных компонентов, и в какой-то момент перестали показываться MessageBox'ы, включая даже прямые вызовы API-функций MessageBoxW & MessageBoxA. При их вызове заголовок главной формы становится неактивным (отрисовывается в этом цвете), хотя все контролы функционируют, и чтобы он снова стал в активном цвете, нужно переключиться на другое окно и обратно в главную форму, а сам MessageBox нигде не появлется. С чем это может быть связано?
-
> есть программа где используется много разных компонентов
в остальных программах используется мало разных компонентов...
код вызова?
-
MessageBox(...) <> 0 ?
-
> хотя все контролы функционируют
Какие у вас параметры в MessageBox()? На чём программа - чистый апи или кто?
> При их вызове заголовок главной формы становится неактивным
Хм... Что будет если после такого нажать на клавиатуре например кнопку Alt?
-
> clickmaker © (03.02.11 11:10) [2]
Да, действительно, возвращает ноль, Код вызова например такой:
Res := MessageBoxA(Self.Handle, 'Search text not found', 'Error', MB_OK or MB_ICONERROR);
if (Res = 0) then
begin
Self.sbStatus.SimpleText := 'Not enough memory!!!';
end;
Причем замена MessageBoxA на MessageBoxW и Application.MessageBox ничего не меняет. При этом в другом месте программы MessageBox ы вызываются всегда нормально (тот же поток, не понимаю в чем разница). "Недостаточно памяти" - не может быть, что причина в этом - для всего остального, включая создание разных форм и объектов, память есть! Пограмма на VCL + много сторонних компонентов. Я просто думаю, что может быть какие-то компоненты (madExcept, TMS (TNT) Unicode Controls, некоторые из JVCL, WmiConnection, TEmbeddedWB, еще что-нибудь) могут зачем-то перехватывать вызовы MessageBox или устанавливать какие-то хуки на создание окон, и приводить к такому "через раз" отрабатыванию диалогов. Клавиша Alt работает штатно.
-
сразу видно что не сам писал :D что есть Self.Handle ? и где связь между MessageBoxA=0 и 'Not enough memory!!!' ?????
-
Что значит не сам писал??? Self.Handle - HWND главной формы, owner window для окна диалога, код вызова находится в одной из процедур (методе) этой формы. Связь из справки: The return value is zero if there is not enough memory to create the message box. (Win32 Developer's Reference от Delphi 7, статья "MessageBox")
Я конечно понимаю, на этом форуме принято почти всех по умолчанию считать студентами-недоучками, но это не всегда так.
Пока проблема временно ОБОЙДЕНА использованием MessageDlg, предположительно дело в состоянии HWND Application и других окон, используемых в приложении.
-
> The return value is zero if there is not enough memory to > create the message box. > (Win32 Developer's Reference от Delphi 7, статья "MessageBox")
чего гадать?
if MessageBox() = 0 then RaiseLastWin32Error;
-
> Я конечно понимаю, на этом форуме принято почти всех по > умолчанию считать студентами-недоучками
ну так и есть,только студенты читают справку делфи по апи функциям вместо msdn где собсна ясно сказано че делать если результат=0 и окно владелец нафиг не обязательно и может быть 0,а уш если надо то и писать form.handle а не пугать компилятор своим словарным запасом
-
> if MessageBox() = 0 then RaiseLastWin32Error;
Ошибка возникает только если третий параметр <> nil (заголовок окна) Код ошибки: 1421: Control ID not found. Причину не понимаю.
-
аты собственно проверял на какой модуль мприходятся вызовы MessageBox может какойнить из твоей кучи "много разных компонентов" его переопределяет замени все вызовы "MessageBox" на "Windows.MessageBox" может че изменица
-
> QAZ (08.02.11 21:55) [10]
Ну зачем ты относишься к нему как к студенту-недоучке? Он же это в первую очередь проверил. Это всë баги в делфи и вындовс!
-
QAZ (07.02.11 10:51) [5] > ну так и есть,только студенты читают справку делфи по апи > функциям вместо msdn где собсна ясно сказано че делать если > результат=0 и окно владелец нафиг не обязательно и может > быть 0,а уш если надо то и писать form.handle а не пугать > компилятор своим словарным запасом
Form1.Handle?! Это, сударь, неслыханное ламерство! Оно требут немедленого удаления верхних конечностей путем отрывания! Достопочтенный компилятор будет нагружен лишней работой, многоуважаемый кодер будет писать лишние буковки, а многострадальная форма сможет показываться только в 1 экземпляре. Окно-владелец тоже желательно - как я помню, на что-то оно влияет.
-
> Окно-владелец тоже желательно - как я помню, на что-то оно > влияет.
пока не ответиш на сообщение не сможеш перейти в окну владельцу а с 0 никакие окна не блокируются смотря какие цели преследуеш, тем и пользуешся
|