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

Вниз

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

 
Holy ©   (2003-05-22 13:54) [0]

Следующий вопрос. Есть запись (record) из нескольких полей типа строка различной длины. Можно ли это одним махом скопировать в строку или обречен на поле1+поле2 и т.д.


 
Palladin ©   (2003-05-22 13:59) [1]

обречен


 
Palladin ©   (2003-05-22 14:00) [2]

хотя если record packed, то нет...


 
Holy ©   (2003-05-22 14:04) [3]

Объясните подробней...


 
Palladin ©   (2003-05-22 14:14) [4]

я тебя обманул, в любом случае необходимо складывать..


 
NDeu ©   (2003-05-22 14:40) [5]

Хоть и извращатся можно:

type
TMyRecord=record
Case Boolean of
True:(Str1:array[0..9]of Char;
Str2:array[0..19]of Char);
False:(LongStr:array[0..29]of char);
end;

procedure TForm1.Button1Click(Sender: TObject);
var MyRecord:TMyRecord;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
ShowMessage(MyRecord.LongStr);
end;


 
panov ©   (2003-05-22 15:09) [6]

>NDeu © (22.05.03 14:40)

Для такой записи нет необходимости извращаться:

TMyRecord=record
Str1:array[0..9]of Char;
Str2:array[0..19]of Char;
end;

ShowMessage(IntToStr(SizeOf(TMyRecord)));


 
Palladin ©   (2003-05-22 15:14) [7]


> panov © (22.05.03 15:09)

немножко не так

ShowMessage(pchar(@MyRecord));


 
Sandman25 ©   (2003-05-22 15:45) [8]

2Palladin
Мне кажется, нет гарантии, что на конце записи будет #0. Во всяком случае, для локальной (объявленной в процедуре/функции) записи.


 
Palladin ©   (2003-05-22 15:56) [9]

да нет, особенно при некоторых обстоятельствах, по этому можно насильно его организовать

type
TMyRecord=packed record
Str1:array[0..9]of Char;
Str2:array[0..19]of Char;
EOZS:byte;
end;

procedure TForm1.Button1Click(Sender: TObject);
var MyRecord:TMyRecord;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
MyRecord.EOZS:=0;
ShowMessage(pchar(@MyRecord));
end;


 
panov ©   (2003-05-22 16:35) [10]

>Palladin © (22.05.03 15:56)
Для packed record и массивов символов нет необходимости вводить дополнительно еще вводить поле.

SizeOf даст точный размер записи.


 
Palladin ©   (2003-05-22 16:40) [11]

а зачем автору точный размер записи?


 
panov ©   (2003-05-22 17:55) [12]

MyRecord,MyCopyRecord:TMyRecord;
p:PChar;
begin
MyRecord.Str1:="0123456789";
MyRecord.Str2:="01234567890123456789";
GetMem(p,SizeOf(MyRecord));
move(MyRecord,p^,SizeOf(MyRecord));
...
move(p^,MyCopyRecord,SizeOf(MyCopyRecord));



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

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

Наверх




Память: 0.49 MB
Время: 0.013 c
1-2855
cheg
2003-05-21 16:39
2003.06.02
Про TObject.Free


3-2825
VeLeS
2003-05-15 15:24
2003.06.02
как заставить маску понимать значение NULL?


1-2925
Nomad
2003-05-20 12:58
2003.06.02
Почему-то не получается задать цвета для отдельных точек в TChart


1-2905
saska
2003-05-22 20:01
2003.06.02
Прогресс бар в статусной строке...


1-2998
vlv
2003-05-21 17:30
2003.06.02
Проблемы с наследованием форм от TService