我从HTML中读过横向打印,但我的问题更具体.在我承认失败并考虑不同的职业生涯之前,我想我会在这里发帖.
这是我的情况:
我正在用HTML编写时间表显示和打印程序.用户单击各种选项,如房间,日期等.然后进行AJAX调用,以获取数据,并使用Javascript绝对定位时间表块.时间表的宽度大于时间表的高度.因此,我需要在横向打印,以便最大化页面上的大小.
首先,@media print{@page {size: landscape}}
在任何情况下,普通都不行,我试过了.
这有点工作:
filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
.
我已经尝试将CSS ImageTransform应用于HTML或BODY元素中的任何一个,结果不同.
应用于HTML元素时,似乎页面呈现为纵向(这是我组织中用户的默认设置),然后旋转90度.显然这对我没有帮助.
当应用于BODY元素时,一切都有效,除了相对或绝对定位的元素(仍然显示为肖像).我不能放弃绝对定位,不从头开始重写,这是我没有的奢侈品.
我该怎么办?
我在模块中有以下声明:
Private Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As String, ByVal mode As String) As Long
Run Code Online (Sandbox Code Playgroud)
函数中的以下代码行失败,出现"找不到文件:ZLIB.DLL"错误:
lGZFileHandle = gzopen(sPath, "rb")
Run Code Online (Sandbox Code Playgroud)
我知道ZLIB不需要注册.我的问题是,ZLIB.DLL需要在哪里才能使我的代码工作?我也知道,这个代码是工作的另一台机器上.目前我在与应用程序exe相同的文件夹中有ZLIB.DLL.
UPDATE
令我宽慰的是,代码在编译时确实有效.但是在IDE中运行时它不起作用(它在不同的机器上运行).我仍然在应用程序文件夹中有ZLIB.DLL.这意味着必须检查应用程序路径以加载DLL.
为了解决这个问题,我尝试过:
Private Declare Function SetDllDirectory Lib "Kernel32" Alias "SetDllDirectoryA" (ByVal path As String) As Long
Run Code Online (Sandbox Code Playgroud)
然后在功能中:
SetDllDirectory App.path
Run Code Online (Sandbox Code Playgroud)
这似乎允许加载DLL,但我然后得到'错误的DLL调用约定'错误.情节变粗.
解决了
答案似乎在这里:http://www.zlib.net/DLL_FAQ.txt.我想这是RTFM的一个例子.因此,在IDE中,这个STD_CALL
常规很有效,但是一旦编译完成,C样式调用约定就足够了.它仍然无法解释为什么它适用于IDE中的其他计算机.哼哼.
谢谢大家指出我正确的方向.
我以为我会尝试并且聪明并创建一个我自己的Wait函数(我意识到还有其他方法可以做到这一点).所以我写道:
var interval_id;
var countdowntimer = 0;
function Wait(wait_interval) {
countdowntimer = wait_interval;
interval_id = setInterval(function() {
--countdowntimer <=0 ? clearInterval(interval_id) : null;
}, 1000);
do {} while (countdowntimer >= 0);
}
// Wait a bit: 5 secs
Wait(5);
Run Code Online (Sandbox Code Playgroud)
这一切都有效,除了无限循环.检查后,如果我取出While循环,则按预期输入匿名函数5次.很明显,全局变量countdowntimer递减了.
但是,如果我检查countdowntimer的值,在While循环中,它永远不会下降.尽管在While循环中调用了匿名函数,但这是事实!
很明显,不知何故,倒计时器有两个值浮动,但为什么呢?
编辑
好的,所以我理解(现在)Javascript是单线程的.而那 - 有点 - 回答我的问题.但是,在处理这个单线程的那一点上,使用setInterval的所谓异步调用实际上是否会发生?它只是在函数调用之间吗?当然不是,那些需要很长时间才能执行的功能呢?
我觉得问这个问题很愚蠢,我相信有一个简单的答案。我试图获得一个数字的权力如下:
Sub test()
Dim number As Long
number = 2^8 ' Expect to get 256 here
End Sub
Run Code Online (Sandbox Code Playgroud)
这会产生错误:'预期:列表分隔符或 )'。
我很惊讶这不起作用。我知道有一个 Excel 定义的幂函数。但是 VBA 不支持 ^ 操作符 - 它在 VB6 中吗?
更多信息
如果我在“立即”窗口中执行相同操作,则会出现以下奇怪现象(没有错误):
?2^8
2 8
Run Code Online (Sandbox Code Playgroud)
看起来只是 2 和 8 之间的空格。
有用?
所以我弄乱了各种符号组合,发现在立即窗口中:
?2^^8
256
Run Code Online (Sandbox Code Playgroud)
什么……?有谁知道这可能是为什么?
更多实验
我猜我的 Excel 安装肯定坏了(尽管其他一切都正常)。即时窗口的其他一些内容:
如果我在 ^ 之前插入一个空格:
?2 ^3
8
?2!^3
8
?2"^3
2 ^3
?2£^3
2 0 3
?2%^3
8
?2@^3
8
?2#^3
8
Run Code Online (Sandbox Code Playgroud) 我正在尝试在用户单击HTML表格中的单元格时注册匿名函数.这是一些原始的,纯粹的代码:
document.getElementById(
"course"+displayed_year_index+occurrences_indices[displayed_year_index]).onclick =
eval("function() {PrintReceipt("+result.years[result_year_index].rul_code+");};");
Run Code Online (Sandbox Code Playgroud)
注意使用eval
,因为它位于一个循环中,并且匿名函数每次都是不同的.
可以说,这在Firefox 2中运行得非常好.但是,Firefox 3会抛出"语法错误",指向"函数"一词后的括号内.
有没有人对如何解决这个问题有任何明智的想法?
为了清楚地说明我正在尝试做什么,这里有一个简单的例子:
for (index=0; index<4; index++) {
document.getElementById("div"+index).onclick =
eval("function () {Foo(index);};");
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望触发相同的功能,每个参数值都有不同的参数值div
.
javascript firefox closures anonymous-function event-handling