集合与整型的类型兼容问题(50分)

3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
一个集合类型定义如下:
<font face="Courier New" size="2" color="#800000">
type
TTeleNewFunction = Set of (
CallerNoDisplay,
HotCall,
CallChange,
Colck,
...
);
</font>
变量定义:
<font face="Courier New" size="2" color="#800000">
Var
NewFun : TTeleNewFunction;

N: Integer;
</font>
代码如下:
<font face="Courier New" size="2" color="#800000">
begin
...
NewFun := [];
If ... then
NewFun := NewFun + [Colck];
...
N := Integer(NewFun); // 这里出错,类型不兼容
...
end;
</font>
用整数的N是无奈的选择,因为它要存储在数据库中,
如果分开就要用到多个字段,麻烦。
但是新功能却是许多种。所以我想用集合。它表达清晰而且使用方便。
当然用INT然后进行多个AND之类也行,不过不愿意。

明明知道DELPHI中集合用类似整数的方式进行存储,例如可以

NewFun := 0;

但竟然无法让 NewFun 给整型变量赋值。
特请教解决方法。
 
可以使用位运算,象api一样,定义一系列常数,通过or 及 and, not 等位运算
,最后存一个运算出来的数进数据库
yourfield:= a or b;
 
你可以:
if colck in newfun then
begin
N := ord(colck);
emd;
 
同意amo,ord可以得到集合元素的序号
 
呵呵,看了程序晓得了什么是聚合类型:)
amo 得 50 分
 
同意hubdog, 要用位运算来代替.
const
CallerNoDisplay:integer=1;
HotCall :integer=2;
CallChange:integer=4;
Colck:integer=8;
...

 
begin
...
NewFun := [];
If ... then
NewFun := NewFun + [Colck];
...
// N := Integer(NewFun)
// 这里出错,类型不兼容
move(newfun, n, sizeof(integer));
...
end;
 
最后用or and等对定义的常量进行运算,解决了。
似乎记得DELPHI的VCL中也常用这种方法。
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部