VBA隨機數原始碼彙總

2023-01-03 14:03:03 字數 4165 閱讀 3816

(defun rnd(rmin rmax)

(vla-eval (vlax-get-acad-object)

" \"userr5\" ,cdbl((rnd))"

) (+ rmin(* (getvar "userr5")(- rmax rmin)))

) ;;;(setq arglst 』("do you want to continue ?" 50

;;;"msgbox demonstration" "" 1000))

;;;用法:(msgbox arglst)

(defun msgbox(arglst / msg style title helpfn ctxt)

(mapcar 』set (list 』msg 』style 』title 』helpfn 』ctxt) arglst)

(vla-eval (vlax-get-acad-object)

(strcat " \"useri5\" ,cint((msgbox(\""

msg "\""

(if style (strcat "," (itoa style)) "")

(if title (strcat ",\"" title

(if helpfn (strcat ",\"" helpfn

(if ctxt (strcat "," (itoa ctxt)) "")

")))")

) (getvar "useri5")

) (defun strconv(str conv)

(vla-eval (vlax-get-acad-object)

(strcat " \"users5\" ,cstr((strconv(\"" str "\", " (itoa conv) ")))")

) (getvar "users5")

) ;| (x-vbfun typ vbfun) = 執行簡單的vb函式- v1.0 b夢斷江南.2004.9

引數: typ = 函式返回值的vb型別.

vbfun = 簡單的vb函式.

返回: 設定於 "userr5"變數中的值.

例項:(x-vbfun 』variant 』(rnd)) ;; 出錯.顯示設定系統變數出錯.!!

(x-vbfun 』double 』(rnd)) ;;->0.533424 :取得隨機數.ok

(x-vbfun 』integer 』(msgbox("hello,x-vbfun",3,"test"))) ;;-> 6.0 :顯示資訊框,引數詳vb函式參考.ok.

(x-vbfun 』single 』(msgbox("test1",3))) ;;出錯.顯示設定系統變數出錯.!!

要點: typ 必須於 vbfun 返回值型別相一致!!!

參考:|; (defun x-vbfun (typ vbfun / typlst)

(setq typlst 』(("boolean" . "cbool")("byte" . "cbyte")("currency" .

"ccur")("double" . "cdbl")("decimal" . "cdec")

("integer" . "cint")("long" . "clng")("single" .

"csng")("string" . "cstr")("variant" . "cvar")))

(vla-eval (vlax-get-acad-object)

(strcat " \"userr5\" ,"

(cdr(assoc (strcase (vl-symbol-name typ)) typlst))

"("(vl-prin1-to-string vbfun)

")") )(getvar "userr5")

) 提醒一點,好像都沒有想過把user系列變數還原,?

好像用users1~5要好些吧?

msgbox用下面的代替,也可以

(vlax-invoke-method (vlax-create-object "") "popup" "why" 7 "answer this question:" 1)

實際上的功能也很強大,:)

發現乙個辦法,可以不用傳遞系統變數了

(setq a (vlax-create-object "scriptcontrol"))

(vlax-put-property a "language" "vbs")

(vla-eval a "rnd()")

前面的(setq a (vla-getinte***ceobject (vlax-get-acad-object) "scriptcontrol"))

(vlax-put-property a "language" "vbs")

只執行一次

你應該只執行

(vla-eval a "rnd()")

vb的隨機數是「偽隨機數」,:)

vb的隨機數,也是通過一種演算法進行運算的,每一次的數的順序都一樣

你可以把

(setq a (vla-getinte***ceobject (vlax-get-acad-object) "scriptcontrol"))

(vlax-put-property a "language" "vbs")

放在啟動時載入

呼叫時執行(vla-eval a "rnd()")即可

例,在檔案裡加入

(setq tls-vbscript (vlax-create-object "scriptcontrol"))

(vlax-put-property tls-vbscript "language" "vbs")

(defun rnd() (vla-eval tls-vbscript "rnd()"))

嗯,的確可以了:)

另外,"wscri " 已經有例項。那麼"wscri pt" 物件如何取得?

如果用 (setq a (vla-getinte***ceobject (vlax-get-acad-object) "scriptcontrol"))

(vla-eval a "rnd()")可以,但是(vla-eval a "randomize") 卻又不行了,why?

(vla-getinte***ceobject (vlax-get-acad-object) "wscri ")可以獲得

另外,(setq a (vla-getinte***ceobject (vlax-get-acad-object) "scriptcontrol"))總容易引起記憶體不足的錯誤,好像(setq a (vlax-create-object "scriptcontrol"))不會,沒有過多的測試,:)

對於沒有返回值的過程要呼叫scriptcontrol物件的executestatement方法

不過對於randomize好像沒什麼用,randomize作用於過程,如果做出來了的話,呼叫randomize和rnd是兩個過程,沒有效果

另外,我上面的方法有問題,scriptcontrol物件不能做全域性變數,只能做區域性變數,否則總會引起記憶體不足(太大了),rnd不能用這種方法,其他的可以

下面做成函式呼叫vbs函式

呼叫格式:

(tls-eval 』msgbox 』("are u ready?" 1 "tlscad"))

(defun tls-vbs()

(setq tls-vbscript (vlax-create-object "scriptcontrol"))

(vlax-put-property tls-vbscript "language" "vbs")

tls-vbscript

) (defun tls-join(chrs fchr / pstr)

(setq pstr "")

(foreach i chrs (setq pstr (strcat pstr i fchr)))

(substr pstr 1 (- (strlen pstr) (strlen fchr)))

) (defun tls-eval(funname args)

(vla-eval (tls-vbs) (strcat (vl-prin1-to-string funname) "(" (tls-join (mapcar 』vl-prin1-to-string args

) 在label標籤中隨機產生1-80的數,用空格來控制隨機數的停止與開始。謝謝了!

private sub form_keypress(keyascii as integer)

C隨機數生成

標準庫 被包含於中 提供兩個幫助生成偽隨機數的函式 函式一 int rand void 從srand seed 中指定的seed開始,返回乙個 seed,rand max 0x7fff 間的隨機整數。函式二 void srand unsigned seed 引數seed是rand 的種子,用來初始化...

OfficeExcel的隨機數設定技巧

excel 隨機數 取餘隨機數rand 語法rand rand函式詳解 返回大於等於 0 及小於 1 的均勻分布隨機實數,每次計算工作表時都將返回乙個新的隨機實數。註解 若要生成 a 與 b 之間的隨機實數,請使用 rand b a a 公式 rand 1000 返回乙個大於等於0 小於1000的隨...

3 2 2隨機數的產生 2

3.2.2 隨機數的產生 練習二一 選擇題 1 下列事件 1 方程有兩個不相等的實數根 2 在標準大氣壓下,溫度低於,並融化 3 某傳呼臺每天的某一時段內受到傳呼的次數不超過10次 4 物體在重力作用下會自由下落 隨機事件的個數是 a 1個b 2個c 3個d 4個 2 把紅 黑 白 藍4張紙牌隨機地...