Delphi messagebox появляется за другой формой

Я использую код ниже, чтобы создать messagebox в Delphi 7. Однако у меня также есть другая форма на экране, кто FormStyle установлено значение fsStayOnTop и messagebox появляется за этой формой.

есть ли способ заставить messagebox появиться впереди?

    if Application.MessageBox('Amessage here','Title', +MB_APPLMODAL + MB_ICONQUESTION + MB_YESNO) = IDNO then

3 ответов


вызов NormalizeTopMosts до отображения окна сообщения.

используйте NormalizeTopMosts, чтобы разрешить окно сообщения или диалоговое окно, которое отображается с помощью функций API Windows (например, MessageBox и MessageDlg) непосредственно, появляются поверх самой верхней формы. В противном случае верхняя форма остается сверху и может затенять окно сообщения.

(надеюсь, он доступен в Delphi 7.)

редактировать: не уверен downvote. Если он намекает в направлении, что OP должен использовать native MessageBox функция и установить его Родительский HWND в самое верхнее окно - я бы согласился. Но, возможно, по какой-то причине это невозможно.


на Windows.pas вы можете найти больше флагов MessageBox():

MB_APPLMODAL = 000000;
MB_SYSTEMMODAL = 001000;
MB_TASKMODAL = 002000;

читать о них в документация MessageBox

вы даже можете использовать MB_TOPMOST флаг.


попробуйте флаг MB_TASKMODAL вместо MB_APPLMODAL.