Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Record   Найти похожие ветки 

 
TCrash ©   (2003-06-10 23:33) [0]

Имеется запись, скажем
type rec=record
a: byte;
b: integer;
c: string[32];
......
z: real;
end;

можно ли каким нибудь образом получить значение поля по его номеру или имени.


 
panov ©   (2003-06-10 23:42) [1]

var
MyValue: Integer;
MyRec: Rec;
begin
...
MyValue := MyRec.b;


 
TCrash ©   (2003-06-10 23:53) [2]

ну нет, так и я умею. Я имею в виду, что получать значение требуется именно по номеру или по имени в таком виде :
type PRec=^rec;

procedure GetValue(a: prec; Index: integer; var X);

procedure GetValue(a: prec; FName: string; var X);

Второй вариант наверняка невозможен, а первый?


 
Palladin ©   (2003-06-11 00:12) [3]

нет ни первый ни второй
читайте книги по основам паскаля молодой человек...


 
default ©   (2003-06-11 00:13) [4]

TCrash © (10.06.03 23:53)
так как ветку твою про Destroy удалили пишу тут
так как Destroy объявлен в базовом классе как виртуальный в потомках для перекрытия он должен объявляться с директивой override


 
TCrash ©   (2003-06-11 00:39) [5]

> Default
Спасибо

> Others
Ну ладно, так не получится, но....
Допустим, я вношу в свой класс какое либо описание структуры Record. Можно-ли сделать так
<Адрес записи>+<Смещение>,<Длина поля>,<Тип поля> => в переменную.
Если можно, то как это реализовать ?


 
TCrash ©   (2003-06-11 00:39) [6]

> Default
Спасибо

> Others
Что-то такое я и подозревал... :-((
Ну ладно, так не получится, но....
Допустим, я вношу в свой класс какое либо описание структуры Record. Можно-ли сделать так
<Адрес записи>+<Смещение>,<Длина поля>,<Тип поля> => в переменную.
Если можно, то как это реализовать ?


 
TCrash ©   (2003-06-11 00:41) [7]

ЗЫ : Все эт нужно, для того, чтобы наваять одну процедуру для сортировки по любому из полей.


 
stranger___ ©   (2003-06-11 00:48) [8]

TCrash © (11.06.03 00:41)
можно
один в данном случае очень важный момент
выравнивание данных на границу чего-либо(слова, байта - нет выравнивания и тд)
чтоб избежать учёта выравнивания пиши пакованную запись со словечком packed
type
Rec = record
X: Byte;
Y: Word;
end;

тип Rec будет занимать в памяти 4 байта если выравнивание идёт на границу слова
в случае
type
Rec = packed record
X: Byte;
Y: Word;
end;
Rec будет занимать 3 байта - то есть по минимуму


 
stranger___ ©   (2003-06-11 00:59) [9]

вот примерчик
type
PWord = ^Word; // вроде такой тип в системе есть, на всякий пишу
Rec = packed record
X: Byte;
Y: Word;
end;
var
w: Word;
r: Rec;
begin
w := PWord(Cardinal(@Rec) + 1)^


 
TCrashXP   (2003-06-11 01:02) [10]

Сорри за тупой вопрос, но как все-же реализовать смещение ?
Ну чтобы
var
p,p1:pointer
a:PRec;
..........
p:=a;
// большой вопрос ???????????????????
p1:=p+1;


 
TCrash ©   (2003-06-11 01:02) [11]

Сорри за тупой вопрос, но как все-же реализовать смещение ?
Ну чтобы
var
p,p1:pointer
a:PRec;
..........
p:=a;
// большой вопрос ???????????????????
p1:=p+1;


 
stranger___ ©   (2003-06-11 01:12) [12]

p1 := Pointer(Cardinal(p) + 1)


 
stranger___ ©   (2003-06-11 01:25) [13]

хочу исправить своё сообщение (11.06.03 00:59) :
w := PWord(Cardinal(@ r) + 1)^





Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-84181
//ALEX
2003-06-11 22:12
2003.06.26
Процедура отрисовки формы


3-83987
Ann
2003-05-30 10:36
2003.06.26
DBNavigator


6-84485
Андрей_ВП
2003-04-22 11:20
2003.06.26
мапинг портов в Delphi


9-83850
Igor1984
2003-01-12 19:19
2003.06.26
Перекрытие спрайтов


14-84569
Andrew.
2003-06-07 17:30
2003.06.26
SMTP и отправка писем из програмы.