Как сделать сохранить в delphi

Обновлено: 08.07.2024

Delphi 7. Занятие 1_10.

Delphi работа с файлами

Сохранение результатов разработки программы.

Но всё это касается файлов самого проекта.

А как быть, если надо сохранить данные, полученные в ходе работы программы? Это могут быть числа, текст, массив, запись (о типе данных запись поговорим позднее), отдельный символ (тип данных char).

Это могут быть просто цепочки байт, описывающих, например, изображение. В этом случае говорят, что записываются блоки памяти.

Разберёмся, как это делается.

Сохранение результатов расчётов.

В файле, как и в оперативной памяти, данные хранятся в виде нулей и единиц.

При записи какого-либо типа данных они превращаются в двоичный поток и записываются на диск.

При чтении с диска происходит обратный процесс. Благодаря тому, что известен тип записанных на диск данных, двоичный поток преобразуется в конкретный тип данных.

Предположим, мы прочитали с диска последовательные 32 бита (4 байта). Если файл описан как файл целого типа, то эти 4 байта будут интерпретированы как целое число.

Если файл хранит короткие строки (пример: type sh=char[20], то есть короткая строка — это массив символов. В короткой строке не может быть больше 255 символов),то байты будут интерпретированы как 4 символа.

То есть интерпретация содержимого, записанного на диск, зависит от описанного в программе типа файла.

Файл для хранения текста.

В delphi работа с файлами несколько различается в зависимости от того, надо ли записывать в файл произвольный текст, или это будет последовательность однотипных данных.

Для работы с текстовым файлом объявляется переменная:

var vMyTextFile:TextFile;

где TextFile – предопределённый тип файла.

Свяжем переменную vMyTextFile c именем файла с помощью процедуры:

AssignFile(vMyTextFile, s);

Создадим файл процедурой:

Rewrite( vMyTextFile);

Осталось заполнить его данными.

Замечание.

Если файл с таким именем и путём доступа уже существует на диске, то он будет уничтожен и создан заново с пустым содержанием.

Запись в текстовый файл.

Рассмотрим, как осуществляется в delphi запись в файл.

Чтобы текст правильно читался из файла, необходимо, чтобы он был разбит на предложения.

Запись такого символа происходит автоматически, если использовать процедуру:

WriteLn( vMyTextFile, s1 [, … , si, … , sn]); , где si — строковая переменная.

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

Замечание.

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

Если, прочитав из файла несколько значений, возникает необходимость дописать строки в конец файла, то его надо переоткрыть процедурой Append(unit1.vFile).

Замечание.

К сожалению, текстовый файл нельзя исправлять напрямую. Нельзя, например, переписать вторую строку.

Для внесения изменений надо прочитать весь файл, отобразить его в каком либо компоненте, например memo, отредактировать, заново пересоздать файл и перезаписать текст из memo в файл.

Замечание. Закрытие программы автоматически закрывает все открытые файлы. Управлять файлами (например удалить, переименовать и так далее) можно из программы, используя предназначенные для этого процедуры и функции (об этом разговор будет позже).

Чтение из текстового файла.

Чтобы организовать в delphi чтение из файла, его надо предварительно открыть процедурой Reset.

Эта процедура устанавливает внутренний указатель файла на нулевую запись.

Открытие файла осуществляется через файловую переменную: Reset(vMyTextFile).

Далее производится считывание записей от нулевой до последней оператором ReadLn( vMyTextFile, s1); , помещённым в цикл.

(Оператор ReadLn( vMyTextFile, s1 [, … , si, … , sn]) нет смысла использовать в таком виде, так как всё рано считывается ровно одна запись. То есть значение будет занесено только в s1, остальные переменные будут пустыми.).

Поэтому достаточно записать ( vMyTextFile, s1); и использовать этот оператор в цикле, отслеживая значение функции признака конца файла EOF(vMyTextFile).

Замечание.

Пример программы работы с текстовым файлом рассмотрен в видеоматериале.

Цикл чтения строк из текстового файла.

Так как с помощью процедуры ReadLn() можно прочитать только одну строку, то необходимо организовать цикл чтения строк из файла.

Он будет длиться до тех пор, пока не будет достигнут символ конца файла EOF.

Ранее мы уже рассматривали организацию цикла с помощью оператора for.

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

Войдя в цикл, выполняются находящиеся в нём операторы. Далее проверяется условие, находящееся в операторе until. Когдафункция EOF() вернётtrue(будет достигнут конец файла), цикл завершится и будет выполнен следующий за ним оператор.

Для примера напишем программу, на главной форме которой разместим новый компонент Panel, предназначенный для группировки на нём других компонент.

Видео. Создаём форму для будущей программы.

Видео. Настраиваем свойства компонентов.

Видео. Создаём обработчики событий для записи и чтения данных из файла.

Видео. Дописываем данные в конец файла.

Заключение.

Для чтения/записи текстовый файл надо открыть, при этом указатель установится на нулевую запись.

Оператор чтения строки считывает ровно одну запись. Весь текст считывается путём организации цикла.

Подписаться на RSS рассылку

Практически у любой программы есть параметры которые нужно сохранять при закрытии программы и при следующем запуске загружать. Примером такой программы может быть стандартные программы Блокнот, Paint и многие другие. Например при закрытии прогрммы "Блокнот" сохраняется положение координаты окна программы, его размеры и другие настройки.

Как все это реализовать? Есть несколько вариантов. Можно создать файл в той же папке что и сама программа. Но тут придется реализовывать обработку на то, что программа может быть запущена не с HDD а, например, с CD. Что приведет к ошибке, так как создать файл на CD программа не сможет. Вторым вариантом является сохранение данных в реестре. Тут уже есть масса приемуществ. Не будет никаких ошибок с записью, если файл запускается с CD и так далее.

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

Приступим. Создайте новый проект. Добавьте модуль Registry в секцию Uses. Объявите глобальную переменную:

С ее помощю будем осуществлять доступ к реестру. Далее приступим к написанию процедуры сохранения (начнем именно с сохранения, так как загружать еще нечего):

Разберем, что тут написано и почему именно так. Ну первая строчка "Reg:=TRegistry.Create" это создание переменной. Последняя - освобождение. Далее указываем одну из ветвей. OpenKey - открытие указаной ветви. True - означает, что если такой ветви не существует, то она будет создана. Если бы стоял False и открываемой ветви не существовало бы, то функция бы возвратила ошибку. WriteInteger - это запись ключа реестра. Первый параметр - его имя, второй - значение.

Осталось вызвать вышенаписаную процедуру. Создаем событие формы onFormClose. Оно произойдет при закрытии формы (не обязательно на кнопку закрыть). После создания вызываем процедуру. В будет так:

Далее запускаем программу изменяем положение и закрываем. Открываем редактор реестра и проверяем (для открытия делаем: Пуск -> Выполнить -> Regedit). Теперь нужно написать процедуру загрузки этих параметров:

Тут все тоже самое, что при сохранении, но с некоторыми отличиями. ValueExists возвращает True если ключ с указанным именем в качестве параметра существует, иначе возвратит False. Это сделано для того, чтобы предотвратить ошибку если ключа не существует. Так как программа будет пытаться загрузить ключ которого нету.

Осталось только вызвать процедуру LoadSettings. Вызывать будем в событии формы onCreate:

Запускаем программу и тестируем. Аналогично можно сохранять абсолютно любые настройки. Если нужно сохранить строку (например путь к чему-либо), то вместо WriteInteger используем WriteString, а вместо ReadInteger используем ReadString.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

В предыдущем посте я рассказывал, как работать с MS Excel из Delphi через ComObj (Com объект).
В этой статье я расскажу, как подключить таблицу MS Excel через компонент ADOConnection в Delphi. Из данной статьи вы сможете узнать о способах данного подключения. Как загрузить данные из таблицы MS Excel в компонент DBGrid. Как создавать и сохранять записи в таблице MS Excel из Delphi.

И так, приступим…

Запустим Delphi и создадим новое приложение File -> New-> VCL Forms Application – Delphi.
Разместим на форме следующие компоненты:
1. Компонент TADOConnection из вкладки dbGo (ADO);
2. Компонент TADOQuery из вкладки dbGo (ADO);
3. Компонент TDataSource из вкладки Data Access;
4. Компонент TDBGrid из вкладки Data Controls;
5. И два компонента TButton из вкладки Standard.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

и сохраним ее как 1.xlsx для (MS Excel 2007) или 1.xls для (MS Excel 2003).

Затем настроим компоненты…

Начнем с компонента подключения к базе ADOConnection1. Мы будем подключаться к таблице MS Excel.
В инспекторе объектов для компонента ADOConnection1 выбираем свойство ConnectionString и вписываем туда следующую строку для MS Excel 2007:

Provider =Microsoft.ACE.OLEDB.12.0; Data Source =1.xlsx; Extended Properties ="Excel 12.0 Xml;HDR=YES";

Файл 1.xlsx должен находиться в папке с приложением.

При указании полного пути до файла:

Provider =Microsoft.ACE.OLEDB.12.0; Data Source =c:\myFolder\myExcel2007file.xlsx; Extended Properties ="Excel 12.0 Xml;HDR=YES";

Если у вас MS Excel 2003 то вписываем следующую строку:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties=Excel 8.0;

Файл 1.xls должен находиться в папке с приложением.

Также можно подключиться через мастера подключения, для этого нажимаем:

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Находим наш файл и жмем ОК.

Внимание. К сожалению такое подключение возможно только для файлов Excel сохраненных в формате Excel 97-2003 (*.xls), поэтому в моем случае выдаст ошибку.

После установки подключения убираем галочка со свойства LoginPromt, чтоб не запрашивал пароль и переходим к настройке компонента ADOQuery1.

Свойство Connection устанавливаем ADOConnection1;
Свойство SQL --> TString --> пишем запрос SELECT * FROM [Лист1$] ;
Свойство Active--> True.

Переходим к компоненту DataSource1 и устанавливаем ему свойство DataSet -- > ADOQuery1.
Переходим к компоненту DBGrid1 и устанавливаем ему свойство DataSource--> DataSource1.
После данных настроек, если вы все сделали правильно в DBGrid должны отобразиться поля вашей таблицы. Чтобы изменить размер отображаемых полей в Structure выбираем:

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Учимся работать с MS Excel через подключение ADOConnection в Delphi.

Внимание. Перед запуском на выполнение, необходимо убрать галочки у компонента ADOConnection1 -- >Connected и у компонента ADOQuery --> Active иначе будут сыпаться ошибки, типа не могу подключиться, так как подключение уже используется.

Дело движется к концу. Осталось только написать обработчики событий для кнопок (назовем их "Новая запись" и "Сохранить" соответственно). Начнем…

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Edit;
ADOQuery1.Post;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Append;
end;

И для события OnCreate формы пишем:

procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.Connected:=true;
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM [Лист1$]');
ADOQuery1.Active:=True;
end;

Сохраняем, запускаем на исполнение и видим, что с таблицами MS Excel можно работать также как и с файлами базы данных, но есть одно но, данный провайдер подключения не поддерживает удаление записей.

Создание новой формы и подключение ее к главной форме программы

Содержание

  • Условие задачи
  • Выполнение
    • 1. Запустить Embarcadero Delphi 2010. Создать проект по шаблону VCL Forms Application
    • 2. Проектирование главной формы Form1
    • 3. Добавление новой формы в проект
    • 4. Настройка вида новой формы
    • 5. Подключение формы 2 к модулю формы 1
    • 6. Вызов дочерней формы из главной формы
    • 7. Программирование событий в форме 2
    • Вывод

    Условие задачи

    Нужно к главной форме Form1 добавить новую форму Form2 в приложении.

    В главной форме Form1 :

    В новой форме Form2 :

    01_02_00_004_01r

    Рис. 1. Схема взаимодействия между формами

    Выполнение

    1. Запустить Embarcadero Delphi 2010. Создать проект по шаблону VCL Forms Application

    Подробный пример создания нового проекта по шаблону VCL Forms Application описывается здесь .

    2. Проектирование главной формы Form1

    Вынести на главную форму компоненты типа TLabel и TButton . Соответственно имена компонент будут Label1 и Button1 .

    Главная форма проекта имеет вид, изображенный на рисунке 2.

    01_02_00_004_02_

    Рис. 2. Главная форма Form1

    3. Добавление новой формы в проект

    Новая форма в проект добавляется путем вызова последовательности комманд (рис. 3):

    01_02_00_004_03_

    Рис. 3. Добавление новой формы в проект

    В результате, на экране появится новая пустая форма (рис. 4). Получить доступ к свойствам и методам (процедурам и функциям) этой формы можно с помощью имени Form2 по умолчанию.

    01_02_00_004_04_

    Рис. 4. Новосозданная форма с именем Form2

    В Object Inspector имя формы отображается в свойстве Name . По желанию можно изменить название формы.

    Сохранить новую форму в файле можно с помощью команды

    Каждая новая форма сохраняется в отдельном файле (модуле). По умолчанию Delphi предлагает имя Unit2.pas . Оставим все как есть.

    Автоматически, кроме модуля Unit2.pas , создается файл описания формы Unit2.dfm .

    • Form1 — основная форма (размещается в модуле MainForm.pas );
    • Form2 — второстепенная форма (размещается в модуле Unit2.pas ).
    4. Настройка вида новой формы

    Для настройки корректного вида новой формы ( Form2 ) выполняем следующие действия.

    По желанию можно настроить и другие свойства формы Form2 .

    После внесенных изменений и корректировки положения компонент на форме Form2 окно новой формы будет иметь приблизительно такой вид как изображено на рис. 5.

    01_02_00_004_05_

    Рис. 5. Вид дочерней формы после корректировки

    5. Подключение формы 2 к модулю формы 1

    Для того, чтобы получить результат возврата из формы 2 ( Form2 ) или иметь доступ к методам или свойствам формы 2 нужно подключить ее к главной форме.
    Это осуществляется с помощью директивы uses в начале текста модуля главной формы в разделе implementation .

    6. Вызов дочерней формы из главной формы

    Для вызова дочерней формы (Form2) программируем событие клика мышкой на кнопке « Show Form 2″.
    Листинг программного кода этого события следующий.

    Непосредственный вызов дочерней формы осуществляется с помощью функции ShowModal , возвращающей одно из двух значений (см. п. 7):

    • mrOk – означает, что в дочерней форме Form2 нажата кнопка « OK «;
    • mrNo – означает, что в дочерней форме Form2 выбрано « Cancel «.
    7. Программирование событий в форме 2

    В нашем случае программируем два события в модуле формы 2 ( Unit2.pas ):

    Листинг программного кода обработки этих событий имеет вид.

    Внешняя глобальная переменная ModalResult формы Form2 определяет поведение формы. Как только ModalResult становится равным ненулевому значению ( mrOk или mrNo ), то форма закрывается с соответствующим кодом возврата.

    В результате вызова из главной формы функции

    дочерняя форма 2 будет отображена на экране до тех пор, пока пользователь не закроет ее стандартными средствами Windows.

    Теперь можно запустить программу на выполнение и протестировать ее.

    Вывод

    В этой статье было изучено особенности подключения к главной форме программы дочерней формы. Среди рассмотренных вопросов следующие.

    Читайте также: