Конечно, это довольно загадочный вопрос, но он действительно влияет на модуль сценария DM, над которым я работаю. Я пытаюсь использовать настраиваемый модальный диалог, чтобы предупредить пользователей об ошибке, обнаруженной отложенной задачей основного потока. В большинстве случаев это работает просто отлично, но если окно приложения DM оказывается свернутым при публикации сообщения об ошибке, то DM оказывается в странном состоянии, когда восстанавливается в качестве приложения переднего плана. Модальное диалоговое окно невидимо, но, тем не менее, оно блокирует действия пользователя в DM до тех пор, пока не будет закрыто нажатием клавиши «enter» или «esc».
Пример кода ниже демонстрирует проблему и упоминает решение, которое работало в GMS 1.
Есть ли аналогичный или лучший обходной путь, который будет работать в GMS 2 и более поздних версиях?
class DeferredAlertTask
{
Number deferredTaskID;
DeferredAlertTask(Object self)
{
Number taskDelay_sec = 5;
String message = "Click OK and then minimize the DM app window.\n";
message += "After 5 seconds, select DM on the task bar to restore it.\n";
message += "Dialog will be invisible, must hit 'enter' or 'esc' to go on.";
OKDialog(message);
deferredTaskID = AddMainThreadSingleTask(self, "Task", taskDelay_sec);
}
void Task(Object self)
{
String banner = "Error dialog";
String message = "Error message details.";
// Create the dialog box descriptor TagGroup
TagGroup dialogItemsSpec;
TagGroup dialogSpec = DLGCreateDialog(banner, dialogItemsSpec);
// Create and add the content box and text field to the layout
TagGroup contentBoxItemsSpec;
TagGroup contentBoxSpec = DLGCreateBox(contentBoxItemsSpec);
TagGroup contentLabelSpec = DLGCreateLabel(message);
contentBoxItemsSpec.DLGAddElement(contentLabelSpec);
dialogItemsSpec.DLGAddElement(contentBoxSpec);
// If the DM app window has been minimized,
// this modal dialog will be invisible,
// but it will still inhibit further user action
// within DM as it awaits 'esc' or 'enter'.
// The following is a remedy that works in GMS1, but not in GMS2
// GetApplicationWindow().WindowSelect();
Object dialog = Alloc(UIFrame).Init(dialogSpec);
String result = (dialog.Pose()) ? "OK" : "Cancel";
OKDialog(result);
}
}
void main()
{
Alloc(DeferredAlertTask);
}
main();
LaunchExternalProcess()
. По сути, кажется, что если вы вызываете () диалоговое окно в GMS 2, когда окно приложения свернуто, этому окну не назначается родительское окно. Поэтому вам нужно убедиться, что окно приложения отображается во время позирования.... - person BmyGuest   schedule 10.10.2016