procedure TTextField.Load(f:PText);
var tempstr:widestring;
c,q,m,t:integer;
begin
Clear;
BlockRead(f^,m,sizeof(m));
for q:=1 to m do
begin
BlockRead(f^,t,sizeof(t));
SetLength(tempstr,t);
for c:=1 to t do
BlockRead(f^,tempstr[c],sizeof(tempstr[c]));
Text:=Text+#13#10+tempstr;
end;
end;
Вот эту процедуру не могу понять. Она должна читать из бинарного потока данные и заполнять ими поле Text. Вот процедура обратная этой(сохранение в файл):
procedure TTextField.Save(f:PText);
var c,t,l:integer;
tempstr:widestring;
begin
t:=1;
BlockWrite(f^,t,sizeof(t));
tempstr:=trim(Text);
l:=length(tempstr);
BlockWrite(f^,l,sizeof(l));
for c:=1 to l do
BlockWrite(f^,tempstr[c],sizeof(tempstr[c]));
end;
Мне бы с# функцию) И если есть интерес - то напишите в скайп: jingle_of_coins. Эта процедурка лишь часть довольно большой работы...
Дополнение: Вот набросал что-то такое. Как думаете, эквивалентно?
public static string TTextFieldLoad(BinaryReader br)
{
int c = 0, q = 1, m = 0, t = 0;
char[] tempstr = new char[1];
m = br.ReadInt32();
string text = "";
for(q=1 ; q < m; q++)
{
t = br.ReadInt32();
tempstr = new char[t];
for(c = 1; c < t; c++)
{
tempstr[c] = br.ReadChar();
}
text += tempstr;
}
return text;
}
Этот вариант не работает. Еще вот так попробовал(шел от обратного - смотрел как собирается блок):
public static string TTextFieldLoad(BinaryReader br)
{
int c = 0, q = 1, m = 0, t = 0;
char[] tempstr = new char[1];
while (true)
{
if (br.ReadInt32() == 1)
break;
}
int l = br.ReadInt32();
tempstr = br.ReadChars(l);
return tempstr.ToString();
}
Тоже выдает мусор.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники