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

СКОРАЯ ПОМОЩЬ для ВАШЕГО КОМПЬЮТЕРА

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

ГЛАВНАЯ | ССЫЛКИ | КОНТАКТЫ | РАССЫЛКА


СКОРАЯ
 
КОМПЬЮТЕРНАЯ ПОМОЩЬ

 
Телефон мобильный
 
Телефон рабочий
(пон. - вс. с 9 до 20 ч., спросить Игоря)


  Ремонт компьютеров

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

  Диагностика неисправностей ПК

  Модернизация компьютеров и ноутбуков

  Восстановление данных

  Установка и настройка программ

  Проектирование и прокладка сетей

  Абонентское обслуживание

  Лечение вирусов

  Визитки, рекламные листовки

  Разработка ПО (программного обеспечения)

Программирование в среде Delphi 7

    Программирование в среде Delphi 7. Записная книга. Сохранение данных в файл

  Используя среду разработки приложений Delphi 7 создадим простую программу "Записная книга". В форму будем вводить данные: фамилию, имя, отчество и телефон. При нажатии на кнопку "Применить" данные будут отображаться в текстовом поле. Добавим возможность сохранения в файлы. Приступаем! Загружаем среду разработки Delphi 7.

Cреда программирования Delphi 7

  На форму бросаем компоненты Label (метка) в количестве четырёх штук. Этот компонент расположен на вкладке "Standard" палитры компонентов.

Вкладка Standard палитры компонентов, компонент Label

  В свойстве Caption меток записываем "Фамилия" - для первой, "Имя" - для второй, "Отчество" - для третьей и "Телефон" - для четвёртой. Аккуратно располагаем метки одну под другой.

Аккуратное расположение меток Label

  Напротив меток на форму бросаем компоненты "Panel" и внутрь этого компонента "Панель" ставим компонент "Edit" - строка редактирования. Оба компонента располагаются в той же вкладке "Standard"

Компоненты Panel и Edit

  Теперь нужно изменить свойства этих компонентов. Кликаем один раз на панели, после этого её свойства сразу отобразятся в окне "Инспектора объектов" - Object Inspector. Свойство Caption у панели стираем (оставляем пустым). Изменяем свойство BevelInner выбираем "bvLowered". Теперь кликаем на строку редактирования. Свойство Text выбираем "bsNone". Теперь подгоняем размеры нашего экземпляра Edit1 к размерам панели Panel1. Должно получится примерно вот так, как на рисунке.

Строка редактирования внутри панели

  Строка редактирования внутри панели - так сделано специально для того, чтобы было более красиво. Можно просто кинуть на форму строку редактирования (Edit) и этим ограничиться. Всё же свойство Text у Edit нужно оставить пустым. По умолчанию оно равно Edit1, как и имя экземпляра класса TEdit - нашего компонента "Строки редактирования". Перемещение компонента и изменение его размеров при помощи мыши не всегда удобно! Для перемещения компонента по форме или одного компонента внутри другого (как например, Edit внутри Panel) используйте сочетание клавиш "Ctrl" и клавиш курсора, а для изменения размеров используйте сочетание "Shift" + клавиши курсора. Или можно просто поставить те размеры, которые получились у меня. В свойствах Panel1 поставьте ширину Width = 185 и высоту Height = 24. Для Edit1 те же свойства: Width = 182, Height = 21. Но ещё измените смещение от левого края родительского компонента Left = 2 и смещение сверху Top = 2. Родительский компонент для Edit1 - это Panel1. Аналогично, форма Form1 - это родительский компонент (экземпляр класса) для всех компонентов брошенных на форму, она (форма) их содержит.

  Далее, чтобы процесс был быстрее, можно выделить компонент Panel (аналогично можно сделать с несколькими компонентами), потом копируем сочетанием клавиш Ctrl + C и вставляем Ctrl + V. После вставки удобно двигать компоненты при помощи сочетания Ctrl + клавиши курсора! В результате должно получится примерно так.

Компоненты на форме скопированы и вставлены

  Заходим на вкладку Additional палитры компонентов.

Вкладка Additional палитры компонентов

  Располагаем эту кнопку на форме чуть ниже последней строки редактирования Edit4.

Кнопка BitBtn

  У кнопки BitBtn меняем свойство Kind на значение bkOK. В свойстве Caption напишем "Применить". Находим компонент Memo во вкладке Standard палитры компонентов и кидаем его ещё ниже на форму. Для усиления эффекта я сначала перетащил компонент Панель (Panel) поставил свойство Caption у него пустым, потом для BevelOuter в "Инспекторе объекстов" выбрал значение bvLowered. Далее положил на панель текстовое поле - компонент Memo. Для Мемо BorderStyle поставил bsNone, а свойство Align выбрал alClient, что дало возможность растянуть Memo по всей панели! Вот что получилось.

Вставили Memo в Panel со свойством Align = alClient

  Ещё чуть ниже кладём кнопку BitBtn. В "Инспекторе объектов" в свойстве Caption пишем "Загрузить в файл". Помимо этого находим свойство Glyph, нажимаем на кнопочку с многоточием, и появляется диалоговое окно выбора графического файла. Выбираем путь: "C:\Program Files\Common Files\Borland Shared\Images\Buttons", там находим файл "filesave.bmp", выбираем его. Данная папка с файлами должна быть у Вас на компьютере, поскольку среда разработки Delphi 7 Вами установлена. Чтобы было более красиво поставим значение свойства Margin для BitBtn2 равное 10. Но у нас рисунок и надпись на кнопке слиты вместе, чтобы сделать отступ, поставьте 5 пробелов перед записью "Загрузить в файл" в свойстве Caption. Должно стать "     Загрузить в файл".

  Кликаем по форме, переходим к окну инспектора объектов и ставим "Записная книга" в свойстве Caption. Мы оформили внешний вид нашей программы. Запускаем её на выполнение (клавиша F9). Смотрим, что получается.

Оформили внешний вид программы

 В правом верхнем углу есть средняя кнопка, рядом с крестиком (закрывает программу, окно), при нажатии на неё наша форма растянется по всему экрану. Давайте уберём эту возможность для пользователя! Возвращаемся к окну "Инспектора объектов". В свойстве формы BorderStyle выбираем bsSingle. Выше расположено свойство BorderIcons, если дерево не раскрыто, нажимаем на "плюсик" и выбираем biMaximize. Эти действия деактивируют раскрытие окна программы по всему экрану и его расширение с помощью мыши. Так же для свойства Position поставим poScreenCenter, это сделает показ нашего окна при запуске программы всегда по центру экрана монитора, как бы вы его не позиционировали во время проектирования интерфейса (внешнего вида).

  Кликаем два раза по кнопке BitBtn1 c надписью "Применить". В открывшемся окне для кода между begin и end записываем следующее:

   Memo1.Lines.Add(Edit1.Text);
   Memo1.Lines.Add(Edit2.Text);
   Memo1.Lines.Add(Edit3.Text);
   Memo1.Lines.Add(Edit4.Text);

   Memo1.Lines.Add('--');

  Это есть не что иное, как часть кода описывающее действия, которые будут происходить при нажатии пользователя на кнопку. Процедура procedure TFMain.BitBtn1Click(Sender: TObject); описывает событие нажатия на кнопку. Итак, что мы здесь делаем? Memo1 - текстовое поле. Поставив точку после имени экземпляра класса TMemo мы получаем доступ к его свойствам. Нас интересует свойство Lines типа TStrings. Ставим точку и получаем доступ к свойствам и методам Lines. Нас далее интересует метод Add, который добавляет строку в текстовое поле. Вообще метод - это некоторая процедура, выполняющая определённые действия над объектом.

  Memo1.Lines.Add(Edit1.Text); - это добавление в поле того что написано в первой строке редактирования для Фамилии. Edit1.Text - это свойство которое отображается в строке редактирования (его так же можно менять на этапе проектирования интерфейса через инспектор объектов). Следующей строкой мы добавляем "Имя", потом "Отчество", "Телефон" и, для отделения от следующей записи, добавляем новую строку '--' - это наш разделитель. Любая строка пишется в апострофах, например, можно определить переменную S типа String и присвоить ей строку вот так: S = 'Строка'. Это можно сделать так:

procedure TFMain.BitBtn1Click(Sender: TObject);
Var
   S: String;
begin
   S := 'Строка';
   Memo1.Lines.Add(S);
end;

Определяется переменная с помощью ключевого слова Var. Это делается перед begin.

  Пробуем, как работает наша программа. Потом добавим ещё иконку и дадим имя программе. Напоминаю, как это сделать. Выбираем пункт меню Project -> Options (Ctrl + Shift + F11)

Выбор меню свойства проекта

  В появившемся окне на вкладке Application пишем в Title "Записная книга", выбираем иконку нажатием кнопки LoadIcon.

Свойства проекта

  Файл для иконки book.ico можно будет потом взять из архива с файлами проекта в конце статьи или скопировать этот рисунок нажатием правой клавишей мыши по нему и выбором пункта меню "Сохранить рисунок как" (название может варьироваться в зависимости от браузера).

Иконка для проекта

  Отметим, что после того как мы двойным щелчком мыши кликнули по кнопке, в "Инспекторе объектов" во вкладке Events (События) у нас появилось событие BitBtn1Click. Кликнув два раза по нему в "Инспекторе объектов" мы так же попадаем в готовый шаблон кода для нашего события. Пробуйте!

  Далее сохраняем наш проект. Перед этим свойству Name формы присвоим FMain (это главная форма!). При сохранении модулю формы присвойте соответствующее название Main.pas, а проекту - имя NoteBook.dpr. Всё должно быть чётко. По умолчанию среда Delphi 7 предлагает имена Unit1.pas и Project1.dpr для файлов модуля и проекта соответственно.

  Продолжаем! У нас в текстовом редакторе 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;". Эта процедура завершает работу программы. Сохраняем проект и тестируем программу.

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

  Архив со всеми файлами проекта и с иконкой можно скачать здесь f_d7_3.rar



  Вернуться к списку статей, посвящённых программированию в Delphi 7


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

Скорая помощь для вашего компьютера
Подписаться письмом

  

 Если Вам понравилась статья, или вы хотели бы освещения другой, интересующей Вас темы, то напишите нам. Это очень важно!



 Наверх

 Перейти к списку статей по программированию в среде Delphi 7

Свяжитесь с нами!

E-mail Тел: Телефон.        

E-mail E-mail: yerkhov@yandex.ru.


ПОЛЕЗНАЯ ИНФОРМАЦИЯ Полезная информация

  Профилактика компьютера

  Безопасность Вашего компьютера

  Если компьютер заблокирован

  Создание загрузочной флешки

  Настройка домашнего маршрутизатора

  Оптимизация операционной системы. CCleaner

  Защита операционной системы. The Cleaner 2012

  Обслуживание реестра Windows, чистка дисков. Reg Organizer

  Программирование в среде Delphi 7

  Windows XP. Оптимизация за счёт остановки ненужных служб

  Восстановление данных. Программа «Ontrack EasyRecovery Professional»

Яндекс.Метрика



© 2010 «Компьютерная помощь»
ИП ЕРХОВ ИГОРЬ СЕРГЕЕВИЧ      
ИНН 773720249223
ОГРН 308770000276132

Hosted by uCoz