场景:我有一个Delphi应用程序,它在屏幕上有一些编辑组件和按钮。在TIWEdit.OnAsyncExit和TIWButton.OnClick中设置一个标志,应用程序中的另一个线程根据标志和其他应用程序数据设置按钮的启用属性。
设置TIWButton.Enabled属性时,请求已经完成,下一个交互被取消,因为IW发现内部表示和HTML不同步。它重新合成,你必须再次点击。
我想按需要刷新屏幕。
由于我的屏幕是由模型驱动的(我无法预测屏幕上的组件以及组件之间的相互依赖关系,即业务逻辑中的组件之间的相互依赖关系),因此我无法添加JavaScript来启用或禁用按钮,具体取决于用户的操作。
发布于 2009-10-25 17:01:46
我不完全确定你的问题是否与我的问题相同,但我认为有许多共同之处。请参阅我在网上论坛上发布的演示项目(v2)。
基于杰克逊戈麦斯的一些评论,我在一个长时间运行的线程启动之前启用一个TIWTimer,并在线程结束后禁用它。参见:http://forums3.atozed.com/IntraWeb.aspx (atozedsoftware.intraweb.attachments),线程'IWLabel通过线程更新‘,2009年10月15日。
OnASync计时器事件每500毫秒启动一次,并使用一些带宽。在我的情况下可以接受(公司内部网)。
格特
发布于 2009-10-31 21:22:14
您可以使用IWElite组件包中的。
本质上,您可以使用XMLHTTPRequest (XHR)对象编写一些Javascript,以调用您的IW应用程序的would,该操作在处理完成后返回。如果您需要您的IW应用程序继续正常工作,而进程正在运行,您的Javascript可以打开一个进度窗口,并从那里进行XHR调用。
IW精英可以在这里找到:http://code.google.com/p/iwelite/
XHR请求如下所示:
function NewXHR() {
if (typeof XMLHttpRequest == "undefined") {
try { return new ActiveXObject('Msxml2.XMLHTTP.6.0');} catch(e) {}
try { return new ActiveXObject('Msxml2.XMLHTTP.3.0');} catch(e) {}
try { return new ActiveXObject('Msxml2.XMLHTTP');} catch(e) {}
try { return new ActiveXObject('Microsoft.XMLHTTP');} catch(e) {}
throw new Error('AJAX not supported in this browser.');
} else {
return = new XMLHttpRequest();
}
var xhr = NewXHR();
xhr.open("get", '/mywebaction', false);
xhr.send(null);
window.alert(xhr.responseText);上面的代码将阻塞并等待响应。如果您希望它异步运行,则可以执行以下操作:
var xhr = NewXHR();
xhr.open("get", '/mywebaction', true);
xhr.onreadystatechange = function() {
if(xhr.readyState == 4) {
if ((xhr.status == 200) || (xhr.status == 304) || (xhr.status === 0)) {
window.alert('Success: '+xhr.responseText);
} else {
window.alert('Error: ('+xhr.status+') '+xhr.statusText;
}
}
};
xhr.send(null);https://stackoverflow.com/questions/1613199
复制相似问题