如何将自定义数据类型转换为字符串
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;
您已将自定义数据类型定义为 enumeration
。 enumeration
是一种序数类型,默认值从 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。
由于这超出了您的问题范围,请查看文档以了解有关这些枚举的规则和限制。
我将此作为我的自定义数据类型:
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;
您已将自定义数据类型定义为 enumeration
。 enumeration
是一种序数类型,默认值从 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。
由于这超出了您的问题范围,请查看文档以了解有关这些枚举的规则和限制。