Функция сохранения в Delphi
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Функция сохранения в Delphi - 2009-04-07 13:11:06.106666
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
Есть текстовый редактор, но не знаю как написать код для сохранения файла. подскажите, как это сделать? на примере для кнопки и меню (файл/сохранить и файл/сохранить как…)
|
|
|
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;
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 13:31:16.713333
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
D. Scandal спасибо, буду пробовать.
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 13:39:59.030000
|
|
|
D. Scandal
Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
|
Надеюсь, ты в курсе, что в главную форму MainForm необходимо установить компонент TSaveDialog?! И для пункта "Сохранить" - если файл новый и без названия, нужно вызывать процедуру "Сохранить как".
|
|
|
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. значит надо просто заменить? или я не так что-то понял?
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 13:50:50.580000
|
|
|
D. Scandal
Сообщений: 1360
Оценки: 345
Присоединился: 2007-12-01 16:39:35.550000
|
Ты все правильно понял.
|
|
|
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; // добавить
что за что отвечает? если не трудно)
|
|
|
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; // заголовок окна
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 14:09:48.030000
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
спасибо, теперь хоть понятно, что да как))
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 14:15:56.340000
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
и последний вопрос, знаю, что надоел, но все же… MDIChild ActiveMDIChild TChildForm это что вообще? и можно ли это чем заменить?
|
|
|
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
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 15:00:09.590000
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
спасибо за инфу, почитал. получается что тогда, нужно создавать это окно? а если да то как?
|
|
|
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.
|
|
|
RE: Функция сохранения в Delphi - 2009-04-07 23:26:23.076666
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
меня все мучают сомнения, это нужно добавить еще одну форму к главной?
|
|
|
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);
var f: TextFile;
begin
Assign(f, fileName);
Rewrite(f);
Write(f, text);
CloseFile(f);
end; Выучите сначала язык, а потом уже компонентами лепите. Ппц.
|
|
|
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]
|
|
|
RE: Функция сохранения в Delphi - 2009-04-08 20:48:08.023333
|
|
|
QunneD
Сообщений: 833
Оценки: 0
Присоединился: 2008-11-09 20:54:38.113333
|
Вот накатал тебе самый простой и понятный пример, думаю даже полнейший дурак разбереться…
|
|
|
RE: Функция сохранения в Delphi - 2009-04-27 12:32:37.210000
|
|
|
~SATANA of LOVE~
Сообщений: 745
Оценки: 0
Присоединился: 2009-01-13 22:08:53.046666
|
всем спасибо за помощь)
|
|
|
RE: Функция сохранения в Delphi - 2010-07-13 17:27:48.186666
|
|
|
Kuzden
Сообщений: 1
Оценки: 0
Присоединился: 2010-07-13 17:14:29.983333
|
Доброго вечера. Вопрос возник такого плана : Данные (внасимые) внесённые в ComboBox (ФИО. Адркс, и т.д. с выпадающим списком), хотелось бы чтоб отображалить рядом в Memo окне. Пример: Фамилия______Алексеев Имя__________Максим Отчество_____Олегович Город ……….. Улица ………… и т.д. и при нажатии на кнопки MainMenu1 (Открыть, сохранить, сохранить как.., закрыть, выход..), данные сохранялись бы в определённую папку допустим в Worde. Заранее всем большое спасибо, действитель нужно, сам уже запутался. Помогите разобраться )))
|
|
|
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 <> '' then
if SaveDialog1.Execute then
Memo1.lines.SaveToFile(SaveDialog1.filename)
else begin
SaveToFile.execute;
Memo1.lines.SaveToFile(SaveToFile.filename);
f_name:= SaveToFile.FileName;
|
|
|
|
|