Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Скорая помощь для вашего компьютера. Записная книга. Сохранение данных в файл. Продолжение


 Компьютерная помощь

   2011-12-11 10:06 

 Выпуск No 17. Скорая помощь для вашего компьютера. Записная книга. Сохранение данных в файл. Продолжение

 

 Здравствуйте!

 Продолжим то, что начали в прошлый раз, и завершим написание программы простой записной книги!

 У нас в текстовом редакторе Memo1 есть запись "Memo1". Можно её убрать, если выбрать в "Инспекторе объектов" (предварительно кликнув мышью по редактору Memo) свойство Lines. Нажмём на кнопку с многоточием и откроется небольшой редактор текста. Там можно стереть запись "Memo1". А вообще, там можно написать любой текст и сохранить его нажатием на кнопку "Ok". Этот текст будет отображаться при запуске программы. Есть ещё способы очистить текст в компоненте Memo. При создании формы, например. Кликните 2 раза по вашей форме (по той её части, где не располагаются другие компоненты), или кликнув по ней один раз, зайдите в "Инспекторе объектов" на вкладку Events и кликните дважды в поле события OnCreate. Эффект будет тот же, для Вас откроется шаблон для кода, который будет выполняться при создании формы. Форма создаётся на лету, незаметно для глаза пользователя, в этот момент можно очистить поле Memo записав следующий код:

procedure TFMain.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
end;

 Или вместо процедуры очистки текстового поля "Memo1.Clear" можно очистить сам текст этого компонента: «Memo1.Lines.Text := ''» - это присвоение пустой строки для переменной Text имеющей строковый тип String. Знак присвоения := используется чтобы передать переменной значение, знак равно = в среде Delphi используется в логических операциях. Ниже будет рассказано как.

  Возьмём во вкладке Dialogs палитры компонентов элемент SaveDialog и положим его куда-нибудь на форму. Это невизуальный компонент и отображаться на форме он будет в виде пиктограммы.

Элемент SaveDialog палитры компонентов

  Предлагаю сделать так, чтобы в диалоговом окне сохранения файла отображались только текстовые файлы. И сохранять наши данные мы будем только в текстовом файле. Поэтому кликаем по пиктограмме компонента SaveDialog1 и переходим к свойству Filter в инспекторе объектов. Нажмём на кнопку с многоточием, запишем название фильтра и обозначим сам фильтр файлов. Фильтр для текстовых файлов (файлов с расширением txt) имеет вид *.txt.

Редактор фильтров диалогового окна

  Можно при желании указать несколько фильтров. Например, для файлов текстового типа и ещё какого-нибудь. В свойстве InitialDir указывается директория в которой будет находится элемент "Проводника Windows" в компоненте SaveDialog. Если свойство оставить пустым, то в диалоге будет выбрана произвольная директория, хранящаяся в настройках Вашей системы на данный момент. Давайте укажем текущую директорию, где расположен наш исполняемый exe-файл. Для этого на событии OnCreate формы запишем "SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName);". То есть мы присваиваем свойству InitialDir результат выполнения функции ExtractFilePath из свойства ExeName класса Application. Это свойство Application.ExeName есть полный путь файла нашего приложения, а функция ExtractFilePath возвращает из этой строки путь к приложению.

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

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
  if SaveDialog1.Execute = True then
    Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
end;

  Рассмотрим, что тут делается. Функция Execute компонента SaveDialog открывает диалоговое окно сохранения файла. Открывает в директории указанной в параметре InitialDir, и будут оттображены директории, а так же файлы, расширение которых соответствует фильтру, указанному нами в свойстве Filter рассматриваемого компонета. Функция в Delphi - это та же процедура, то есть набор определённых действий программы, но при этом функция возвращает какое-то значение определённого типа. Процедура не возвращает никаких значений. Позже будем рассматривать и самостоятельно писать процедуры и функции. Так вот, функция Execute возвращает булево (логическое) значение True, если мы выбрали имя файла и нажали на кнопку "Сохранить", и возвращает False, если файл не выбран, и мы нажали "Отмена".

  Равенство = True можно было бы не писать, а просто оставить if SaveDialog1.Execute then. Читать это условие следует так, что если мы выбрали при загрузке диалогового окна файл для сохранения, то (then) осуществляем следующие действия ... А именно сохраняем данные текстового поля Memo в выбранный нами в диалоге файл.

Диалоговое окно сохранения в файл

  Метод SaveToFile для "Memo1.Lines" позволяет сохранить содержимое поля в файл. Параметр у процедуры сохранения - имя файла с расширением. То есть то имя, которое мы ввели в диалоговом окне сохранения, плюс ещё расширение: + '.txt'.

Стоит отметить, что если при некотором условии нам нужно выполнить не одно действие, а несколько, то надо пользоваться ключевыми словами begin и end. В нашем случае этом может выглядеть так:

procedure TFMain.BitBtn2Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    Begin
      Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
      ShowMessage('Файл успешно сохранён!');
    End
   else
     ShowMessage('Сохранение файла отменено пользователем!');
end;

 Ключевое слово else говорит о том, что будет делаться, если не выполнено условие после if, то есть если SaveDialog1.Execute вернёт значение False, другими словами, если будет нажата кнопка "Отменить" в диалоговом окне сохранения файла.

  Пробуем запустить программу и посмотрим, как она работает!

  Для того, чтобы наша программа была более функциональной, добавим ещё возможность загрузки текста из файла. Для этого во вкладке Dialogs палитры компонентов выберем компонент OpenDialog и закинем его на форму. Отметим, что сразу после этого, в классе нашей формы после ключевого слова type появляется запись "OpenDialog1: TOpenDialog;" - объявление о том что нашему классу формы доступны действия над "OpenDialog1".

Элемент OpenDialog палитры компонентов

  Эти два компонента OpenDialog и SaveDialog очень похожи. Поэтому, аналогичным образом, на событии создания формы OnCreate инициализируем директорию, которая будет открываться проводником в диалоговом окне при загрузки данных из файла. Это происходит так же присвоением свойству InitialDir пути. Заметим, что этот путь у нас уже присвоен соответствующему свойству для SaveDialog. Вследствие этого в конце процедуры, перед словом end записываем "OpenDialog1.InitialDir := SaveDialog1.InitialDir;". То есть присваиваем для пути к директории открытия диалога то же значение, что и у SaveDialog1. Фильтр для расширения файлов делаем таким же! Можно это сделать там же, на OnCreate формы: "OpenDialog1.Filter := SaveDialog1.Filter;".

  Теперь создадим кнопку "Загрузить из файла" точно такую же, как и "Загрузить в файл". Напоминаю, что соответствующий компонент BitBtn расположен на вкладке Additional палитры компонентов. Проделываем те же манипуляции, что и с BitBtn1, выбираем из "C:\Program Files\Common Files\Borland Shared\Images\Buttons" файл "fileopen.bmp" и т. д. Так же можно просто выделить кнопку BitBtn1 и скопировать её (Ctrl + C и Ctrl + V), далее изменять свойства скопированной кнопки.

  На событии OnClick (двойной щелчок мыши по кнопке и открывается шаблон для кода) пишем практически то же самое:

procedure TFMain.BitBtn3Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    Begin
      Memo1.Lines.LoadFromFile(OpenDialog1.FileName + '.txt');
      ShowMessage('Файл успешно загружен!');
    End
   else
     ShowMessage('Загрузка файла отменена пользователем!');
end;

  Здесь для загрузки из файла в Memo мы используем метод LoadFromFile для "Memo1.Lines". Всё остальное по аналогии с учётом того, что вместо SaveDialog используем компонент OpenDialog.

  Давайте для усиления эффекта поставим ниже ещё одну кнопку. Загрузим в неё пиктограмму через свойство Glyph, выбрав файл "dooropen.bmp". Надпись сделаем "Выход" через свойство Caption. Два раза кликаем, и в шаблоне для кода пишем "Close;". Эта процедура завершает работу программы. Сохраняем проект и тестируем программу.

Сохраняем проект и тестируем программу

  Архив со всеми файлами проекта и с иконкой можно скачать в конце статьи перейдя по ссылке.



WWW: http://yerkhov.narod.ru/

E-mail: yerkhov@yandex.ru

Copyright (C) 2010-2011 СКОРАЯ ПОМОЩЬ для ВАШЕГО КОМПЬЮТЕРА

Перепечатка любых материалов разрешена только при сохранении авторства и размещении активной ссылки на наш сайт.

Отправляя письма, Вы соглашаетесь с тем, что они могут быть опубликованы в рассылке.

--

 С уважением к Вам, Игорь.

 

 


В избранное