Паскаль - Как преобразовать пользовательский тип данных в строку - PullRequest
0 голосов
/ 30 мая 2018

У меня есть такой тип данных:

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

И я хотел вывести некоторые из них, используя DrawText из библиотеки SwinGame:

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

Там указано "Got "Status", expected "AnsiString" что было довольно понятно, потому что он принимает только строки, а arrayOfStatus имел тип Status.Так как мне преобразовать это в строку?Я знаю только IntToStr как конвертер ...

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы определили свой тип данных как 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];

Примечание! Порядковый номер членов перечисления можно изменить, объявив определенные значения для членов, например ::1010 *

type
  TMyEnum = (First = 1, Second, Third = 10);

Здесь,порядковые значения членов: 1, 2, 10.

Поскольку это выходит за рамки вашего вопроса, посмотрите в документации правила и ограничения, касающиеся этих перечислений.

0 голосов
/ 30 мая 2018

В вашем случае статус не является ни строкой, ни числовой константой.Вам нужно будет возвращать значения явно для каждого статуса.Примером может служить функция, возвращающая строки для каждого состояния:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...