Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2018, 03:27   #1
Adult_Master
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 63
По умолчанию PTypeInfo обратно в тип

Чот туплю уже под утро ....

имеем тип:
Код:
 TMyType  = ( ptWinOnly, ptWinAndCredit );

 var
  MyVar: TMyType;
вызываем функцию:
Код:
 TrySetParam( 'MyParam', TypeInfo( TMyType ), @MyVar );
А вот её описание:
Код:
function TrySetParam( const ParamID: string; Enum: PTypeInfo;
  Param: Pointer): Boolean;
var
 Value: Byte;
begin
 ....
 В процессе работы получаем допустим
 Value := 1; //ptWinAndCredit 
 ....

 Param^ :=  Value //???? 
 //И вот как тут Param присвоить результат приведённый к TMyType ???
end;
Функция должна быть универсальной, и принимать на вход разные типы ..., т.е. надо внутри из Enum: PTypeInfo извлечь TMyType.
Adult_Master вне форума Ответить с цитированием
Старый 11.03.2018, 05:02   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

На самом деле PTypeInfo тут совершенно без надобности.
По сути своей переменная Enum хранит целое значение (байт).
И его можно изменить напрямую при помощи нехитрого хакерского трюка:
Код:
function TrySetParam( const ParamID: string; Enum: PTypeInfo;
  Param: Pointer): Boolean;
var
 Value: Byte;
 Hack: ^Byte; 
begin
 ....
 В процессе работы получаем допустим
 Value := 1; //ptWinAndCredit 
 ....
 Hack := Param;
 Hack^ :=  Value;
 ....
end;
Добавлено после пары экспериментов

Оказывается, всё не так просто..
Enum может иметь и более 255 элементов, тогда он тянет на 2 байта.
Значит, нужно искать, где в TypeInfo лежит размер поля

Последний раз редактировалось Black Fregat; 11.03.2018 в 05:18. Причина: Наврал..
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
две задачи на тип INTEGER и тип CHAR inspiron13 Помощь студентам 5 04.01.2011 00:17
две задачи на тип INTEGER и тип CHAR inspiron13 Паскаль, Turbo Pascal, PascalABC.NET 3 04.01.2011 00:08
Первести тип real в тип strings sokla Помощь студентам 5 07.01.2010 18:04
Перевести тип String в тип PChar (Delphi 7) ScorpioN_T Помощь студентам 2 28.10.2008 22:13
как перевести из integer в real(и обратно), и из real в string(и обратно) Ga-sergey Общие вопросы Delphi 2 08.06.2007 21:13