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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2010, 19:30   #1
Serega123
Пользователь
 
Регистрация: 03.06.2008
Сообщений: 10
По умолчанию Некорректная загрузка формы из файла

Написал программу для строительных расчетов (типа калькулятора).
После выполнения расчетов, расчеты можно сохранить, я храню всю форму в файле и загружаю его, сохраняется вроде нормально... правда места очень много занимает, но это пока не проблема.
Проблема вот в чем: Первый раз форма загружается нормально, в следущие запуски открывается модальное окно, старое не прячется. Как сделать так чтобы загружалась сохраненная форма, а вызывающая форма пряталась ....
Вот мой код:
Код:
procedure TForm2.N3Click(Sender: TObject);
var
  RunTimeForm:TForm;
begin
  RunTimeForm:=TForm2.CreateNew(Self);
  with RunTimeForm do try
    if OpenDialog1.Execute then
    begin
      ReadFormProperties(OpenDialog1.FileName, RunTimeForm);
      Form2.Visible:=false;
      ShowModal;
    end;
  finally
    RunTimeForm.Free;
  end;
end;

procedure TForm2.N4Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    WriteFormProperties(OpenDialog1.FileName, Self);
    Form2.Visible:=false;
    ShowModal;
  end;
end;

procedure TForm2.ReadFormProperties(DfmName: String; Form: TComponent);
var
  FileStream:TFileStream;
  BinStream: TMemoryStream;
begin
  FileStream := TFileStream.Create(DfmName, fmOpenRead);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(FileStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      BinStream.ReadComponent(Form);
    finally
      BinStream.Free;
    end;
  finally
    FileStream.Free;
  end;
end;
procedure TForm2.WriteFormProperties(DfmName: String; Form: TComponent);
var
  BinStream:TMemoryStream;
  FileStream: TFileStream;
begin
  BinStream := TMemoryStream.Create;
  try
    FileStream := TFileStream.Create(DfmName, fmOpenWrite or fmCreate);
    try
      BinStream.WriteComponent(Form);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, FileStream);
    finally
      FileStream.Free;
    end;
  finally
    BinStream.Free
  end;
end;
Serega123 вне форума Ответить с цитированием
Старый 12.04.2010, 20:02   #2
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от Serega123 Посмотреть сообщение
Написал программу для строительных расчетов (типа калькулятора).
После выполнения расчетов, расчеты можно сохранить, я храню всю форму в файле и загружаю его, сохраняется вроде нормально... правда места очень много занимает, но это пока не проблема.
Проблема вот в чем: Первый раз форма загружается нормально, в следущие запуски открывается модальное окно, старое не прячется. Как сделать так чтобы загружалась сохраненная форма, а вызывающая форма пряталась ....
Вот мой код:
Код:
procedure TForm2.N3Click(Sender: TObject);
var
  RunTimeForm:TForm;
begin
  RunTimeForm:=TForm2.CreateNew(Self);
  with RunTimeForm do try
    if OpenDialog1.Execute then
    begin
      ReadFormProperties(OpenDialog1.FileName, RunTimeForm);
      Form2.Visible:=false;
      ShowModal;
    end;
  finally
    RunTimeForm.Free;
  end;
end;

procedure TForm2.N4Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    WriteFormProperties(OpenDialog1.FileName, Self);
    Form2.Visible:=false;
    ShowModal;
  end;
end;

procedure TForm2.ReadFormProperties(DfmName: String; Form: TComponent);
var
  FileStream:TFileStream;
  BinStream: TMemoryStream;
begin
  FileStream := TFileStream.Create(DfmName, fmOpenRead);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(FileStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      BinStream.ReadComponent(Form);
    finally
      BinStream.Free;
    end;
  finally
    FileStream.Free;
  end;
end;
procedure TForm2.WriteFormProperties(DfmName: String; Form: TComponent);
var
  BinStream:TMemoryStream;
  FileStream: TFileStream;
begin
  BinStream := TMemoryStream.Create;
  try
    FileStream := TFileStream.Create(DfmName, fmOpenWrite or fmCreate);
    try
      BinStream.WriteComponent(Form);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, FileStream);
    finally
      FileStream.Free;
    end;
  finally
    BinStream.Free
  end;
end;
Ti sahroneaeshi svoistva adnovo formu a chitaeshi v druguiu, elsi ne ashibaiusy
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 12.04.2010, 20:44   #3
Serega123
Пользователь
 
Регистрация: 03.06.2008
Сообщений: 10
По умолчанию

procedure TForm2.N4Click - сохранение Self в файл OpenDialog1.FileName
procedure TForm2.N3Click - открытие файла OpenDialog1.FileName и запись значений в форму RunTimeForm, которая сейчас задается как TForm2.CreateNew(Self). т.е. по идее мы создаем новую форму, а старую никуда не деваем, и никак у меня не получается её убрать, Visible, Close, Hide не действуют, может кто знает как её спрятать, еще раз скажу работает корректно, но остается ненужное старое окно ....
Serega123 вне форума Ответить с цитированием
Старый 12.04.2010, 20:47   #4
Serega123
Пользователь
 
Регистрация: 03.06.2008
Сообщений: 10
По умолчанию

И сохраняет также ... один раз сохраняет, апотом умирает ... программа, пишет cannot make a visible window modal, на форумах смотрел поиском, пишут надо перед ShowModal прописывать Visible:=false, но что-то не помогает ...
Serega123 вне форума Ответить с цитированием
Старый 12.04.2010, 21:00   #5
bitSoft
Programming...
Форумчанин
 
Аватар для bitSoft
 
Регистрация: 13.03.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от Serega123 Посмотреть сообщение
И сохраняет также ... один раз сохраняет, апотом умирает ... программа, пишет cannot make a visible window modal, на форумах смотрел поиском, пишут надо перед ShowModal прописывать Visible:=false, но что-то не помогает ...
eli ti zdelal visible := false to tebe ashibka potomushto ti vizivaeshi ShowModal, nu zdelai visible := true;
Код:
With TProgrammersForum.Create do  AddNewTopic('Title','Content...');
bitSoft вне форума Ответить с цитированием
Старый 14.04.2010, 15:32   #6
Serega123
Пользователь
 
Регистрация: 03.06.2008
Сообщений: 10
По умолчанию

Перепробовал всякие комбинации true/false, ничего не выходит, а загрузку/сохранение очень надо сделать ... может как-то по-другому можно сделать сохранение формы (или всей информации с формы) в файл и потом считывать ... ? Подскажите, пожалуйста.
Serega123 вне форума Ответить с цитированием
Старый 14.04.2010, 16:10   #7
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

попробуй использовать бд... и таблицы для хранения информации....
maLoy*508 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка файла без формы обратной связи ... master3763 PHP 10 04.01.2010 00:54
Проблема такова: язык:Delphi7; сохранения файла; загрузка файла в String Grid lightdevil Общие вопросы Delphi 3 06.03.2009 23:10
загрузка из файла RAVAL)) Общие вопросы Delphi 2 04.03.2009 12:48
Загрузка из файла. (*_*) Общие вопросы C/C++ 2 28.02.2009 22:16
Загрузка содержания формы из базы Квэнди БД в Delphi 8 03.05.2007 13:43