Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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,426
По умолчанию

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

Да и надо ли вам вообще форму сохранять? Опишите задачку, может найдутся и более простые способы.
Человек_Борща вне форума Ответить с цитированием
Старый 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,426
По умолчанию

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

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

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

Цитата:
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,426
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Общие сохранение форм в одном проекте 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 18:09
HRGN сохранение-загрузка? Comer_Jus Общие вопросы Delphi 5 21.05.2008 20:12