| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1848 人关注过本帖
标题:vb6 怎么让一个过程参数有多个条件
只看楼主 加入收藏
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
结帖率:11.11%
收藏
 问题点数:0 回复次数:9 
vb6 怎么让一个过程参数有多个条件
在做一个dll自动用,想要用像别人一样做成有一个参数有多个条件的,一直想不明白call setfile("C:\1.txt",1+2+3+7) 这样调用的话,n都变成和了,我的目的很简单,不让他变成和,或者是有什么别的办法可以准确判断调用什么属性
sub setfile(byval path ,byval n )
dim val as string
select case n
case 0
val=FILE_ATTRIBUTE_ARCHIVE & val &"|"
case 1
val=FILE_ATTRIBUTE_COMPRESSED & val &"|"
以下省略
end sub
Public Const FILE_ATTRIBUTE_ARCHIVE = &H20          '文档Public Const FILE_ATTRIBUTE_COMPRESSED = &H800      '合并Public Const FILE_ATTRIBUTE_DIRECTORY = &H10       '目录/文件夹Public Const FILE_ATTRIBUTE_HIDDEN = &H2             '隐藏Public Const FILE_ATTRIBUTE_NORMAL = &H80           '普通Public Const FILE_ATTRIBUTE_READONLY = &H1          '只读Public Const FILE_ATTRIBUTE_SYSTEM = &H4           '系统Public Const FILE_ATTRIBUTE_TEMPORARY = &H100       '临时
新人没分请见谅
2014-03-05 23:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
vB无法编写DLL

[ 本帖最后由 wp231957 于 2014-3-6 05:29 编辑 ]

DO IT YOURSELF !
2014-03-06 05:26
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
sub setfile(byval path ,byval n )
    if FILE_ATTRIBUTE_ARCHIVE and n then
    ......
    endif
    if FILE_ATTRIBUTE_COMPRESSED and n then
    ......
    endif
    ......
end sub
2014-03-06 08:11
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
收藏
得分:0 
回复 3楼 bczgvip
这样的话就不能同时调用多个参数了,
2014-03-06 15:40
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
收藏
得分:0 
回复 2楼 wp231957
我己经写了几十个命令自己用了,用VB6.0企业版做的
2014-03-06 15:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
1+2+3+7

它这个是属性的结合。
FILE_ATTRIBUTE_READONLY = &H1     =  1
FILE_ATTRIBUTE_HIDDEN = &H2       =  2
3 = 1 + 2

在 C 语言里,如果一个对像 有多个属性开关需要设置,为了节省 存储空间,一般使用一个位来表示一个开关。
例如一个文件 只读属性 0000 0001(2)  = &H1
             隐藏属性 0000 0010(2)  = &H2
             系统属性 0000 0100(2)  = &H4
        只读+隐藏属性 0000 0011(2)  = &H1+&H2 =1+2 = 3
   只读+隐藏+系统属性 0000 0111(2)  = &H1+&H2+&H4 = 1+2+4 = 7
---------------------
每位上的值分别是:以字节为例,不考虑符号位
  0000 0001    =1
  0000 0010    =2
  0000 0100    =4
  0000 1000    =8
  0001 0000    =16
  0010 0000    =32
  0100 0000    =64
  1000 0000    =128

所以,有些时候可以看到多个属性枚举时是一个不连续的值,就是把二进制转成10进制表示的。

组合属性时,直接把 相应的属性 加起来就是了。
所以 1+2+3+7 ,这个式子错了。 如果你要设 只读+隐藏+系统 属性 ,那么要么传 1+2+4 进去,要么直接传个 7 进去。
=============
判断很简单
如传进去的形参是  n
if (n and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
if n and FILE_ATTRIBUTE_READONLY then

以上两种判断都可以,第二种是3楼的判断方法。
这里解释一下。
第一种: AND 运算后,所需值对应位上,都是1的情况下就会保留,否则就置为 0 。然后判断运算后的结果是不是与所需要的值相同。这是严格判断。
第二种: AND 去处后,如果得到的结果不是0 ,(在VB里也就是逻辑真),也就说明对应位上有值。结果为0 时,逻辑假,说明对应位上无值。
新手,建议使用第一种方式,熟练者,建议使用第二种。

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-06 19:23
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
收藏
得分:0 
回复 6楼 风吹过b
你说得不错,但是有点不明白,我先按你的方法试试看,谢谢了

[ 本帖最后由 Ez330阿牛 于 2014-3-6 22:25 编辑 ]
2014-03-06 22:23
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
收藏
得分:0 
回复 6楼 风吹过b
试过了,这样的方法可以,但是还是有点不明白
2014-03-06 22:49
xlhcy2014
Rank: 2
等 级:论坛游民
帖 子:33
专家分:81
注 册:2014-2-6
收藏
得分:0 
举个例子,一个字节,有8位,代表8个不同的开关
0000 0001   = 十进制的 1
0000 0010   = 十进制的 2
0000 0100   = 十进制的 4
那么  1+4   =   0000 0101   相当于 把 第1个 和 第3个 开关打开了,即可认为同时实现2种功能,看懂这一步

那么,你需要的功能的数值就必须 2的n次方的数值(即把二进制转换成十进制)
2014-03-07 00:02
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
收藏
得分:0 
回复 9楼 xlhcy2014
谢谢了,怎么把分给你
2014-03-08 12:53
快速回复:vb6 怎么让一个过程参数有多个条件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020108 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved