隐藏的窗户您好 - 当我运行我的插件时,我遇到了 JMP 窗口在其他(非 JMP)应用程序后面打开的问题。 以下步骤序列演示了我的笔记本电脑上发生的问题:
- 我打开 JMP,还打开一个 JMP 数据集。
- 我现在打开一些其他应用程序(例如 PowerPoint)并将其最大化(因此 JMP 主窗口和包含数据集的窗口都不会立即可见)。
- 我在 PowerPoint 中做了一些事情(例如编辑幻灯片或其他内容),但随后我想返回到 JMP 中进行分析。 因此,让 PowerPoint 打开并最大化,我将鼠标悬停在屏幕底部的 JMP 图标上,然后选择包含要分析的数据集的窗口。 该窗口现在位于 PowerPoint 顶部(尽管 JMP 主窗口仍处于隐藏状态)在后面微软幻灯片软件)。
- 我现在想要运行我的加载项,因此我从数据集窗口顶部的菜单中选择它。 我的加载项所做的第一件事是显示一个模式对话框窗口,邀请我选择要分析的数据表的列,然后只需单击“确定”按钮即可继续。 当我调用加载项时,模式对话框窗口确实出现了......但它和包含数据集的窗口立即消失在 PowerPoint 后面(给用户留下应用程序刚刚崩溃的印象)。
我注意到,如果我不是从数据集窗口打开插件,而是将 JMP 主窗口放在前面第一的,然后从任一窗口运行加载项,问题都不会发生(或者严格准确地说,数据窗口仍然消失在 PowerPoint 后面,但模式对话框窗口仍然在顶部 - 并且分析结果随后出现也在上面)。
我想解决方案可能的方法是在开始分析之前将一行启动脚本插入到加载项中,使 JMP 主窗口成为当前窗口(即,将其移动到恰好打开的任何其他应用程序前面),但我注意到获取窗口列表函数在列表中不包括 JMP 主窗口 - 因此我无法以这种方式引用它。
有人可以建议我如何解决这个问题吗? (我当然可以告诉所有用户不要以上述方式使用加载项,但如果可能的话,我更愿意通过脚本来防止问题发生。)
非常感谢。
分享和交流结果回复:隐藏的窗户我现在已经解决了隐藏窗口的问题,所以当我发布这篇文章时,我会将此问题标记为已解决。
郑重声明一下,该问题是由于在调用列选择对话框之前最小化数据表(这纯粹是出于美观目的)而引起的。 如果将来有人遇到类似的问题,以下简短的脚本可能有助于确定原因。 这需要编译到加载项中,然后从数据表上方的主菜单调用(不是从 Windows 任务栏打开数据表后(从 JMP 主窗口)。
Names Default to Here(1);
fnSelectColumn = function({dt}, {default local},
new window("Column Selection", << modal(1),
clb = ColListBox(dt, all, Output = (clb << get selected), << set max selected(1))
);
Output
);
expr_Load_DT = expr(
dt = current data table();
if(type(dt)=="Empty",
dt = open(PickFile( "Select the JMP data set to be analyzed:",, {"JMP Data Files|JMP"} ));
)
);
/*
================
START OF PROGRAM
================
*/
Intro = "There's another full-screen Windows application open right now, and you've just loaded the data table you can see ";
Intro = Intro || "behind this window from the Windows Taskbar, prior to selecting a column for analysis.\!r\!rHowever, the ";
Intro = Intro || "modal window containing the column selection dialog will disappear behind the other Windows application if the ";
Intro = Intro || "data table is minimized prior to the column selection dialog being displayed. (If it hasn't, there's no problem.)";
MinimizeYN = 1;
new window("Minimize the Data Table?", << modal(1),
VListBox(
HCenterBox(BorderBox(TextBox(Intro, << padding(5)), << padding(10), << sides(15))),
SpacerBox(size(0, 10)),
rb = RadioBox({"Minimize the data table after closing this window", "Don't minimize the data table after closing this window"},
MinimizeYN = (2 - (rb << get))
)
)
);
expr_Load_DT;
dt << minimize window(MinimizeYN); // THIS line is the one that causes the problem;
Output = fnSelectColumn(dt);
Caption("(You selected \!"" || Output[1] || "\!")"); wait(1.5); caption(remove);
/*
================
END OF PROGRAM
================
*/
回复:隐藏的窗户嗨,伊赫,
只是为了确认,我在 MS Windows 中运行此程序(我不知道在 Mac 上是否存在同样的问题),如果版本相关,我正在运行 JMP 15.0.2,所以我的版本早于您的 JMP 15.2.1 - 但我可以访问 JMP 16EA 版本 8,并且我也看到了相同的行为。
简而言之,如果 JMP 主窗口隐藏在任何完全最大化的非 JMP Windows 应用程序后面(我将其称为“X”,因为它似乎与它是什么应用程序没有任何区别),当添加-in 运行后,该加载项生成的任何输出窗口也会隐藏在 X 后面。 我从上面推断,如果我能找到一种方法,在加载项运行时立即将 JMP 主窗口置于最前面,那么问题就会得到解决。
我试图将您发布的 addin.jmpcust 的结构与我使用的加载项生成器生成的结构进行比较,但我的要长得多,而且我不知道我到底在寻找什么,所以我我怀疑我必须创建一个精简版加载项版本,然后在完成后再次寻求帮助 - 附加 JSL 脚本的副本。
我敏锐地意识到,如果无法复制这样的事情,几乎不可能诊断,所以当我有更具体的事情要做时,我会报告回来。
非常感谢您的帮助。
回复:隐藏的窗户我无法在 Windows 上的 JMP 15.2.1 上复制此内容。这是我在加载项菜单中调用大多数窗口的方式,也许与您使用的有所不同?
addin.jmpcust 内部:
<jm:command>
<jm:name>ABOUT</jm:name>
<jm:caption>About</jm:caption>
<jm:action type="path">$ADDIN_HOME(com.domain.subdomain)\addinAbout.jsl</jm:action>
<jm:icon type="none"></jm:icon>
</jm:command>
addinAbout.jsl 文件中的某处是一个 New Window() 函数。