Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
3-83859
terra
2003-06-02 10:34
2003.06.26
БД и QuickReport


6-84473
LOM
2003-04-10 14:59
2003.06.26
Вопрос по TTcpServer


14-84601
Far
2003-06-08 17:50
2003.06.26
procedure


3-83932
eee
2003-05-29 12:55
2003.06.26
выдается сообщение, что много строк для упдейта.


14-84580
Sheng
2003-06-08 11:12
2003.06.26
Глюк в ХР




   Наверх