Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.02.2018, 12:39
igor74 igor74 вне форума
Прохожий
 
Регистрация: 08.06.2011
Адрес: Екатеринбург
Сообщения: 11
Версия Delphi: Delphi 2010
Репутация: -625
По умолчанию Как передать перечисляемый тип в процедуру

Добрый день, знатоки.

Вопрос простой, но решения нет. Как передать перечисляемый тип в процедуры, например для определения текстового написания значения.

Пример:

Код:
uses ..., TypInfo;

type
  TmyBred = (mbNone, mbHelp, mbNoReplay);

function GetStringEnum(P : TypInfo; Index : integer) : string;
begin
  Result := GetEnumName(P, Index); // возвращает текстовое написание
end;

function GetStrEnum(myBred : TmyBred) : string;
begin
   Result := GetStringEnum(TypInfo(TmyBred)), Ord(myBred) );
end;

-----------------

а хочется так:

function GetStringEnum(P : "тут что написать?"; Index : integer) : string;
begin
  Result := GetEnumName(TypInfo( P ), Index); // возвращает текстовое написание
end;

function GetStrEnum(myBred : TmyBred) : string;
begin
   Result := GetStringEnum(TmyBred, Ord(myBred) );
end;

т.е. надо какой то тип указать. Какой?

P.S. Код для примера. Сильно не пинайте. И не спрашивайте зачем? Не флудите, плз. Реально нужно.
Ответить с цитированием
  #2  
Старый 28.02.2018, 09:43
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
uses TypInfo;
 type
  TmyBred = (mbNone, mbHelp, mbNoReplay);
type
 TmyBred1 = (mbNone1, mbHelp1, mbNoReplay1);

function GetStringEnum(p: ShortString; Index: integer) : string;
var
 pt: PTypeInfo;
begin
 if p = 'TmyBred'  then pt:= TypeInfo(TmyBred);
 if p = 'TmyBred1' then pt:= TypeInfo(TmyBred1);
 Result := GetEnumName(pt, Index);
end;
Ответить с цитированием
  #3  
Старый 28.02.2018, 15:36
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Не совсем понятно зачем дополнительные процедуры вводить. Что мешает использовать TypeInfo() и GetEnumName() по прямому назначению как есть?
Ну а вообще есть ответ на Ваш прямой вопрос.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 28.02.2018 в 15:58.
Ответить с цитированием
  #4  
Старый 01.03.2018, 06:40
igor74 igor74 вне форума
Прохожий
 
Регистрация: 08.06.2011
Адрес: Екатеринбург
Сообщения: 11
Версия Delphi: Delphi 2010
Репутация: -625
По умолчанию

То что написано по ссылке я так знал, но где то в глубине души надеялся а вдруг решение есть. Ну нет, так нет, PTypeInto никто не отменял.
Всем спасибо. Тема закрыта.
Ответить с цитированием
  #5  
Старый 01.03.2018, 17:11
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Цитата:
Сообщение от igor74
То что написано по ссылке я так знал, но где то в глубине души надеялся а вдруг решение есть. Ну нет, так нет, PTypeInto никто не отменял.
Всем спасибо. Тема закрыта.
А что могло быть нового, если там прямо указано (и Вы это знали), что входной параметр функции TypeInfo(T:TypeIdent) - это "магия компилятора и она недоступна для программиста"(цитата)?
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter