如何将自定义数据类型转换为字符串

How to convert custom data type into string

我将此作为我的自定义数据类型:

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是转换器...

在您的例子中,status 既不是字符串也不是数字常量。每个状态都需要 return 明确的值。一个例子可以是一个函数 returning strings for each status:

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;

您已将自定义数据类型定义为 enumerationenumeration 是一种序数类型,默认值从 0(零)开始,每个声明的成员都以 1 递增。 (有关此方案的变体,请参阅下面的注释)。

type
  Status = (Playing, Pausing, Stopping, Display, Selected);

因为它是一个序数类型,它可以用来索引一个数组,因此你可以声明一个 const 数组来保存每个 Status:[=20= 的字符串表示]

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。

由于这超出了您的问题范围,请查看文档以了解有关这些枚举的规则和限制。