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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2008, 08:42   #31
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А если так ?:

Делаем процедуру один раз (если только для записи данных)
Код:
procedure WriteRecord(F:TStream; data:array of const);
begin
    for i:= low(data) to high(data) do begin
    
       case data[i].VType of 
           vtInteger : F.write(data[i].VInteger, sizeOf(integer));
            ...
           // Далее для всех типов
       end;
    end
end;

// А потом используем ее для любых типов:

type
    TR = record
          A : integer;
          B : String;
    end;

var R:TR;

WriteRecord(F, [R.A, R.B]);

Последний раз редактировалось alexBlack; 25.01.2008 в 09:14.
alexBlack вне форума Ответить с цитированием
Старый 25.01.2008, 18:47   #32
Мессир
Пользователь
 
Аватар для Мессир
 
Регистрация: 24.01.2008
Сообщений: 12
По умолчанию

alexBlack, занятно, но у меня иной вопрос ещё есть - а можно ли осуществить перебор полей записи примерно так же, как Вы это делаете с массивом?
Плохо, когда не знаешь, да ещё и забудешь.
Мессир вне форума Ответить с цитированием
Старый 25.01.2008, 21:32   #33
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Извините, но я думаю в object pascal этого не сделать Никак, и все таки какой же народ ленивый пошел все дай да чтобы и немного кода.
BOBAH13 вне форума Ответить с цитированием
Старый 26.01.2008, 04:46   #34
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Мессир Посмотреть сообщение
alexBlack, занятно, но у меня иной вопрос ещё есть - а можно ли осуществить перебор полей записи примерно так же, как Вы это делаете с массивом?
RTTI Вам нужно, видимо. Смотрите документацию, я не знаю, как он в Дельфи реализован. В C++ это класс type_info и оператор typeid.
B_N вне форума Ответить с цитированием
Старый 28.01.2008, 08:39   #35
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

RTTI ничего не даст.

TypeInfo(TMyRecord); для простых записей компилятор говорит
"TMyRecord has no type info"

Если в запись добавить String, то TypeInfo() возвращает информацию, но в ней ничего нет кроме размера записи.

Так что скорее всего перебрать поля record не получится.
alexBlack вне форума Ответить с цитированием
Старый 28.01.2008, 08:52   #36
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Я не имел в виду typeinfo по всей структуре, а только по ее членам, чтобы иметь возможность отличить в рантайме LPSTR от DWORD, к примеру. Честно говоря, я так и не понял до конца, чего <Мессир> хочет добиться.
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить тактовою частоту процессора и узнать название активной видеокарты и объём памяти SalasAndriy C++ Builder 7 14.04.2012 16:17
Найти объём куба и площадь его боковой поверхности BASIC Ветренная Помощь студентам 23 02.06.2008 13:15
record/file potion Паскаль, Turbo Pascal, PascalABC.NET 3 10.05.2008 20:15
ОБъём скачанного из интернета Kostia Работа с сетью в Delphi 2 23.11.2007 00:25
Направьте на путь истинный! [FlekS] Помощь студентам 3 20.02.2007 11:51