Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Функция сохранения в Delphi

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Функция сохранения в Delphi
Имя
Сообщение << Старые топики   Новые топики >>
Функция сохранения в Delphi - 2009-04-07 13:11:06.106666   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
Есть текстовый редактор, но не знаю как написать код для сохранения файла.

подскажите, как это сделать? на примере для кнопки и меню (файл/сохранить и файл/сохранить как…)
Post #: 1
RE: Функция сохранения в Delphi - 2009-04-07 13:28:12.700000   
D. Scandal

Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
Сохранить:
procedure TMainForm.N4Click(Sender: TObject); begin if MDIChildCount=0 then Exit; if (ActiveMDIChild as TChildForm).Caption='НОВЫЙ' then N5Click(Sender) else begin // добавить (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile((ActiveMDIChild as TChildForm).Caption); (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить end; // добавить end;
Сохранить как:
procedure TMainForm.N5Click(Sender: TObject); begin if MDIChildCount=0 then Exit; SaveDialog1.Title:='Сохранить файл как...'; if SaveDialog1.Execute then begin (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName); (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName; (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить end; end;
Post #: 2
RE: Функция сохранения в Delphi - 2009-04-07 13:31:16.713333   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
D. Scandal  спасибо, буду пробовать.
Post #: 3
RE: Функция сохранения в Delphi - 2009-04-07 13:39:59.030000   
D. Scandal

Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
Надеюсь, ты в курсе, что в главную форму MainForm необходимо установить компонент TSaveDialog?!

И для пункта "Сохранить" - если файл новый и без названия, нужно вызывать процедуру "Сохранить как".
Post #: 4
RE: Функция сохранения в Delphi - 2009-04-07 13:48:33.106666   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
да, насчет компонента я в курсе.

вот этот код:  (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile((ActiveMDIChild as TChildForm).Caption);
здесь используется Memo1, а у меня RichEdit1. значит надо просто заменить? или я не так что-то понял?
Post #: 5
RE: Функция сохранения в Delphi - 2009-04-07 13:50:50.580000   
D. Scandal

Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
Ты все правильно понял.
Post #: 6
RE: Функция сохранения в Delphi - 2009-04-07 13:56:23.176666   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
а можно немножко подробнее по этому коду:
if MDIChildCount=0 then Exit; SaveDialog1.Title:='Сохранить файл как...'; if SaveDialog1.Execute then begin (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName); (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName; (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить что за что отвечает?
если не трудно)
Post #: 7
RE: Функция сохранения в Delphi - 2009-04-07 14:05:42.673333   
D. Scandal

Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
if MDIChildCount=0 then Exit; // если нет MDI дочерних окон, то выйти из процедуры SaveDialog1.Title:='Сохранить файл как...'; // заголовок диалогового окна сохранения файла if SaveDialog1.Execute then // если пользователь выбрал название файла begin (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName); // сохранение (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName; // заголовок окна
Post #: 8
RE: Функция сохранения в Delphi - 2009-04-07 14:09:48.030000   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
спасибо, теперь хоть понятно, что да как))
Post #: 9
RE: Функция сохранения в Delphi - 2009-04-07 14:15:56.340000   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
и последний вопрос, знаю, что надоел, но все же…
MDIChild
ActiveMDIChild
TChildForm
это что вообще? и можно ли это чем заменить?
Post #: 10
RE: Функция сохранения в Delphi - 2009-04-07 14:51:56.713333   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Гугл:
http://ru.wikipedia.org/wiki/Multiple_Document_Interface
http://sources.ru/delphi/delphi_mdi_development.shtml
Post #: 11
RE: Функция сохранения в Delphi - 2009-04-07 15:00:09.590000   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
спасибо за инфу, почитал.
получается что тогда, нужно создавать это окно? а если да то как?
Post #: 12
RE: Функция сохранения в Delphi - 2009-04-07 16:21:10.106666   
D. Scandal

Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
Так. Начинаем все сначала. По пунктам.

1. Меняем программно свойство Caption для окна ChildForm на "Новый"'. Нужна рекция на событие OnCreate.
Создаем процедуру для дочернего окна:
procedure TChildForm.FormCreate(Sender: TObject); begin Caption:='НОВЫЙ'; // Заголовок окна нового файла содержит название "НОВЫЙ" end;
2. Устанавливаем компонент TSaveDialog в форму MainForm. Фильтр в отображаемых файлах (диалоговые окон открытия и сохранения) идентичен, поэтому копиреум строку свойства Filter для компонента OpenDialog1 в аналогичное свойство для компонента SaveDialog1. И с помощью Object Inspector пишем процедуру реакции на "Сохранить как…"
procedure TMainForm.N5Click(Sender: TObject); begin if MDIChildCount=0 then Exit; // если нет MDI дочерних окон, то выйти из процедуры SaveDialog1.Title:='Сохранить файл как...'; // заголовок диалогового окна сохранения файла if SaveDialog1.Execute then // если пользователь выбрал название файла begin (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName); // сохранение (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName; // заголовок окна end; end;
ActiveMDIChild as TChildForm - позволяет получить доступ из главного окна к дочернему (активному). После сохранения файла заголовок дочернего окна содержит полный путь и название редактируемого файла.

3. Пишем процедуру для "Сохранить". Как уже и упоминала: если файл новый и без названия, нужно вызывать процедуру "Сохранить как".
procedure TMainForm.N4Click(Sender: TObject); begin if MDIChildCount=0 then Exit; // если нет MDI дочерних окон, то выйти из процедуры if (ActiveMDIChild as TChildForm).Caption='НОВЫЙ' then // если заголовок окна "НОВЫЙ", то выполнять 1, иначе выполнять 2 N5Click(Sender) // 1. Идти в процедуру "Созранить как..." else (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile((ActiveMDIChild as TChildForm).Caption); // 2. Сохранить файл с именем, указанным в заголовке end;
4. Свойство Tag. ОНо ни на что не влияет. По умолчанию значение нулевое. Используй его для флажка состояния редактирования.
Файл закрывается без запроса, если Memo1 установлен в 0. Если 1 - иначе.
OnChange для компонента Memo1:
procedure TChildForm.Memo1Change(Sender: TObject); begin Memo1.Tag:=1; // Текст изменен и подлежит запросу на сохранение end; Если нужно убрать запрос на "ручное" сохрание, то пишем:

Для "Открыть"
procedure TMainForm.N3Click(Sender: TObject); begin if OpenDialog1.Execute then begin ChildForm:=TChildForm.Create(Self); ChildForm.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); ChildForm.Caption:=OpenDialog1.FileName; ChildForm.Memo1.Tag:=0; // добавить end; end;
Для "Сохранить как"
procedure TMainForm.N5Click(Sender: TObject); begin if MDIChildCount=0 then Exit; SaveDialog1.Title:='Сохранить файл как...'; if SaveDialog1.Execute then begin (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile(SaveDialog1.FileName); (ActiveMDIChild as TChildForm).Caption:=SaveDialog1.FileName; (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить end; end;
Для "Сохранить"
procedure TMainForm.N4Click(Sender: TObject); begin if MDIChildCount=0 then Exit; if (ActiveMDIChild as TChildForm).Caption='НОВЫЙ' then N5Click(Sender) else begin // добавить (ActiveMDIChild as TChildForm).Memo1.Lines.SaveToFile((ActiveMDIChild as TChildForm).Caption); (ActiveMDIChild as TChildForm).Memo1.Tag:=0; // добавить end; // добавить end;
5. Создание процедуры OnCloseQuery для окна ChildForm:
procedure TChildForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var Res:Integer; // переменная для хранения результата выбора действия begin if Memo1.Tag=0 then // если не сохранять, то 1, иначе - 2 begin // 1: CanClose:=true; // можно закрыть окно end else begin // 2: Res:=Application.MessageBox('Вы желаете сохранить изменения?','Вопрос',MB_YESNOCANCEL + MB_ICONQUESTION); // вопрос на сохранение if Res=IDYES then // нажата кнопка "Да" begin ChildForm.BringToFront; // Расположить данное окно выше всех (сделать активным) MainForm.N4Click(Sender); // Вызвать процедуру "Сохранить" if Memo1.Tag=1 then CanClose:=false; // если пользователь все-таки не сохранил файл, то окно не закрывать end; if Res=IDNo then CanClose:=true; // если "Нет", то можно закрыть if Res=IDCANCEL then CanClose:=false; // если "Отмена", то не закрывать end; end;
В редакторе, в файле ChildUnit, подключи модуль MainUnit.

Post #: 13
RE: Функция сохранения в Delphi - 2009-04-07 23:26:23.076666   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
меня все мучают сомнения, это нужно добавить еще одну форму к главной?
Post #: 14
RE: Функция сохранения в Delphi - 2009-04-08 00:07:18.106666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
Жеееееесть. Во что превратилось сохранение текстового файла….
procedure SaveFile(const text: string; fileName: string); &nbsp; var f: TextFile; begin &nbsp; Assign(f, fileName); &nbsp; Rewrite(f); &nbsp; Write(f, text); &nbsp; CloseFile(f); end; Выучите сначала язык, а потом уже компонентами лепите. Ппц.
Post #: 15
RE: Функция сохранения в Delphi - 2009-04-08 01:45:51.310000   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Ну вот kreol дело сказал,+1,мудрости многовато,только всё-таки TSaveDialog добавить мона для удобства:
if (SaveDialog1.Execute) then begin Assign(f,SaveDialog1. FileName); Rewrite(f); Write(f, text); CloseFile(f); end else ShowMessage('Файл не выбран!'); Просто выше ответ на вопрос "как навернуть в проект 2ю форму+кучу интерфейса и сделать сохранение"….впечатляет[sm=ay.gif]
Post #: 16
RE: Функция сохранения в Delphi - 2009-04-08 20:48:08.023333   
QunneD

Сообщений: 833
Оценки: 0
Присоединился: 2008-11-09 20:54:38.113333
Вот накатал тебе самый простой и понятный пример, думаю даже полнейший дурак разбереться…
Post #: 17
RE: Функция сохранения в Delphi - 2009-04-27 12:32:37.210000   
~SATANA of LOVE~

Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
всем спасибо за помощь)
Post #: 18
RE: Функция сохранения в Delphi - 2010-07-13 17:27:48.186666   
Kuzden

Сообщений: 1
Оценки: 0
Присоединился: 2010-07-13 17:14:29.983333
Доброго вечера. Вопрос возник такого плана : Данные (внасимые) внесённые в ComboBox (ФИО. Адркс, и т.д. с выпадающим списком), хотелось бы чтоб отображалить рядом в Memo окне. Пример:
Фамилия______Алексеев
Имя__________Максим
Отчество_____Олегович
Город ………..
Улица ………… и т.д. и при нажатии на кнопки MainMenu1 (Открыть, сохранить, сохранить как.., закрыть, выход..), данные сохранялись бы в определённую папку допустим в Worde.
Заранее всем большое спасибо, действитель нужно, сам уже запутался. Помогите разобраться )))
Post #: 19
RE: Функция сохранения в Delphi - 2010-07-15 11:41:45.223333   
Fairhawk

Сообщений: 102
Оценки: 0
Присоединился: 2010-05-25 21:10:59.193333
var f_name: string; ... //сохранить как SaveToFile.execute; if SaveDialog1.Execute then Memo1.lines.SaveToFile(SaveDialog1.filename); f_name:= SaveDialog1.FileName; //сохранить if f_name &lt;&gt; '' then if SaveDialog1.Execute then Memo1.lines.SaveToFile(SaveDialog1.filename) else begin SaveToFile.execute; Memo1.lines.SaveToFile(SaveToFile.filename); f_name:= SaveToFile.FileName;
Post #: 20
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Функция сохранения в Delphi







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.