Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.07.2011, 12:01
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение Поток

Подскажите как записать переменную в поток и потом ее считать
если можно кодом, перекапал кучу примеров, не понимаю
Ответить с цитированием
  #2  
Старый 27.07.2011, 11:26
Аватар для Developer
Developer Developer вне форума
Прохожий
 
Регистрация: 01.07.2011
Адрес: Украина
Сообщения: 27
Версия Delphi: 7, 2009
Репутация: 75
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  m:TMemoryStream;
  i:integer;
begin
  m:=TMemoryStream.Create;
  i:=1684968;
  m.Write(i,SizeOf(i));
  i:=0;
  m.Position:=0;
  m.Read(i,SizeOf(i));
  ShowMessage(IntToStr(i));
  m.free;
end;
Ответить с цитированием
  #3  
Старый 27.07.2011, 15:50
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

О спасибо то что нужно
если пытаюсь прочитать это с другой кномки то выдает другое число
Как например в таймер поставить чтение на заголовок формы?
Ответить с цитированием
  #4  
Старый 27.07.2011, 16:05
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

и еще вопрос суда же

что бы не грузить память в поток можно просто перезаписывать, думаю что так:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
m:TMemoryStream;
i:integer;
begin
i:=10;
m.Position:=0;
m.SaveToStream(i);
m.Free;
end;
но выдает ошибку
Код:
 Incompatible types: 'TStream' and 'Integer'
Ответить с цитированием
  #5  
Старый 27.07.2011, 16:24
Аватар для DenNik
DenNik DenNik вне форума
Прохожий
 
Регистрация: 25.07.2011
Адрес: Около 300000 км от Луны
Сообщения: 25
Версия Delphi: D7 Enterprise
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ghennadiy
О спасибо то что нужно
если пытаюсь прочитать это с другой кномки то выдает другое число

Чтобы читать то же что и записал, нужно объявить глобальную переменную TMemoryStream. затем при создании формы создаешь поток, при закрытии - освобождаешь его.
Ответить с цитированием
  #6  
Старый 27.07.2011, 16:27
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

а можно кодом?
Ответить с цитированием
  #7  
Старый 27.07.2011, 16:32
Аватар для DenNik
DenNik DenNik вне форума
Прохожий
 
Регистрация: 25.07.2011
Адрес: Около 300000 км от Луны
Сообщения: 25
Версия Delphi: D7 Enterprise
Репутация: 10
По умолчанию

делаешь раз:

Код:
var
  Form1: TForm1;
  m: TMemoryStream;

делаешь два:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  m:= TMemoryStream.Create;
end;

делаешь три:
гдето в программе работаешь с потоком. Он будет храниться все время жизни формы.

делаешь четыре:

Код:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  m.Free;
end;
Ответить с цитированием
  #8  
Старый 27.07.2011, 16:51
Ghennadiy Ghennadiy вне форума
Прохожий
 
Регистрация: 25.08.2009
Сообщения: 17
Репутация: 10
Сообщение

вот это объяснил спасибо!
не понимаю одного
m.Write(i,SizeOf(i)); - пишем в поток
m.Position:=0; - перемещаем на 0 строку
m.Read(i,SizeOf(i)); - читаем поток

если перезаписать в поток на строку 0 то тоже m.Write(i,SizeOf(i));?

зачем тогда использовать Stream.Write(S[1], Length(S));?

если нужно записать например в строку 2 то писать m.Position:=2;
в том же потоке?
Ответить с цитированием
  #9  
Старый 27.07.2011, 18:01
Аватар для DenNik
DenNik DenNik вне форума
Прохожий
 
Регистрация: 25.07.2011
Адрес: Около 300000 км от Луны
Сообщения: 25
Версия Delphi: D7 Enterprise
Репутация: 10
По умолчанию

поток состоит из байтов, а не из строк.
m.Position устанавливает указатель чтения\записи на определенную позицию в потоке (В байтах). вроде так. я особо в теме потоков не подкован. Вопрос к гуру программирования: потоки аналогичны нетипизированным файлам, так? и приемы у них похожие? Кто может уточнить, пожалуйста. самому интересно!
Ответить с цитированием
  #10  
Старый 27.07.2011, 18:15
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Цитата:
Сообщение от DenNik
поток состоит из байтов, а не из строк.
...
Кто может уточнить, пожалуйста. самому интересно!
Именно так.
Метод TStrings.LoadFromStream делает довольно сложную работу по разбиению записаных байтов на строки. Хотя с виду и всё просто.
Ответить с цитированием
  #11  
Старый 28.07.2011, 12:15
Аватар для Developer
Developer Developer вне форума
Прохожий
 
Регистрация: 01.07.2011
Адрес: Украина
Сообщения: 27
Версия Delphi: 7, 2009
Репутация: 75
По умолчанию

Цитата:
Сообщение от DenNik
...уточнить, пожалуйста. самому интересно!
В одной статье я читал, что поток лутше представлять в виде аудиокасеты на которую записываються байты и которую можно перематывать куда захочешь.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:33.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025