Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Преобразование типов / 18 сообщений из 18, страница 1 из 1
24.06.2018, 18:04
    #39664857
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Добрый день!
Есть тип
Код: pascal
1.
type BusinessEntityType = (_1, _2, _3);


есть регистрация
Код: pascal
1.
2.
3.
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_1', '1');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_2', '2');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_3', '3');


есть переменная
Код: pascal
1.
2.
  var W: BusinessEntityType;
        S: string;


Подскажите, как получить значение переменной W в переменную S (т.е. получить '1', '2' или '3'),
и наоборот, присвоить переменной W значение переменной S ?
...
Рейтинг: 0 / 0
24.06.2018, 18:34
    #39664863
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Погугли по словам
RTTI delphi get enum names
...
Рейтинг: 0 / 0
24.06.2018, 19:03
    #39664870
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
вот, например

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
type
  TptTokenKind = (
    ptAbsolute,
    ptAbstract,
    ptAddressOp,
    ptAmpersand,
    ptAnd,
    ptAnsiComment,
    ptAnsiString,
    ptArray,
    ptArrayOf,
    ptAs,
    ptAsciiChar,
    ptAsm,
    ptAssembler,
    ptAssign,
    ptAutomated,
    ptBegin,
    ptBoolean,
    ptBorComment,
    ptBraceClose,
    ptBraceOpen,
    ptByte,
    ptByteBool,
    ptCardinal);

function TokenName(Value: TptTokenKind): String;
begin
  result := GetEnumName(TypeInfo(TptTokenKind),Integer(Value));
end;
...
Рейтинг: 0 / 0
24.06.2018, 19:05
    #39664872
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Кроик Семён,

Код: pascal
1.
GetEnumName(TypeInfo(BusinessEntityType), Ord(W))


возвращает '_1', надо '1'
...
Рейтинг: 0 / 0
24.06.2018, 19:15
    #39664875
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxxКроик Семён,
Код: pascal
1.
GetEnumName(TypeInfo(BusinessEntityType), Ord(W))


возвращает '_1', надо '1'

Тогда исходный вопрос исправьте, вы спрашивали как получить значение переменной "W: BusinessEntityType" - вы его и получили.
...
Рейтинг: 0 / 0
24.06.2018, 19:17
    #39664878
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Подозреваю что имелось в виду:
Код: pascal
1.
2.
S := GetEnumName(TypeInfo(BusinessEntityType), Ord(W));
S := RemClassRegistry.GetExternalPropName(TypeInfo(BusinessEntityType), S);
...
Рейтинг: 0 / 0
24.06.2018, 19:39
    #39664881
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
alekcvp,

Код: pascal
1.
RemClassRegistry.GetExternalPropName(TypeInfo(BusinessEntityType), '_1');


возвращает пустую строку

а вопрос был такой:
как получить значение переменной W в переменную S (т.е. получить '1' , '2' или '3' )
...
Рейтинг: 0 / 0
24.06.2018, 19:41
    #39664882
defecator
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxxalekcvp,

Код: pascal
1.
RemClassRegistry.GetExternalPropName(TypeInfo(BusinessEntityType), '_1');



возвращает пустую строку

а вопрос был такой:
как получить значение переменной W в переменную S (т.е. получить '1' , '2' или '3' )
я тебе написал, как
...
Рейтинг: 0 / 0
24.06.2018, 19:41
    #39664883
чччД__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxxalekcvp,

Код: pascal
1.
RemClassRegistry.GetExternalPropName(TypeInfo(BusinessEntityType), '_1');


возвращает пустую строку

а вопрос был такой:
как получить значение переменной W в переменную S (т.е. получить '1' , '2' или '3' )
Ё. :)
Код: pascal
1.
S: = IntToStr(Ord(W))
...
Рейтинг: 0 / 0
24.06.2018, 19:44
    #39664884
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Дико извиняюсь, все заработало
спасибо

А теперь вопрос, как сделать обратное действие?
...
Рейтинг: 0 / 0
24.06.2018, 19:46
    #39664886
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxxа вопрос был такой:
как получить значение переменной W в переменную S (т.е. получить '1' , '2' или '3' )
Переменная W не получает значения '1', '2' или '3', она получает значения '_1', '_2' или '_3' - см. её обявление.
Если надо получить индекс значения - то см. ответ чччД_.
...
Рейтинг: 0 / 0
24.06.2018, 19:47
    #39664887
чччД__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxxДико извиняюсь, все заработало
спасибо

А теперь вопрос, как сделать обратное действие?
Ыыы...
Код: pascal
1.
W := BusinessEntityType(StrToInt(S));
...
Рейтинг: 0 / 0
24.06.2018, 19:59
    #39664893
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
чччД__,

для настырных переформулирую вопрос

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
type BusinessEntityType = (_11, _22, _33);

  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_11', '1');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_22', '2');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_33', '3');

var W: BusinessEntityType;
      S: string;



как получить значение переменной W в переменную S (т.е. получить '1', '2' или '3'),
ответ дал alekcvp
Код: pascal
1.
2.
S := GetEnumName(TypeInfo(BusinessEntityType), Ord(W));
S := RemClassRegistry.GetExternalPropName(TypeInfo(BusinessEntityType), S);



а как наоборот из S='1' получить W=_11 ?
...
Рейтинг: 0 / 0
24.06.2018, 20:02
    #39664895
чччД__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxx,

прикинь, именно так: 21517030
...
Рейтинг: 0 / 0
24.06.2018, 20:08
    #39664900
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
bamxx а как наоборот из S='1' получить W=_11 ?
Вы вообще справку почитать не пробовали?..
Код: pascal
1.
S := RemClassRegistry.GetInternalPropName(TypeInfo(BusinessEntityType), '1');
...
Рейтинг: 0 / 0
24.06.2018, 20:08
    #39664901
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
Дальше ещё надо через RTTI получить значение W.
...
Рейтинг: 0 / 0
24.06.2018, 20:10
    #39664903
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
чччД__,

для настырных переформулирую вопрос

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
type BusinessEntityType = (_11, _22, _33);

  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_11', '10');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_22', '20');
  RemClassRegistry.RegisterExternalPropName(TypeInfo(BusinessEntityType), '_33', '30');

var W: BusinessEntityType;
      S: string;


а как получить из S='10' получить W=_11 ?
...
Рейтинг: 0 / 0
24.06.2018, 20:15
    #39664906
bamxx
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование типов
alekcvp,

все, спасибо
вопрос закрыт
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Преобразование типов / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]