Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объект в Stream, для сохранения 
:(
    Опции темы
Rodman
Дата 16.8.2007, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



т.е. программа может сохранить компонент с объектами на нем только по текущей странице на PageControl...

я переделал процедуру в функцию чтобы она мне возвращала то что сохраняется в файл (TFileStream)... 
вот для каждой из 4 страниц я могу получить TFileStream, но вот как его сохранить в один файл так чтобы потом можно было прочитать каждый объект отдельно???

ЗЫ: что то запутали меня эти потоки.
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rodman
Дата 18.8.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Код

procedure TSimpleGraph.SaveToFile(const Filename: String):TFileStream;
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create(Filename, fmCreate or fmShareExclusive);
  try
    SaveToStream(Stream);
    Result:=Stream;
  finally
    Stream.Free;
  end;
end;


почему то не возвращает значение... после Stream.Free result тоже обнуляется!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Snowy
Дата 18.8.2007, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Rodman @  18.8.2007,  15:08 Найти цитируемый пост)
после Stream.Free result тоже обнуляется!
Ну разумеется.
Ты ж сам убил объект...
Объект один. Ссылки две.
Если убиваешь по одной ссылке, то ничего удивительного, что по второй он тоже мёртв.
PM MAIL   Вверх
Rodman
Дата 20.8.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Понял... я вышел из ситуации...

а можно как нить узнать кол-во компонентов, при чтении из файла???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Snowy
Дата 20.8.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нет, они ж не фиксированного размера.
Если только ты изначально не пропишешь это число в файл.
А так - только последовательным чтением, пока не доберёшься до конца файла.
PM MAIL   Вверх
Rodman
Дата 20.8.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



ну а например можно как нить это обозначить (в заголовке файла - не в самом имени а в самом файле)??? чтоб потом я по нему мог определить, т.к. если в файле один компонент записан - LoadStream ругается

вот модернизированная процедура
Код

function TMainForm.LoadStream(InSt, OutSt:TStream):Boolean;
var d, saveD:DWORD;
    s:String;
begin
  saveD:=d;
  OutSt.Size:=0;
  InSt.Read(d, sizeof(d));
  SetLength(s, d);//  <-тут ругается мол - "Out of memory.", а если в файле несколько компонентов проходит отлично!!!
  if(d=saveD)then //это сравнения для того чтобы выходить когда закончится список компонентов в файле (с несколькими файлами замечательно работать)
  begin
    Result:=False;
    Exit;
  end
  else
    Result:=True;
  InSt.Read(s[1], d);
  OutSt.Write(s[1], d);
  OutSt.Position:=0;
end;

как это вылечить?
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Snowy
Дата 20.8.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Rodman @  20.8.2007,  10:53 Найти цитируемый пост)
  SetLength(s, d);//  <-тут ругается мол - "Out of memory.", а если в файле несколько компонентов проходит отлично!!!  if(d=saveD)then //это сравнения для того чтобы выходить когда закончится список компонентов в файле (с несколькими файлами замечательно работать)  begin    Result:=False;    Exit;  end
Поменяй местами!
Сначала проверяй, а потом уже выделяй память, если всё нормально.
PM MAIL   Вверх
Rodman
Дата 20.8.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Цитата(Snowy @  20.8.2007,  10:01 Найти цитируемый пост)
Поменяй местами!

они получаются разные,  поэтому все проходит далее...

если d не такое как сначала значит че то считует, но блин ругается что не может прочитать...

что ему сделать?

ЗЫ:местами поменял...

Добавлено через 8 минут и 8 секунд
может как нить Except можно выловить отсюда?!

Это сообщение отредактировал(а) Rodman - 20.8.2007, 11:43
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Snowy
Дата 20.8.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Сампл выложи. 
Чего хоть делаешь-то. Непонятно.
PM MAIL   Вверх
Rodman
Дата 20.8.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



надо сделать заголовок файла и туда все записывать!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Samurai_I
Дата 20.8.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  MyFileStream := TFileStream.Create('kokojamba.tru',fmCreate,fmShareDenyNone);
  MyFileStream.WriteComponent(ListBox1);
  MyFileStream.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ReadStream : TFileStream;
 CustomListBox  : TListBox;
begin
  Randomize;
  ReadStream := TFileStream.Create('kokojamba.tru',fmOpenRead,fmShareDenyNone);
  CustomListBox := ReadStream. ReadComponent(nil) as TListBox;
  CustomListBox.Parent := Form1;
  CustomListBox. Left := CustomListBox. Left + Random(200);
  CustomListBox. Top := CustomListBox. Top + Random(200);
  ReadStream.Free;
end;


И имеем ошибку - CustomListBox не имеет ParentWindow. Про том что такая же конструкция с Кнопкой - работает отличнейшим образом. Гранды могут пояснить новичку - в чем проблема?
PM MAIL   Вверх
Snowy
Дата 20.8.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Положи его на панельку и сохраняй и читай панельку.
Контейнер сам сохранит и прочитает детей.
И парента им назначит.
Просто текстсодержащие контролы не могут иметь текст, пока не получат окно, т.к. работа идёт через сообщения.
Текст назначается в процессе чтения, а паретн позже.
Поэтому нужно назначать парента в процессе чтения.
А это возможно только, если парент сохранён вместе с компонентом.
PM MAIL   Вверх
Samurai_I
Дата 20.8.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Код

procedure TForm1.Button2Click(Sender: TObject);
begin
  MyFileStream := TFileStream.Create('kokojamba.tru',fmCreate,fmShareDenyNone);
  MyFileStream.WriteComponent(Panel1);
  MyFileStream.Free;
end;


procedure TForm1.Button3Click(Sender: TObject);
var
 ReadStream : TFileStream;
 CustomPanel  : TPanel;
begin
  Randomize;
  ReadStream := TFileStream.Create('kokojamba.tru',fmOpenRead,fmShareDenyNone);
  CustomPanel := ReadStream. ReadComponent(nil) as TPanel;
  CustomPanel.Parent := Form1;
  CustomPanel. Left := CustomPanel. Left + Random(200);
  Custompanel. Top := CustomPanel. Top + Random(200);
  ReadStream.Free;
end;




Что-то у меня бубен не так работает. Панель-то конечно копируется, но... без листбокса. Причем тасканьем по форме специально проверил, листбокс именно в панели как в контейнере лежит.
PM MAIL   Вверх
Rodman
Дата 21.8.2007, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



пытаюсь записать следующее
Код

    fs:=TFileStream.Create(MainForm.SaveDialog.FileName, fmCreate);
    try
        fs.Write(SHandle, sizeof(SHandle));//   StipjeHandle = 'SGP';
        fs.Write(SVersion, sizeof(SVersion));//SVersion = 1;                                                            <-Variable required
        fs.Write(CountSelected, sizeof(CountSelected));//кол-во записей в списке - целое          <-Variable required

вот в двух последних строках трабла, как ее вылечить?

Добавлено через 1 минуту и 13 секунд
даже приведение к строковому типу - теже траблы...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rennigth
Дата 21.8.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Rodman
SHandle, SVersion, CountSelected какой тип переменных?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1136 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.