明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1032|回复: 5

[源码] LISP调用javascript函数方法举例

[复制链接]
发表于 2022-3-8 10:14 | 显示全部楼层 |阅读模式
本帖最后由 1291500406 于 2022-3-8 14:06 编辑

  1. ;;;函数接口
  2. (defun bb-for-js (func_str else_ret / ret)
  3.         (if
  4.                 (or
  5.                         ScriptControl
  6.                         (setq ScriptControl (vlax-create-object "{e8540e26-d20e-483f-9fd5-a5a3553a7556}"))
  7.                         (setq ScriptControl (vlax-create-object "{0e59f1d5-1fbe-11d0-8ff2-00a0d10038bc}"))
  8.                 )
  9.                 (progn
  10.                         (vl-catch-all-apply 'vlax-put (list ScriptControl "language" "jscript"))
  11.                         (if
  12.                                 (not
  13.                                         (vl-catch-all-error-p
  14.                                                 (setq ret
  15.                                                         (vl-catch-all-apply
  16.                                                         ' vlax-invoke
  17.                                                                 (list
  18.                                                                         ScriptControl
  19.                                                                         "eval"   
  20.                                                                         func_str
  21.                                                                 )
  22.                                                         )
  23.                                                 )
  24.                                         )
  25.                                 )
  26.                                 ret
  27.                                 else_ret
  28.                         )
  29.                 )
  30.                 else_ret
  31.         )
  32. )

;;;时间相关
  1. ;;;格林时间转北京时间
  2. (setq time_str "Fri, 19 Jul 2019 05:57:20 GMT")
  3. ;;;  "Fri, 19 Jul 2019 05:57:20 GMT"
  4. (bb-for-js
  5.         (strcat "new Date('" time_str  "').toLocaleString()+ ' 星期'+['日','一','二','三','四','五','六'][new Date('" time_str "').getDay()];" )
  6.         "无com组件"
  7. );;;返回值 "2019年7月19日 13:57:20 星期五"


  1. ;;;当前时间
  2. (bb-for-js
  3. "new Date().toLocaleTimeString();"
  4. "无com组件"
  5. )
  6. ;;;返回值 "10:15:39"

Date 对象属性
属性
描述
constructor返回创建 Date 对象原型的函数。
prototype允许您向对象添加属性和方法。

Date 对象方法
方法
描述
getDate()返回月中的第几天(从 1 到 31)。
getDay()返回星期几(0-6)。
getFullYear()返回年份。
getHours()返回小时(从 0-23)。
getMilliseconds()返回毫秒(0-999)。
getMinutes()返回分钟(从 0-59)。
getMonth()返回月份(从 0-11)。
getSeconds()返回秒数(从 0-59)。
getTime()返回自 1970 年 1 月 1 日午夜以来与指定日期的毫秒数。
getTimezoneOffset()返回 UTC 时间与本地时间之间的时差,以分钟为单位。
getUTCDate()根据世界时,返回月份中的第几天(从 1 到 31)。
getUTCDay()根据世界时,返回星期几(0-6)。
getUTCFullYear()根据世界时,返回年份。
getUTCHours()根据世界时,返回小时(0-23)。
getUTCMilliseconds()根据世界时,返回毫秒数(0-999)。
getUTCMinutes()根据世界时,返回分钟(0-59)。
getUTCMonth()根据世界时,返回月份(0-11)。
getUTCSeconds()根据世界时,返回秒数(0-59)。
getYear()已弃用。请改用 。
now()返回自 1970 年 1 月 1 日午夜以来的毫秒数。
parse()解析日期字符串并返回自 1970 年 1 月 1 日以来的毫秒数。
setDate()设置 Date 对象中月的某一天。
setFullYear()设置日期对象的年份
setHours()设置日期对象的小时。
setMilliseconds()设置日期对象的毫秒数。
setMinutes()设置日期对象的分钟数。
setMonth()设置日期对象的月份。
setSeconds()设置日期对象的秒数。
setTime()将日期设置为 1970 年 1 月 1 日之后/之前的指定毫秒数。
setUTCDate()根据世界时,设置 Date 对象中月份的一天。
setUTCFullYear()根据世界时,设置日期对象的年份。
setUTCHours()根据世界时,设置日期对象的小时。
setUTCMilliseconds()根据世界时,设置日期对象的毫秒数。
setUTCMinutes()根据世界时,设置日期对象的分钟数。
setUTCMonth()根据世界时,设置日期对象的月份。
setUTCSeconds()根据世界时,设置日期对象的秒数。
setYear()已弃用。请改用 。
toDateString()将 Date 对象的日期部分转换为可读字符串。
toGMTString()已弃用。请改用 。
toISOString()使用 ISO 标准将日期作为字符串返回。
toJSON()以字符串形式返回日期,格式为 JSON 日期。
toLocaleDateString()使用区域设置约定将 Date 对象的日期部分作为字符串返回。
toLocaleTimeString()使用区域设置约定将 Date 对象的时间部分作为字符串返回。
toLocaleString()使用区域设置约定将 Date 对象转换为字符串。
toString()将 Date 对象转换为字符串。
toTimeString()将 Date 对象的时间部分转换为字符串。
toUTCString()根据世界时,将 Date 对象转换为字符串。
UTC()根据 UTC 时间,返回自 1970 年 1 月 1 日午夜以来的日期中的毫秒数。
valueOf()返回 Date 对象的原始值。

;;;运算相关
JavaScript random() 方法实例

返回 0(含)和 1(不含)之间的随机数:

Math.random();
  1. ;;;随机数
  2. (progn
  3.   (setq
  4.     bmin 100
  5.     bmax 300
  6.   )
  7.   (bb-for-js
  8.     (strcat
  9.       "Math.floor(Math.random()*" (vl-princ-to-string (- bmax bmin))  ")+" (vl-princ-to-string  bmin) ";"
  10.     )
  11.     bmin
  12.   )
  13. )
  14. 100 300之内数字

;;;字符串相关
JavaScript length 属性定义和用法

length 属性可返回字符串中的字符数目。

语法stringObject.length

  1. ;;;返回字符串长度
  2. (setq str "2019年7月19日 13:57:20 星期五")
  3. (bb-for-js (strcat "'" str "'.length;")nil);;;返回值: 23
  4. (strlen str);;;2010返回值: 29
  5. (strlen str);;;2022返回值: 23

JavaScript replace() 方法定义和用法

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法stringObject.replace(regexp/substr,replacement)
参数
描述
regexp/substr
必需。规定子字符串或要替换的模式的 RegExp 对象。
请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。
replacement必需。一个字符串值。规定了替换文本或生成替换文本的函数。
返回值

一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。

说明

字符串 stringObject 的 replace() 方法执行的是查找并替换的操作。它将在 stringObject 中查找与 regexp 相匹配的子字符串,然后用 replacement 来替换这些子串。如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

replacement 可以是字符串,也可以是函数。如果它是字符串,那么每个匹配都将由字符串替换。但是 replacement 中的 $ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。

字符
替换文本
$1、$2、...、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
$&与 regexp 相匹配的子串。
$`位于匹配子串左侧的文本。
$'位于匹配子串右侧的文本。
$$直接量符号。

注意:ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。


  1. ;;;文字的内容替换
  2. (setq
  3.   str "替换字符串例子,替换文字内容,替换内容"
  4.   old "替换"
  5.   new "换个屁"
  6. )
  7. (bb-for-js
  8.   (strcat "'" str "'.replace(/" old "/g,'" new "');" )
  9.   "无com组件"
  10. )
  11. ;;;返回值 "换个屁字符串例子,换个屁文字内容,换个屁内容"

评分

参与人数 4明经币 +4 收起 理由
999999 + 1 很给力!
MUSIC-DIE + 1 赞一个!
vectra + 1 很给力!
guosheyang + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-3-8 14:52 | 显示全部楼层
能调 javasrcipt 的 alert 弹出窗口指令吗?
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-8 12:46 | 显示全部楼层
ACAD-64位
(vlax-create-object "{E8540E26-D20E-483F-9FD5-A5A3553A7556}")
(vlax-create-object "{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}")
(vlax-create-object "scriptcontrol")
均不成功
 楼主| 发表于 2022-3-8 13:18 | 显示全部楼层
本帖最后由 1291500406 于 2022-3-8 13:23 编辑
crtrccrt 发表于 2022-3-8 12:46
ACAD-64位
(vlax-create-object "{E8540E26-D20E-483F-9FD5-A5A3553A7556}")
(vlax-create-object "{0E59 ...

com类型编程 就是这样,一般win10电脑自带,无需注册   win7 可能com比较少 需注册 dwx亦是如此

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2022-3-12 18:30 | 显示全部楼层
mokson 发表于 2022-3-8 14:52
能调 javasrcipt 的 alert 弹出窗口指令吗?

alert 不行
发表于 2022-4-1 15:26 | 显示全部楼层
请教一下,谢谢。我尝试如下代码,为何不成功?
(bb-for-js "clipboardData.setData(\"Text\",\"11\")" nil)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-22 09:48 , Processed in 0.337403 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表