Delphi 子范围声明的问题

Delphi 子范围声明的问题,delphi,delphi-2010,Delphi,Delphi 2010,我试图使它一旦不同的文本输入形状将改变颜色,但它说有一个问题('a..'Z')是“预期的”),但收到了字符串文字“a”。我不知道该怎么解决。感谢您的帮助,谢谢 type TCapitalLetter = ('A' .. 'Z' ); //subrange of type char TDigit = ('0' .. '9' ); //subrage of type char 你的定义很接近,但并不完全正确: type TCapitalLetter = 'A'..'Z'; TDig

我试图使它一旦不同的文本输入形状将改变颜色,但它说有一个问题('a..'Z')是“预期的”),但收到了字符串文字“a”。我不知道该怎么解决。感谢您的帮助,谢谢

type
  TCapitalLetter = ('A' .. 'Z' ); //subrange of type char
  TDigit = ('0' .. '9' ); //subrage of type char

你的定义很接近,但并不完全正确:

type
  TCapitalLetter = 'A'..'Z';
  TDigit = '0'..9';
不过,从你的另一个问题来看,我认为这不是你真正需要做的。您正在寻找成员资格(该类型中包含一些字符),在这种情况下,您需要使用集合来完成。这是一个控制台应用程序,您只需编译和测试即可:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TCapitalLetters = TSysCharSet; 
  TDigits = TSysCharSet;

const
  CapitalLetters: TCapitalLetters = ['A'..'Z'];
  Digits: TDigits = ['0'..'9'];

var
  Temp, Output: string;
  Ch: Char;

begin
  Output := '';
  Temp := 'Seems A Nice Test Answer';
  for Ch in Temp do
    if CharInSet(Ch, CapitalLetters) then
      Output := Output + Ch;

  WriteLn(Output);
  ReadLn;
end.
对于Delphi的早期(非Unicode)版本,您需要使用
set of Char
而不是
TSysCharSet
,并对set成员资格使用稍微不同的语法:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TCapitalLetters = set of Char;
  TDigits = set of Char;

const
  CapitalLetters: TCapitalLetters = ['A'..'Z'];
  Digits: TDigits = ['0'..'9'];

var
  Temp, Output: string;
  Ch: Char;

begin
  Output := '';
  Temp := 'Seems A Nice Test Answer';
  for Ch in Temp do
    if Ch in CapitalLetters then
      Output := Output + Ch;

  WriteLn(Output);
  ReadLn;
end.
测试应用程序的输出:


“它说有问题”并不是对我们有用的问题描述。您从编译器得到的确切错误消息是什么?(是的,我知道问题是什么以及如何解决它,但你需要先解决你的问题并加以改进。)从这个“问题”你可能可以看出我缺乏经验。我可能遗漏了一些非常简单的问题,所以我不认为我需要扩展更多内容。我试图解释如何在这里写出更好的问题,以便您可以更快地获得帮助。编译器错误消息就在您面前;绝对没有理由不把它包括在你的问题中。如果你想让我们给你时间来帮助解决你的问题,你至少可以给我们你已有的信息,我们可以使用这些信息。好吧,我已经将代码更改为你在我上一个问题“Delphi 2010密码强度表”(顺便说一句,谢谢)中帮助解决的代码,但这次('A'…'Z')有一个错误表示:应为),但收到字符串文字“a”。我将尝试编辑此问题。。。如果有帮助的话。我不知道你在这里粘贴代码时在做什么,但每次在每行末尾都有50多个尾随空格字符,这会破坏格式。我(又)把它修好了。你可以看到,你可以在输入问题时预览它(就在你正在键入的区域的正下方),这样你就可以看到当你发布它时它会是什么样子,对吗?实际上,只需要删除括号。。。我知道这会很小。而你的第二个建议,这是一个很好的想法,但不是一个密码强度米像我试图使。谢谢你。我现在的代码仍然存在一些问题,在任何文本完全退格之前,形状根本不会改变颜色。我明天会进一步调查这件事。再次感谢!您的“密码强度表”将需要遍历用户输入的文本,以查看输入的上限、下限和位数,对吗?我在第二个示例中使用的代码将允许您这样做,如果您添加对小写和数字的测试,并实现计数器,而不仅仅是收集字母。遗憾的是,字符集不会在Unicode Delphi中编译。在任何情况下,使用诸如TCharacter.IsUpper等字符属性测试程序都会更简洁。@David:事实上,它确实可以编译,尽管它会生成一个关于使用
CharInSet
的提示(在XE5的新控制台应用程序中测试)。不过,我会更新我已经更新的以反映两者。这个问题(在我提到的另一篇文章中)清楚地询问了“A”…'Z'和“0”…'9';不过,我同意Unicode的合适方法是使用
TCharacter
功能。(也看看原来问题的修订历史。)我对修订历史没有那么在意。不确定字符集是如何编译的。也许编译器作弊了!当然它不会让我做一套词!无论如何,不管用户是否承认ASCII以外的字符,温柔地提醒他们拉丁语不是唯一的水果总是一个好办法。