是否可以将字符串作为TSysCharSet变量传递?
这当然不会编译:
var
AValidChars: SysUtils.TSysCharSet;
AResult: string;
begin
// Edit1.Text can contain 0..9 or a..z
AValidChars := SysUtils.TSysCharSet( [Edit1.Text] );
end;
谢谢,
法案
最佳答案
不,不可能简单地将字符串作为TSysCharSet传递。
但是,您可以做的是创建一个TSysCharSet,它包含字符串中的所有字符。此代码将执行此操作:
var
AValidChars: SysUtils.TSysCharSet;
s: AnsiString;
i: integer;
begin
// Edit1.Text can contain 0..9 or a..z
AValidChars := [];
s := Edit1.Text;
for i := 1 to Length(s) do
Include(AValidChars, s[i]);
end;
如果您不使用较早的Delphi版本,也可以使用“ for ... in”代替上面的循环:
var
AValidChars: SysUtils.TSysCharSet;
c: AnsiChar;
begin
// Edit1.Text can contain 0..9 or a..z
AValidChars := [];
for c in Edit1.Text do
Include(AValidChars, c);
end;
请注意,在这两个代码段中均使用了AnsiString / AnsiChar,因为该技术不适用于WideString或Delphi 2009引入的Unicode字符串类型。
非常感谢Craig Stuntz,Ken White和Rob Kennedy的宝贵意见,我编辑了此答案以解决他们的所有观点。