-
(defun rnd(rMin rMax)
(vla-eval (vlax-get-acad-object)
)
(+ rMin(* (getvar
)
;;;(setq ArgLst ’(
;;;
;;;
用法:
(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
Msg
(if Style
(strcat
(if Title (strcat
(if Helpfn (strcat
(if Ctxt (strcat
)
(getvar
)
(defun StrConv(Str conv)
(vla-eval (vlax-get-acad-object)
(strcat
)
(getvar
)
;| (X-vbfun typ vbfun) =
运行简
单的
vb
函数
- v1.0 b
----------
梦断江南
.2004.9
参数
: typ
=
函数返回值的
vb
类型
.
vbfun =
简单的
vb
函数
.
返回
:
设置于
变量中的值
.
实例
:(x-vbfun
’
variant
’
(rnd)) ;
出错
.
显示设置系统变量出错
.!!
(x-vbfun
’
double
’
(rnd)) ;->0.533424
:
取得随机数
.ok
(x-vbfun
’
integer
’
(msgbox(
,
x-vbfun
;;->
6.0
< br>:
显示信息框,参数详
vb
函<
/p>
数参考
.ok.
(x-vbfun
’
single
’
(msgbox(
出错
.
显示设置系统变量出错
.!!
要点
: typ
必须于
vbfun
返回值类型相一致
!!!
参考
:
/forum/?s=&threadid=259492
|;
(DEFUN
X-vbfun (typ vbfun / typlst)
(setq
typlst
’((
.
.
YTE
.
.
(
.
.
.
.
.
(vla-eval (vlax-get-acad-object)
(strcat
(cdr(assoc (strcase (vl-symbol-name
typ)) typlst))
(vl-prin1-to-string vbfun)
)
)
(getvar
)
<
/p>
提醒一点,好像都没有想过把
User
系
列变量还原,?
好像用
Users1
~
5
要好些
吧?
Msgbox
用下面的代替,也可以
(vlax-invoke-method
(vlax-create-object
7
This
Question:
实际上
的功能也很强大,
:
)
发现一个办法,可以不用传递系统变量了
(setq a (vlax-create-Object
(vlax-put-property a
(vla-eval a
前面的
(setq a (vla-GetInterfaceObject (vlax-
get-acad-object)
(vlax-put-
property a
只运行一次
你应该只运行
(vla-eval a
VB
p>
的随机数是“伪随机数”
,
:
)
< br>VB
的随机数,也是通过一种算法进行运算的,每一次的数的顺序都一样
你可以把
(setq a (vla-
GetInterfaceObject (vlax-get-acad-object)
(vlax-put-property a
放在启动时加载
调用时运行
(vla-eval a
即可
<
/p>
例,在
文件里加入
(setq Tls-VBScript (vlax-
create-Object
(vlax-put-
property Tls-VBScript
(defun Rnd() (vla-eval Tls-VBScript
嗯,的确可以了:
)
另外,
已经
有实例。那么
对象如何取得?
如果用
(setq a (vla-GetInterfaceObject (vlax-
get-acad-object)
(vla-eval
a
可以,但是
(vla-eval a
却又不行了,
why
?
(vla-
GetInterfaceObject (vlax-get-acad-object)
可以获得
另外,
(setq a (vla-
GetInterfaceObject (vlax-get-acad-object)
< br>总容易引起内存不
足的错误,好像
(setq a
(vlax-create-Object
不会,没有过多的测试,
< br>:
)
对于没有返回值的过程要调用
Scr
iptControl
对象的
ExecuteStatemen
t
方法
不
过对于
Randomize
好像没什么用,
Randomize
作用于过程,如果做出来了的话,调用
Randomize
和
Rnd
是两个过
程,没有效果
< br>另外,我上面的方法有问题,
ScriptControl
对象不能做全局变量,只能做局部变量,否则总
会引起内存不足(太大了)
,
Rnd
不能用这种方法,其他的可以
下面做成函数调用
VBS
函数
调用格式:
(tls-
eval ’msgbox
’(
(defun tls-
vbs()
(setq Tls-VBScript
(vlax-create-Object
(vlax-
put-property Tls-VBScript
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)
join
(mapcar ’vl
-prin1-to-string args)
)
***
**************************************************
**************************
*************
**************************************************
****************
****************
*********************************************
**********************************
*****
**************************************************
************************
***************
*
在
Label
标签中随机产生
1-80
的数,用空格来控制随机数的停止与
开始。谢谢了
!
Private
Sub
Form_KeyPress(KeyAscii
As
Integer)
ize
If
KeyAscii
=
32
Then
n
=
Int(Rnd()
*
80
+
1)
End
If
End
Sub
Private
Sub
Form_Load()
view
=
True
End
Sub
Public
IsRnd
As
Boolean
Private
Sub
Form_KeyPress(KeyAscii
As
Integer)
If
KeyAscii
=
32
Then
IsRnd
=
Not
IsRnd
End
If
If
IsRnd
Then
d
=
True
Else
d
=
False
End
If
End
Sub
Private
Sub
Form_Load()
IsRnd
=
False
d
=
False
End
Sub
Private
Sub
Timer1_Timer()
n
=
Int(Rnd()
*
80
+
1)
End
Sub
以上是
我做的,这里有一个
timer
控件
***
**************************************************
**************************
*************
**************************************************
****************
****************
*********************************************
**********************************
*****
**************************************************
************************
***************
*
vb
随机数排序问题
vb
随机数排序问题
1.
随机产生
10
个
[1,100]
的自然数
.
这是个数要显示在
label
里
2.
对这是个数进行排序
,
排序结果显示在另一个
label
里
3.
把排序结果存入到文件中
(
用
output
语
句的那个
).
第一个我做了一下
,
就是显示在
label
里的时候就只能显示一个数字了
.
如果用
print
< br>语句在
form
上显示就可以显示
10
个
.
第一步的代码是这样滴
p>
.
Dim a(1 To 10)
As Integer
Randomize
For i = 1 To 10
a(i) = Int(Rnd * 100 + 1)
Print a(i)
Next
i
而且
倒数第一行和第二行语句我觉得应该顺序应该是先是
next
i
然后
print a(i)
p>
可是一换过
来
,
就
出错说下标越界
.
我很困惑
....
要是你也不明白我后面说的什么
,
就帮我重做一下吧<
/p>
!!
==
==================================================
===========================
============
================================
新建
Form1
,
添加
Label1 ,
Label2
和
Command1
,
复制以下代码:
Private Sub Command1_Click()
Form_Load
Dim a(1 To 10) As Integer, m As Integer
Randomize
For i = 1 To 10
a(i) = Int(Rnd * 100 + 1)
n = n +
Next i
x = MsgBox(
单击“是”
选择升序
,
单击“否”选择降序
.
p>
排序
If x
= vbYes Then
m = 100
n =
排序结果
< br>(
升序
):
For j = 1 To 10
For i = 1 To 10
If a(i) <= m Then m = a(i)
Next i
For i = 1
To 10
If a(i) = m Then
n = n +
a(i) = 1000
End
If
Next i
m = 100
Next j
Else
m = 1
n =
排序结果
(
降序
):
For j = 1 To 10
For i = 1 To 10
If a(i) >= m Then m = a(i)
Next i
For i = 1
To 10
If a(i) = m Then
n = n +
a(i) = 0
End If
Next i
m = 1
Next j
End If
Open
Write #1, n
Close #1
MsgBox
结果已经输出到
c: .
结果
End Sub
Public Sub Form_Load()
ze = True
ze =
True
n =
自然数
:
n
=
排序结果
:
n =
End Sub
p>
*****************************************
**************************************
*
**************************************************
****************************
***********
*****
*********************************
**********************************************
*******************************************
************************************
***
*************
现数据库中有一表记录了姓名
,
卡号两个记录
,
请问如何实现从数据库
中取出所有的记录
,
通
过按下按钮
p>
command1
后
,
随机在这些记录中抽取其中一条记录并显
将所有记录读取到一个数组或者一个集合中,
找出最大记录数,
然后用随机数生成一个这个
0
和最大数之间的一个<
/p>
ID
,安这个
ID
从数组或集合中取出就可以了
type
tRecord
Name
as
string
Code
as
Long
end
type
Private
Sub
Command2_Click()
dim
gRecord()
as
tRecord
dim
Index
as
Long
dim
oRecord
as
tRecord
-
-
-
-
-
-
-
-
-
上一篇:(整理)SNAP简介与应用.
下一篇:matlab画分布函数和概率密度函数作者