Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 27.07.2013, 13:55   #1
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию Сохранение и загрузка форм

Здравствуйте! Использую такие функции для сохранения и загрузки форм:
Код:
procedure SaveComponentToFile(Component: TComponent; const FileName: TFileName);
var
  FileStream : TFileStream;
  MemStream : TMemoryStream;
begin
  MemStream := nil;
 
  if not Assigned(Component) then
    raise Exception.Create('Component is not assigned');
 
  FileStream := TFileStream.Create(FileName,fmCreate);
  try
    MemStream := TMemoryStream.Create;
    MemStream.WriteComponent(Component);
    MemStream.Position := 0;
    ObjectBinaryToText(MemStream, FileStream);
  finally
    MemStream.Free;
    FileStream.Free;
  end;
end;
Код:
procedure LoadComponentFromFile(Component: TComponent; const FileName: TFileName);
var
  FileStream : TFileStream;
  MemStream : TMemoryStream;
  i: Integer;
begin
  MemStream := nil;
 
  if not Assigned(Component) then
    raise Exception.Create('Component is not assigned');
 
  if FileExists(FileName) then
  begin
    FileStream := TFileStream.Create(FileName,fmOpenRead);
    try
      for i := Component.ComponentCount - 1 downto 0 do
      begin
        if Component.Components[i] is TControl then
          TControl(Component.Components[i]).Parent := nil;
        Component.Components[i].Free;
      end;
 
      MemStream := TMemoryStream.Create;
      ObjectTextToBinary(FileStream, MemStream);
      MemStream.Position := 0;
      MemStream.ReadComponent(Component);
      Application.InsertComponent(Component);
    finally
      MemStream.Free;
      FileStream.Free;
    end;
  end;
end;
Сохраняю так:
Код:
SaveComponentToFile(TTForm,'formdata.txt');
Загружаю так:
Код:
if not Assigned(TTForm) then
    TTForm := TTForm.Create(nil);
  LoadComponentFromFile(TTForm,'formdata.txt');
  TTForm.Show;
Сохраняет отлично, но при загрузке выдает ошибку "Error reading TMForm1:PixelsPerlnch Property PixelsPerlnch does not exist", помогите пожалуйста решить эту проблему.
LomoCoder вне форума   Ответить с цитированием
Старый 27.07.2013, 14:11   #2
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

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

Да и надо ли вам вообще форму сохранять? Опишите задачку, может найдутся и более простые способы.
Человек_Борща вне форума   Ответить с цитированием
Старый 27.07.2013, 14:23   #3
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Я делаю свой дизайнер форм, мне нужно что-бы форму можно было сохранять и загружать что-бы использовать ее в других проектах
LomoCoder вне форума   Ответить с цитированием
Старый 27.07.2013, 14:31   #4
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Сохраняется в файл это:
Код:
object TMForm1: TrainerForm
  Left = 217
  Top = 169
  Width = 240
  Height = 300
  PixelsPerInch = 96
  TextHeight = 13
end
Если убрать PixelsPerInch = 96 то работает
Можно как-то сделать что-бы он туда не записывался?

Последний раз редактировалось LomoCoder; 27.07.2013 в 14:34.
LomoCoder вне форума   Ответить с цитированием
Старый 27.07.2013, 15:00   #5
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

Можно, смотрите нутро VCL, и напишите аналоги исп. методов.
Хотя, я бы просто запоминал, что и с какими параметрами, и где находится на форме, лежать мои объекты.
Человек_Борща вне форума   Ответить с цитированием
Старый 27.07.2013, 15:10   #6
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

А не проще будет ли ваще программно создавать форму? Создайте форму в компиляторе, потом разукрасте, и программно создайте, не забудь показать.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума   Ответить с цитированием
Старый 27.07.2013, 16:07   #7
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

саша40, да он это уже и так делает. Дело не в этом, а в том как бы это все правильно сохранять, загружать.
Не можете ничего по делу сказать, не пишите ничего.
Человек_Борща вне форума   Ответить с цитированием
Старый 27.07.2013, 16:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
TTForm := TTForm.Create(nil);
Или у меня что-то со зрением или тут идет попытка присвоить классу объект, в то время как нужно создавать объект на основе класса?
Кстати я бы наверное лучше чуть помучался, но написал бы свой маршализатор вместо (чесно говоря, хоть и ИМХО) устаревшего LoadComponentFromFile и
SaveComponentToFile на основе INI или XML.
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 27.07.2013, 18:30   #9
LomoCoder
Пользователь
 
Регистрация: 27.07.2013
Сообщений: 47
По умолчанию

Маршализатор это слишком сильно для такого проекта
LomoCoder вне форума   Ответить с цитированием
Старый 27.07.2013, 19:46   #10
Человек_Борща
МегаМодератор
СуперМодератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,444
По умолчанию

Цитата:
но написал бы свой маршализатор вместо (чесно говоря, хоть и ИМХО) устаревшего LoadComponentFromFile и
SaveComponentToFile на основе INI или XML.
о_О. Так ими же и пользуются эти самые творцы самой IDE. Или я чего-то не понял?
Человек_Борща вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Общие сохранение форм в одном проекте Vadja-Son Общие вопросы Delphi 6 03.02.2012 15:23
Сохранение и загрузка ярлыка Marsel737 Общие вопросы Delphi 4 02.09.2010 16:03
Сохранение и загрузка. Deep-Minimal Паскаль, Turbo Pascal, PascalABC.NET 12 19.04.2010 22:15
Загрузка/сохранение рисунков Marsik Помощь студентам 20 20.11.2008 19:09
HRGN сохранение-загрузка? Comer_Jus Общие вопросы Delphi 5 21.05.2008 20:12


05:31.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.