Batch file Canvas/Fabric.js交互式绘图don';t使用MSHTA.EXE刷新图形
我觉得我的问题有点不寻常。我编写了一个Windows批处理.BAT文件,从用户那里读取行(其中包含画布图形函数),并通过通过mshta.exe启动的管道将行发送到.HTA窗口;在.HTA文件中,通过Batch file Canvas/Fabric.js交互式绘图don';t使用MSHTA.EXE刷新图形,batch-file,canvas,html5-canvas,fabricjs,hta,Batch File,Canvas,Html5 Canvas,Fabricjs,Hta,我觉得我的问题有点不寻常。我编写了一个Windows批处理.BAT文件,从用户那里读取行(其中包含画布图形函数),并通过通过mshta.exe启动的管道将行发送到.HTA窗口;在.HTA文件中,通过fso.GetStandardStream(0).ReadLine()读取这些行,并通过eval()在HTA窗口上绘制图形。下面是代码,但在您开始搜索错误之前,您应该知道,除了下面我解释的细节之外,一切都正常工作 BatchFile.bat: @echo off if "%1" equ "HTA_i
fso.GetStandardStream(0).ReadLine()
读取这些行,并通过eval()
在HTA窗口上绘制图形。下面是代码,但在您开始搜索错误之前,您应该知道,除了下面我解释的细节之外,一切都正常工作
BatchFile.bat:
@echo off
if "%1" equ "HTA_interface" goto HTA_interface
rem Start interactive drawing; send lines to HTA window via Stderr
"%~F0" HTA_interface 2>&1 1>&3 | mshta.exe "%~DP0\HTAwindow.hta"
goto :EOF
:HTA_interface
set "canvas="
set /P "canvas=Canvas function: "
if not defined canvas goto :EOF
echo %canvas% >&2
goto HTA_interface
<meta http-equiv='x-ua-compatible' content='ie=edge'/>
<HTML>
<HEAD>
<HTA:APPLICATION >
<TITLE>HTA BatchDrawing</TITLE>
</HEAD>
<BODY>
</BODY>
<canvas id="myCanvas" width="400" height="300" style="border:1px solid #000000;">
Your browser does not support the HTML5 canvas tag
</canvas>
<SCRIPT language="JavaScript">
var fso = new ActiveXObject("Scripting.FileSystemObject"),
stdin = fso.GetStandardStream(0),
canvas = document.getElementById("myCanvas"),
ctx = canvas.getContext("2d");
window.alert("HTA window started!");
while ( ! stdin.AtEndOfStream ) {
eval(stdin.ReadLine());
}
</SCRIPT>
</HTML>
HTAwindow.hta:
@echo off
if "%1" equ "HTA_interface" goto HTA_interface
rem Start interactive drawing; send lines to HTA window via Stderr
"%~F0" HTA_interface 2>&1 1>&3 | mshta.exe "%~DP0\HTAwindow.hta"
goto :EOF
:HTA_interface
set "canvas="
set /P "canvas=Canvas function: "
if not defined canvas goto :EOF
echo %canvas% >&2
goto HTA_interface
<meta http-equiv='x-ua-compatible' content='ie=edge'/>
<HTML>
<HEAD>
<HTA:APPLICATION >
<TITLE>HTA BatchDrawing</TITLE>
</HEAD>
<BODY>
</BODY>
<canvas id="myCanvas" width="400" height="300" style="border:1px solid #000000;">
Your browser does not support the HTML5 canvas tag
</canvas>
<SCRIPT language="JavaScript">
var fso = new ActiveXObject("Scripting.FileSystemObject"),
stdin = fso.GetStandardStream(0),
canvas = document.getElementById("myCanvas"),
ctx = canvas.getContext("2d");
window.alert("HTA window started!");
while ( ! stdin.AtEndOfStream ) {
eval(stdin.ReadLine());
}
</SCRIPT>
</HTML>
问题在于每个单独图形的绘制不会立即发生:直到管道左侧终止,.HTA窗口才出现在屏幕上,然后,.HTA窗口与所有图形一起出现
我用谷歌搜索了这个网站,寻找类似的问题,但所有相关的例子和答案都是通过放在同一个HTML文档中的JavaScript代码创建的交互式图形。我尝试了以下解决方案,但没有成功:
- 在绘制每个图形之后,我安装并使用了
方法。当然,我在批处理文件输入中使用了Fabric的等效canvas.renderAll()
函数,而不是普通的canvas函数。不管用canvas.add(newfabric.FIG(…)
- 我使用了教程中介绍的方法:
函数用于在出现新图形时刷新窗口,该函数通过draw()
定期执行。不行setInterval(draw,INTERVAL)
window.location.reload()
方法,但这只会导致无休止的循环
这里有什么问题?有办法解决吗?短暂性脑缺血发作