Javascript Photoshop脚本-更新窗口中的进度条
我想为我的一个Photoshop脚本显示一个进度条。如果我在一个按钮点击事件中工作,那么我可以毫无问题地更新进度条 对于此脚本,不需要用户交互。我想: -显示窗口 -工作完成时更新进度条 -关上窗户Javascript Photoshop脚本-更新窗口中的进度条,javascript,photoshop,flash-cs5,adobe-scriptui,Javascript,Photoshop,Flash Cs5,Adobe Scriptui,我想为我的一个Photoshop脚本显示一个进度条。如果我在一个按钮点击事件中工作,那么我可以毫无问题地更新进度条 对于此脚本,不需要用户交互。我想: -显示窗口 -工作完成时更新进度条 -关上窗户 var win = new Window("dialog{text:'Progress',bounds:[100,100,400,150],\ bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};"); win.show();
var win = new Window("dialog{text:'Progress',bounds:[100,100,400,150],\ bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();
for(...){
//do work here
//update progress
win.bar.value = ...;
}
win.close();
问题是,win.show()代码>阻塞,直到用户关闭窗口。我还尝试添加一个onClose
处理程序,然后立即关闭窗口,但窗口从未显示
关于如何让进度条工作有什么想法吗?窗口类对话框是一个模式对话框,需要您在继续执行之前关闭它
使用类窗口
创建非阻塞窗口:
var win = new Window("window{text:'Progress',bounds:[100,100,400,150],bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();
for(...){
//do work here
//update progress
win.bar.value = ...;
}
win.close();
但是,您将在这里遇到下一个问题。根据您在循环中的操作,photoshop更新UI的速度不够快,无法看到进度条移动。这就是我被卡住的地方:/我曾经运行过WaitForRedraw代码段,也许它会使ps redraw用户界面变得更好?
没有时间检查,只是一个想法
function WaitForRedraw(){
var eventWait = charIDToTypeID("Wait")
var enumRedrawComplete = charIDToTypeID("RdCm")
var typeState = charIDToTypeID("Stte")
var keyState = charIDToTypeID("Stte")
var desc = new ActionDescriptor()
desc.putEnumerated(keyState, typeState, enumRedrawComplete)
executeAction(eventWait, desc, DialogModes.NO)
}
您可能想考虑使用App.RealSH()或WaITFReRebug()。有一个window.update(),但它似乎并没有为我解决这个问题
源代码如下:每次增加该条强制进行UI更新时,请使用win.update()。我认为从技术上讲,它不会强制windows更新,它只是使窗口无效,然后windows操作系统在有时间时会重新绘制(低优先级)。在慢速系统上,这将在循环完成后完成。。。