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

时间:2018-05-30 01:20:20

标签: pascal custom-data-type

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

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

我想使用SwinGame库中的DrawText输出其中一些:

arrayOfStatus[0] := Playing;
DrawText(arrayOfStatus[0], 'arial.ttf', 14, 55, 55);

它说"Got "Status", expected "AnsiString"有点可以理解,因为它只接受字符串,arrayOfStatusStatus类型。那么如何将其转换为字符串?我只知道IntToStr作为转换器......

2 个答案:

答案 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)

您已将自定义数据类型定义为enumerationenumeration是一个序数类型,默认值从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。

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

相关问题