![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте. Использую LoadFromStream для чтения данных с потока. Прошу помощи в организации чтения данных с потока с определенной позиции и до определенной, а не весь поток после текущего положения.
P.S. Использую TMemoryStream для чтения/записи RxRichEdit. Заранее благодарен. |
|
#2
|
||||
|
||||
|
Цитата:
Код:
...
var
mem,tar: TMemoryStream;
begin
mem := TMemoryStream.Create;
tar := TMemoryStream.Create;
mem.LoadFromFile('C:\Data.dat');
mem.Seek(15000,soFromCurrent); //переносим текущую позицию на 15000 байт вперёд
tar.CopyFrom(mem,20000); //и читаем 20000 байт в поток tar
... |
|
#3
|
|||
|
|||
|
Большое спасибо. И еще 1 специфичный вопрос про работу с потоками: когда я записываю содержимое RxRichEdit в поток 2 раза подряд (например при первой записи в поле написано число '123', при второй - '45'), то при чтении информации с начала потока в это же поле - выводится только '123'. Как это объяснить?
Заранее благодарен |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
||||
|
||||
|
Если вы все правильно делаете с потоком, то такого быть не может, но замечено, что иногда в режиме отладки дельфак неправильно отображает текущее значение - выводит старое.
|
|
#6
|
|||
|
|||
|
Вот код. 2 RxRichEdit. Пишу в них что-нибудь, затем жму Button 2. После чего Button 3 и Button 1. В итоге - отображается только то, что было в RxRichEdit1.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RxRichEd;
type
TForm1 = class(TForm)
RxRichEdit1: TRxRichEdit;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
RxRichEdit2: TRxRichEdit;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
t:TMemoryStream;
pos:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
RxRichEdit1.Lines.LoadFromStream(t);
//t.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
RxRichEdit1.Lines.SaveToStream(t);
pos:=t.Position;
RxRichEdit2.Lines.SaveToStream(t);
Memo1.Text:=Inttostr(pos)+' '+Inttostr(t.Position);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
t:=TMemoryStream.Create;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
t.Seek(0,0);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
t.Seek(pos,0);
end;
end. |