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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полное сохранение формы после компиляции, сохранить в файл внесенные изменения 
:(
    Опции темы
rubyzzz
Дата 25.2.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребят, помогите!!!!
Пишу картотеку для косметолога. Создала форму все как ей удобно. Вносит изменения, а потом по каждому клиенту надо внесенные данные сохранить, чтобы потом можно было просматривать и редактировать. Нкак не получается придумать как сохранить в запущенном состоянии все данные формы. Пыталась сохранить все в текствый файл, а потом от туда загружать, такая ерунда получается, кто что мне может посоветовать? Заранее спасибо.


Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  1.JPG 80,56 Kb
PM MAIL   Вверх
Alexeis
Дата 25.2.2008, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
rubyzzz
Дата 26.2.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пытяюсь разобраться с предложенным Вами решением... Возник вопрос: чтобы сохранялись внесенные пользователем изменения необходимо в Options прописывать все данные?
Код

  published
    property DateTime: TDateTime read FDateTime write FDateTime;
    {* данные типа дата-время }
    property MyStr: string read FMyStr write FMyStr;
    {* данные типа строка }


Т.е. у меня на форме ести и комбобоксы и таблицы, ну в общем как на картинке. Я вроде все прописала как у Вас в примере, но никакого результата нет. Вместо сщбытия нажатия кнопки я использовала выбор пункта меню "сохранить", нажимаю и нчего...
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ExtCtrls, Grids;

type
   TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ComboBox3: TComboBox;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Edit2: TEdit;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    RadioGroup1: TRadioGroup;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    CheckBox9: TCheckBox;
    CheckBox10: TCheckBox;
    CheckBox11: TCheckBox;
    Label9: TLabel;
    Memo1: TMemo;
    Label10: TLabel;
    Memo3: TMemo;
    RadioGroup2: TRadioGroup;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Label11: TLabel;
    Edit3: TEdit;
    RadioGroup3: TRadioGroup;
    CheckBox12: TCheckBox;
    CheckBox13: TCheckBox;
    CheckBox14: TCheckBox;
    CheckBox15: TCheckBox;
    ComboBox4: TComboBox;
    ComboBox5: TComboBox;
    ComboBox6: TComboBox;
    ComboBox7: TComboBox;
    Label12: TLabel;
    Memo2: TMemo;
    RadioGroup4: TRadioGroup;
    CheckBox16: TCheckBox;
    CheckBox17: TCheckBox;
    CheckBox18: TCheckBox;
    CheckBox19: TCheckBox;
    ComboBox8: TComboBox;
    ComboBox9: TComboBox;
    ComboBox10: TComboBox;
    ComboBox11: TComboBox;
    Label13: TLabel;
    Memo4: TMemo;
    Label14: TLabel;
    Memo5: TMemo;
    StringGrid2: TStringGrid;
    Label15: TLabel;
    Label16: TLabel;
    StringGrid1: TStringGrid;
    procedure N7Click(Sender: TObject);{выход}
    procedure N2Click(Sender: TObject); {новая анкета}
    procedure FormCreate(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);{заполнение комбо годами рождения
    и вычисление возраста анкетируемого}
    procedure FormDestroy(Sender: TObject);
    {* Деструктор. Уничтожает объекты с настройками }
    procedure N3Click(Sender: TObject);

  private
    procedure ApplyOptions;
    {* Отображает настройки }
  end;




var
  Form1: TForm1;

implementation

uses Options;

{$R *.dfm}

procedure TForm1.ApplyOptions;
begin
  Label1.Caption := DateTimeToStr(Opt.MainOptions.DateTime);
  Edit1.Text := Opt.MainOptions.MyStr;
end;

{Выход}
procedure TForm1.N7Click(Sender: TObject);
begin
Close();
end;

procedure TForm1.N2Click(Sender: TObject);  {очистка элементов формы}
var
i,j:integer;
begin
Edit1.Text:='';Edit2.Text:='';Edit3.Text:='';
form1.CheckBox1.Checked:=false;form1.CheckBox2.Checked:=false;form1.CheckBox3.Checked:=false;
form1.CheckBox4.Checked:=false;form1.CheckBox5.Checked:=false;form1.CheckBox6.Checked:=false;
form1.CheckBox7.Checked:=false;form1.CheckBox8.Checked:=false;form1.CheckBox9.Checked:=false;
form1.CheckBox10.Checked:=false;form1.CheckBox11.Checked:=false;form1.CheckBox12.Checked:=false;
form1.CheckBox13.Checked:=false;form1.CheckBox14.Checked:=false;form1.CheckBox15.Checked:=false;
form1.CheckBox16.Checked:=false;form1.CheckBox17.Checked:=false;form1.CheckBox18.Checked:=false;
form1.CheckBox19.Checked:=false;


form1.ComboBox11.Text:='';form1.ComboBox10.Text:='';form1.ComboBox9.Text:='';
form1.ComboBox8.Text:='';form1.ComboBox7.Text:='';form1.ComboBox6.Text:='';
form1.ComboBox5.Text:='';form1.ComboBox4.Text:='';form1.ComboBox3.Text:='';
form1.ComboBox2.Text:='';form1.ComboBox1.Text:='';

form1.Memo5.Text:='';form1.Memo4.Text:='';form1.Memo3.Text:='';
form1.Memo2.Text:='';form1.Memo1.Text:='';

for i:=0 to 3 do begin
for j:=1 to 1000 do begin
form1.StringGrid2.Cells[j,i]:='';form1.StringGrid1.Cells[j,i]:='';
end;end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Opt.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
j,l:integer;

begin
  Opt := TAllOptions.Create(Self);
  {* Теперь настройки создаем здесь, т.к. MainFormOptions требуют
     существования нашей формы.}
  ApplyOptions;

for j:=0 to 100 do begin   {заполнение комбо для года рождения}
l:=1940+j;
form1.ComboBox3.Items[j]:=inttostr(l);
end;

form1.StringGrid1.Cells[0,0]:='Дата посещения';   {заполнение заголовков таблиц}
form1.StringGrid1.Cells[1,0]:='Косметика';
form1.StringGrid1.Cells[2,0]:='Рекомендации';
form1.StringGrid1.Cells[3,0]:='Результат';

form1.StringGrid2.Cells[0,0]:='Рекомендации';
form1.StringGrid2.Cells[1,0]:='Дата покупки';
form1.StringGrid2.Cells[2,0]:='Косметика';
form1.StringGrid2.Cells[3,0]:='Результат';

end;
procedure TForm1.ComboBox3Change(Sender: TObject);     {вычисление возраста анкетируемого на сегодняшнюю дату}
var
g1,m1,d1:integer;
g,m,d:Word;Present: TDateTime;
begin
Present:= Now;
DecodeDate(Present, g, m,d);
g1:=strtoint(form1.ComboBox3.Text);
m1:=strtoint(form1.ComboBox2.Text);
d1:=strtoint(form1.ComboBox1.Text);
if g1>g then showmessage('Ошибка ввода');
if (g1<g) and (m1<m) then form1.Label7.Caption:=inttostr(g-g1);
if (g1<g) and (m1>m) then form1.Label7.Caption:=inttostr(g-g1-1);
if (g1<g) and (m1=m) and (d1<d) then form1.Label7.Caption:=inttostr(g-g1);
if (g1<g) and (m1=m) and (d1>d) then form1.Label7.Caption:=inttostr(g-g1-1);
end;


procedure TForm1.N3Click(Sender: TObject);      {Сохранить}
begin
Opt.MainOptions.DateTime := now;
  Opt.MainOptions.MyStr := Edit1.Text;
  ApplyOptions;
end;

end.

И еще, можно ли с помощью предложенного Вами способа сохранять форму в файл с именем, задаваемым пользователем, чтобы потом его можно было открыть? Я ранее для тектовых файлов использовала такой текст открытия файла
Код

if form1.OpenDialog1.Execute then begin
form3.memo1.Lines.LoadFromFile(form1.opendialog1.FileName);

PM MAIL   Вверх
lukas
Дата 26.2.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да кстати неплохой способ хранить форму в файле, если ресурсов не жалко..  smile 


Код

// записать форму в файл...
procedure WriteDB(FRM: TForm; FName: String);
  Var
  MEM: TMemoryStream;
begin
Mem := TMemoryStream.Create;
Mem.WriteComponent(FRM);
Mem.SaveToFile(FName);
Mem.Free;
end;

// прочитать форму из файла...
procedure ReadDB(FRM: TForm; FName: String);
   Var
   MEM: TMemoryStream;
begin
Mem := TMemoryStream.Create;
Mem.LoadFromFile(FRM);
Mem.Position := 0;
Mem.ReadComponent(FRM);
Mem.Free;
end;




Это сообщение отредактировал(а) lukas - 26.2.2008, 17:42


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
rubyzzz
Дата 27.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Наверное в этой строке опечатка?
Код

Mem.LoadFromFile(FRM);

Надо так написать?
Код

Mem.LoadFromFile(FName);

Я немного адаптировала Ваш код под свою программу, я делала чтобы как в Windows высвечивался стандартный диалог сохранения и просмотра, но при чтении из файла возникает ошибка:
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EComponentError with message 'A component named Label1 already exists'. Process stopped. Use Step or Run to continue.
---------------------------

Никак не могу понять на что он ругается. (Я хотела бы чтобы сохраненные ранее параметры формы загружались на данную форму или на другую) У меня получились две такие процедуры
Код

procedure TForm1.N5Click(Sender: TObject);{процедура чтения формы}
Var
Mem: TMemoryStream;
begin
if form1.OpenDialog1.Execute then {исли опен диалог выбран то}
begin
Mem := TMemoryStream.Create;
Mem.LoadFromFile(Form1.OpenDialog1.FileName);{имя файла выбранного пользователем}
Mem.Position := 0;
Mem.ReadComponent(Form1);{форма, параметры которой были сохранены}
Mem.Free;
end;
end;

procedure TForm1.N4Click(Sender: TObject);{сохранение формы}
Var
MEM: TMemoryStream;
begin
if form1.savedialog1.Execute then{если сейв диалог выбран то}
begin
Mem := TMemoryStream.Create;
Mem.WriteComponent(Form1);
Mem.SaveToFile(Form1.SaveDialog1.FileName+'.sav');{сораняем с выбранным пользователем имеам и расширением .sav}
Mem.Free;
end;
 
Что не так я поняла в Вашем коде?

PM MAIL   Вверх
Denchik
Дата 28.2.2008, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Присоединяюсь к вопросу с такой строны 
мне бы все что на конкретной панели в / из файл ....
???
PM MAIL   Вверх
lukas
Дата 28.2.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



просто компоненты на форме в момент сохранения должны быть теми же что и в момент загрузки, т.е. те же имена компонентов и они должны сущ. на форме... Думаю лучше использовать что-то другое, например типизированные файлы или еще что нибудь.... в иннете много исходников для построения плоских баз данных...

Добавлено через 1 минуту и 26 секунд
P.S. Можно таким образом сохранять любой компонент, необязательно только формы...

Код

Mem.ReadComponent(// здесь может быть любой TComponent)



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
rubyzzz
Дата 28.2.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну чтобы загрузились все кмпаненты формы надо каждый прописывать?
PM MAIL   Вверх
Denchik
Дата 29.2.2008, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может попробовать в XML?
типа узел с именем клиента 
и на него навещать в цикле все свойства ...

попробую на днях такой вариант


PM MAIL   Вверх
rubyzzz
Дата 29.2.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Mem.ReadComponent(Form1);
Mem.ReadComponent(Label1);

и т.д.?
PM MAIL   Вверх
lukas
Дата 29.2.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ага... ну прям... лучше не загружать себя головой, а как подсказали найти другой способ для сохранения информации в файл... например тот XML, можно сделать базу данных на основе XML... вкладка Data Access


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Denchik
Дата 29.2.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Заходи ко мне 
http://forum.vingrad.ru/forum/s/42ce6c81a3...pic-198296.html

Я когда код доделаю 
скину тебе 
как сохранять в XML комопненты с панели

Это сообщение отредактировал(а) Denchik - 29.2.2008, 18:58
PM MAIL   Вверх
Данкинг
Дата 29.2.2008, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



А почему нельзя в БД сохранять? Или я чего-то не догоняю? smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
lukas
Дата 29.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не нельзя а нужна... БД, а не сохранять Компоненты в файл...  smile 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
Denchik
Дата 1.3.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чего, в XML прикольно выходит  smile 

Только код у меня слабый
обработку свойств для каждого типа компонентов отдельно делаю

Зато потом нажал кнопку - все в файл скинуло 
сделал Combobbox - выбирай нужный файл и тд ...

Это сообщение отредактировал(а) Denchik - 1.3.2008, 16:24
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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