我将此作为自定义数据类型:
type
Status = (Playing, Pausing, Stopping, Display, Selected);
我想使用SwinGame库中的DrawText
输出其中一些:
arrayOfStatus[0] := Playing;
DrawText(arrayOfStatus[0], 'arial.ttf', 14, 55, 55);
它说"Got "Status", expected "AnsiString"
有点可以理解,因为它只接受字符串,arrayOfStatus
有Status
类型。那么如何将其转换为字符串?我只知道IntToStr
作为转换器......
答案 0 :(得分:1)
在您的情况下,状态既不是字符串也不是数字常量。对于每种状态,您都需要明确地返回值。一个示例可以是为每个状态返回字符串的函数:
Function Str_Status(St: Status): String;
Begin
Result:= '';
Case St Of
Playing: Result:= 'Playing';
Pausing: Result:= 'Pausing';
Stopping: Result:= 'Stopping';
// ... and so on
End; //Of case
End; //Of function
//Usage example:
Var State: String;
Begin
State:= Str_Status(arrayOfStatus[0]);
If State <> '' Then
DrawText(State, 'arial.ttf', 14, 55, 55);
End;
答案 1 :(得分:1)
您已将自定义数据类型定义为enumeration
。 enumeration
是一个序数类型,默认值从0(零)开始,每个声明的成员增加1。 (请参阅下面有关此方案变体的说明)。
type
Status = (Playing, Pausing, Stopping, Display, Selected);
由于它是一个序数类型,它可用于索引数组,因此您可以声明一个const
数组来保存每个Status
的字符串表示形式:
const
StatusStr:array[Status] of string =
('Playing', 'Pausing', 'Stopping', 'Display', 'Selected');
这是一个简单的测试,可以在TMemo
procedure TForm3.Button1Click(Sender: TObject);
var
i: status;
begin
for i := Low(Status) to High(Status) do
Memo1.Lines.Add(StatusStr[i]);
end;
或指定标签的标题
StatusLabel.Caption := StatusStr[Playing];
注意!枚举成员的常规可以通过向成员声明特定值来改变,f.ex。:
type
TMyEnum = (First = 1, Second, Third = 10);
这里,成员的序数值是1,2,10。
由于这超出了您的问题的范围,请查看文档中有关这些枚举的规则和限制。