帮助更好的CheckBox Logic

时间:2011-03-21 23:32:40

标签: delphi logic delphi-2010

我正在编写一个小密码生成器,并有4个CheckBoxes用于组合,它们是:大写字母,小写字母,数字和特殊字符。

我的问题是 - 我是否必须在逻辑中使用“if”语句检查每个可能的CheckBoxes组合,或者是否有更快,更简单的方法可以缩短代码?

如果这个问题相当愚蠢,我很抱歉,但如果确实有更好的方法,将来我真的可以从中学习。

一切顺利

Chris(shamballa)。

1 个答案:

答案 0 :(得分:11)

为什么你认为你必须通过每个可能的CheckBoxes组合?

检查这个基本功能。

假设您有4个名为CbUpper,CbLower,CbNumbers,CbSymbols的复选框。

现在你可以构建一个像这样的函数

function Generate(AllowUpper,AllowLower,AllowNumbers,AllowSymbols:Boolean; PassLen:Integer):AnsiString;
const
  UpperList  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  LowerList  = 'abcdefghijklmnopqrstuvwxyz';
  NumberList = '0123456789';
  SymbolList = '@#()=¿?!¡[]';
var
  MyList  : AnsiString;
  Index   : Integer;
  i       : Integer;
begin
  Result:='';
  MyList:='';
   //here if the flag is set the elements are added to the main array (string) to process
   if AllowUpper   then MyList:=MyList + UpperList;
   if AllowLower   then MyList:=MyList + LowerList;
   if AllowNumbers then MyList:=MyList + NumberList;
   if AllowSymbols then MyList:=MyList + SymbolList;

   Randomize;
   if Length(MyList)>0 then
     for i:= 1 to PassLen do
     begin
      Index:=Random(Length(MyList))+1;
      Result:=Result+MyList[Index];
     end;
end;

以这种方式打电话

Var
  MyPassword : AnsiString;
begin
   MyPassword:=Generate(CbUpper.Checked,CbLower.Checked,CbNumbers.Checked,CbSymbols.Checked,20);