if strtoint(edit1.Text) in [0,1,7,19,21,22,23,25,31,42,53,67,69,79,80,99,102,109,110,113,119,135,137,138,139,143,161,177,389,443,456,513,544,548,553,555,568,569,635,636,666,993,1001,1011,1024,1025,1033,1080] then begin
  messagebox(handle,PChar('端口有可能是系统端口请重新填写。'),PChar(self.caption),MB_OK);
  exit;
  end;我是不是in里面的东西太长了。有没有更好的方法,求助了。

解决方案 »

  1.   

    if (strtoint(edit1.Text) in [0,1,7,19,21,22,23,25,31,42,53,67,69,79,80,99,102,109,110,113,119,135,137,138,139,143,161,177]) 
    or (strtoint(edit1.Text) in [389,443,456,513,544,548,553,555,568,569,635,636,666,993,1001,1011,1024,1025,1033,1080]) then begin
      messagebox(handle,PChar('端口有可能是系统端口请重新填写。'),PChar(self.caption),MB_OK);
      exit;
      end;
      

  2.   

    这篇文章可能对你有帮助
    http://www.delphibbs.com/keylife/iblog_show.asp?xid=13120
      

  3.   

    改成数组,然后查找以下:
    const
      PortList: array[0..47] of Integer = (0,1,7,19,21,22,23,25,31,42,53,67,69,79,80,99,102,109,110,113,119,135,137,138,139,143,161,177,389,443,456,513,544,548,553,555,568,569,635,636,666,993,1001,1011,1024,1025,1033,1080);function Half_Search(Value: Integer): Boolean;
    var
      LowI, HighI, I: Integer;
    begin
      Result := False;
      HighI := Length(PortList) - 1;
      LowI := 0;
      while(HighI > LowI)do
      begin
        I := (HighI + LowI) div 2;
        if PortList[I] = Value then
        begin
          Result := true;
          Break;
        end
        else if PortList[I] > Value then
        begin
          HighI := I - 1;
        end
        else begin
          LowI := I + 1;
        end;
      end;
    end;
    ...
    if Half_Search(StrToInt(Edit1.Text)) then
    begin
      messagebox(handle, PChar('端口有可能是系统端口请重新填写。'), PChar(self.caption), MB_OK);
      exit;
    end;