Board logo

标题: [技术讨论] 我用vbs做了个华氏度和摄氏度转换器 [打印本页]

作者: LTSC1809    时间: 2023-6-3 16:59     标题: 我用vbs做了个华氏度和摄氏度转换器

本帖最后由 LTSC1809 于 2023-6-3 17:03 编辑

没啥好说的,上代码,如果有好的建议请跟帖,另外如果有人能帮忙写成hta那就太好了(注意要求,我也会写hta,但是我要求选择从华氏度到摄氏度还是摄氏度到华氏度以及帮助做成三个按钮,然后输入框和运行结果的矿不要弹出,直接在页面上创建文本框和文字,因为我不会js,所以判断按钮按下然后运行指定的vbs脚本这个我不会,js一点也看不懂,但是hta有些地方只能js,很无奈):
  1. Function C_F(input)
  2. Dim output
  3. input=CDbl(input)
  4. output=32+input*1.8
  5. C_F=output
  6. End Function
  7. Function F_C(input)
  8. Dim output
  9. input=CDbl(input)
  10. output=(input-32)/1.8
  11. F_C=output
  12. End Function
  13. Dim inbox
  14. inbox=InputBox("输入CF来使用摄氏度到华氏度转换"&vbcrlf&"输入FC来使用华氏度到摄氏度转换"&vbcrlf&"输入“help”来查看帮助:","华氏度和摄氏度转换器")
  15. If inbox="CF" Then
  16. Dim incf,outcf
  17. incf=InputBox("输入摄氏度:","摄氏度到华氏度")
  18. outcf=C_F(incf)
  19. MsgBox incf&"℃="&outcf&"℉",vbokonly,"输出"
  20. ElseIf inbox="FC" Then
  21. Dim incf2,outcf2
  22. incf2=InputBox("输入华氏度:","华氏度到摄氏度")
  23. outcf2=F_C(incf2)
  24. MsgBox incf2&"℉="&outcf2&"℃"
  25. ElseIf inbox="help" Then
  26. MsgBox "华氏度和摄氏度换算公式:"&vbcrlf&"华氏度=32+摄氏度×1.8"&vbcrlf&"摄氏度=(华氏度-32)÷1.8"&vbclrf&"如果你觉得工具好用的话,去b站给LTSC1809点个赞吧",vbokonly,"help"
  27. Else
  28. MsgBox "无效输入",vbokonly,"Error"
  29. End If
复制代码

作者: LTSC1809    时间: 2023-6-3 17:07

楼主,其实同一个hta程序的js和vbs变量互通,所以在点击按钮后使用js里的 var 变量名=值 的语句声明一个变量,然后后面用你会的vbs判断这个变量的值就可以了,我提供一下思路,这样可以解决button标签做的按钮只能使用你不会的js语句来做出反应的问题
作者: LTSC1809    时间: 2023-6-3 17:08

自己回答自己的问题...主要是因为我已经有这个思路了,但是手懒不想写代码,于是只留个思路,等大佬写成hta或者有人用js重写我的代码
作者: jyswjjgdwtdtj    时间: 2023-6-3 18:39

事实上作为一门用于网页的脚本语言 如果只是用来启动网页 vbs的功能还是够的
  1. //jscript
  2. window. onload=function(){
  3.     alert(1)
  4. }
复制代码
  1. 'vbscript
  2. sub window_onload()
  3. alert 1
  4. end sub
复制代码

作者: jyswjjgdwtdtj    时间: 2023-6-3 18:40

hta甚至不需要按钮即可转换
话说你是不上网吗?🤔
作者: jyswjjgdwtdtj    时间: 2023-6-3 19:23

本帖最后由 jyswjjgdwtdtj 于 2023-6-3 21:17 编辑

做一个
  1. <body>
  2. F:<input id=f /><BR/>
  3. C:<input id=c />
  4. <script>
  5. var f=document.getElementById("f")
  6. var c=document.getElementById("c")
  7. f.onkeydown=function(){
  8. if(isNaN(f.value*1)){return}
  9. c.value=(f.value-32)/1.8
  10. }
  11. c.onkeydown=function(){
  12. if(isNaN(c.value*1)){return}
  13. f.value=c.value*1.8+32
  14. }
  15. </script>
  16. </body>
复制代码

作者: jyswjjgdwtdtj    时间: 2023-6-3 19:27

本帖最后由 jyswjjgdwtdtj 于 2023-6-3 21:17 编辑

vbs版本
  1. <body>
  2. F:<input id=f /><BR/>
  3. C:<input id=c />
  4. <script language=vbscript>
  5. 'set f=document.getElementById("f")
  6. 'set c=document.getElementById("c")
  7. sub f_onkeydown()
  8. if not isnumeric(f.value) then exit sub
  9. c.value=(f.value-32)/1.8
  10. end sub
  11. sub c_onkeydown()
  12. if not isnumeric(c.value) then exit sub
  13. f.value=c.value*1.8+32
  14. end sub
  15. </script>
  16. </body>
复制代码
最好不要用onpropertychange
最然很好用 但是很容易造成堆栈溢出(起码hta是这么报错的)
作者: LTSC1809    时间: 2023-6-3 20:40

回复 5# jyswjjgdwtdtj 不需要按钮是什么意思?按钮是用来选择从哪种单位换到哪种单位的,你是要用下拉框吗
作者: LTSC1809    时间: 2023-6-3 20:40

回复 6# jyswjjgdwtdtj 完全看不懂js代码,一点也看不懂,我只会vbs...
作者: LTSC1809    时间: 2023-6-3 20:43

回复 7# jyswjjgdwtdtj 这个思路我真没想到,input原来还能这样用,输入一个就能显示另一个,不管输入哪个都行
作者: LTSC1809    时间: 2023-6-3 20:51

回复 7# jyswjjgdwtdtj 为什么我用我的vbs版本输入639514华氏度,输出的结果是355282.777777778,但你做的这个hta换算器出来的结果是35528.2777777778
作者: LTSC1809    时间: 2023-6-3 20:54

回复 11# LTSC1809 发现问题了,hta版的*1.8被错误的写成了*18
作者: LTSC1809    时间: 2023-6-3 21:00

回复 6# jyswjjgdwtdtj

你这个有问题啊,我解决1.8错写成18以后发现输入639514出来的是35510.555555555555,正确答案是355282.777777778
作者: jyswjjgdwtdtj    时间: 2023-6-3 21:10

回复 13# LTSC1809


    嗯? 是你写错了吧

还有这分加的我受宠若惊
照你这样加法 技术分得通货膨胀
作者: jyswjjgdwtdtj    时间: 2023-6-3 21:15

本帖最后由 jyswjjgdwtdtj 于 2023-6-3 21:16 编辑

对了 hta里最好不要用vbs 硬要用(比如regexp很香 typename很香 foreach很香) 事件最好这么些
  1. sub a
  2. msgbox b
  3. end sub
  4. window.onload=getref("a")
复制代码
主要吧 靠谱 但是绝对没有js方便
js不难 可以学学
难的是那些面向对象的奇诡方法 比如集大成者jquery
作者: jyswjjgdwtdtj    时间: 2023-6-3 21:18

回复 10# LTSC1809


    谈不上好的思路吧 理应如此
作者: LTSC1809    时间: 2023-6-3 21:35

回复 14# jyswjjgdwtdtj
论坛规定说回答如果采纳要给回答者加技术分
作者: LTSC1809    时间: 2023-6-3 21:38

回复 15# jyswjjgdwtdtj
确实如此,不过js的代码符号明显比vbs更多,并且和c类语言很相似,符号多了让人更有一种看天书的感觉...vbs符号非常少,连大括号都没有,直接使用end语句
作者: jyswjjgdwtdtj    时间: 2023-6-3 21:40

回复 18# LTSC1809


    嗯……某种程度上来讲用end*确实是优点
但是像什么自增啊灵活的对象啊函数啊js还是好很多的
作者: LTSC1809    时间: 2023-6-3 22:09

回复 19# jyswjjgdwtdtj
确实,只不过我懒不想学js...如果我一开始就学的js,现在有人叫我看看vbs,我一定也会觉得vbs太难了懒得学...
作者: jyswjjgdwtdtj    时间: 2023-6-3 22:37

回复 20# LTSC1809


    vbs是真简单
作者: jyswjjgdwtdtj    时间: 2023-6-4 15:42

还有cdbl是无用的 vbs会自己隐式的调用
作者: LTSC1809    时间: 2023-6-4 16:37

回复 22# jyswjjgdwtdtj
但是我之前就遇到过inputbox返回的是字符串类型,用来和数字比较,结果最后不管怎样都比较不同,就是因为一个是字符串一个是数字常量...当时百思不得其解,来了论坛求助才有人告诉我,从那以后为了不遇到奇奇怪怪的bug,我习惯给inputbox返回值当数字用的时候加上一个CDbl()函数
作者: LTSC1809    时间: 2023-6-4 16:43

回复 21# jyswjjgdwtdtj
我一开始入门学的是bat,那个根本不用在意什么类型事不事字符串,类型是否匹配等等,还有很多像%windir%,%random%之类方便的环境变量,是真简单啊,后来心血来潮学了vbs,才慢慢了解数据类型这类的东西
作者: jyswjjgdwtdtj    时间: 2023-6-4 17:10

回复 24# LTSC1809


    cdbl在这里只有心里作用!错误的字符串cdbl也不会让它变成数字




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2