Delphi 7 - ShowMessage, чтобы оставаться сверху и не иметь возможности щелкнуть другие окна приложений, если вы не нажмете кнопку «ОК» в сообщении

Как я могу это сделать?

procedure TFMain.Button2Click(Sender: TObject);
begin
ShowMessage('Cya!!');
Application.Terminate;
end;

Есть ли способ, чтобы можно было только щелкнуть «ОК» в ShowMessage, и если я этого не сделаю, я не смогу щелкнуть что-либо еще в моем интерфейсе?


person user3211668    schedule 21.03.2014    source источник


Ответы (2)


Я думаю, вы ищете флаг MB_SYSTEMMODAL на MessageBox. Вместо ShowMessage вызовите MessageBoxнепосредственно, например:

MessageBox(Application.Handle,'Cya!!',PChar(Application.Title),MB_OK or MB_ICONINFORMATION or MB_SYSTEMMODAL);
person Stijn Sanders    schedule 21.03.2014
comment
Я чувствую, что вам нужно объяснить, что делает MB_SYSTEMMODAL, поскольку его название восходит к давним временам, когда оно действительно приводило к системному модальному диалогу. - person David Heffernan; 21.03.2014

Нет поддерживаемого способа показать окно, которое препятствует взаимодействию с другими приложениями.

Вы можете использовать ShowMessage, чтобы отобразить модальное диалоговое окно, которое всегда будет отображаться самым верхним в вашем приложении и модальность которого покрывает все остальные окна в вашем приложении. То есть пользователь не может взаимодействовать с другими окнами в вашем приложении, пока отображается окно сообщения. Это максимальное количество модальностей, поддерживаемых системой.

Вы можете создать модальное диалоговое окно со свойством «Показать сверху». Вы не можете запретить пользователю взаимодействовать с другими приложениями, но вы можете убедиться, что ваше окно всегда находится поверх окна, с которым хочет работать пользователь. Уделите минутку тому, чтобы подумать, как пользователь отреагирует на то, что ваше приложение сделает это.

Если вы решите, что хотите это сделать, вы можете использовать MessageBox с MB_SYSTEMMODAL. Или вы можете создать свою собственную форму (или использовать CreateMessageDialog) и установить ее свойство show on top (установить FormStyle на fsStayOnTop) перед вызовом ShowModal.

person David Heffernan    schedule 21.03.2014