Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.027 c