Диалоги открытия и сохранения файла (компоненты TOpenDialog и TSaveDialog) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Диалоги открытия и сохранения файла (компоненты TOpenDialog и TSaveDialog)



Компонент TOpenDialog предназначен для выбора файла с целью последующего открытия.

Компонент TOpenDialog находится на вкладке Dialogs и выбирается щелчком мыши по кнопке .

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

 

 

Рис. 30. Пример диалогового окна открытия файла

 

Данный компонент обладает рядом важных свойств.

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

property FileName: WideString;

Программа может использовать данное свойство для доступа к файлу с целью читать из него данные (TOpenDialog) или записывать в него данные (TSaveDialog). В данном диалоге пользователь может ввести произвольное имя и, следовательно, указать несуществующий файл. При чтении отсутствующего файла может произойти крах программы. Чтобы избежать этого, можно воспользоваться глобальной функцией FileExists (FileName: string) логического типа, которая проверяет, существует ли файл с именем FileName или нет.

Filter – набор масок, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне.

property Filter: String;

Каждая маска состоит из двух частей: названия и шаблона, разделенных символом |. Одному названию может соответствовать несколько шаблонов. Маски отделяются друг от друга символом |. Данные маски можно устанавливать с помощью специального редактора на этапе конструирования формы или программно. Для доступа к редактору достаточно щелкнуть по кнопке в строке Filter окна инспектора объектов.

Окно редактора фильтра приведено на рис. 31.

 

 

Рис. 31. Окно редактора фильтра

 

FilterIndex – номер текущей маски. Нумерация начинается с 1.

property FilterIndex: Integer;

Title – заголовок диалогового окна.

property Title: String;

Пример.

В приведенной ниже процедуре при щелчке на кнопке Button1 отображается диалоговое окно выбора имени файла (компонент OpenDialog1), которое имеет заголовок «Выбор нужного файла», а в списке отображаются все файлы, имеющие расширение.pas. Это обеспечивается присвоением свойству FilterIndex значения 2. Открытый файл загружается в компонент Memo1.

 

procedure TForm1.Button1Click(Sender: TObject);

Var

S: string;

F: TextFile;

Begin

OpenDialog1.Filter:= ‘Все файлы (*.*) | *.* | Файлы Паскаля (*.pas) | *.pas’;

OpenDialog1.Title:= ‘Выбор нужного файла’;

OpenDialog1.FilterIndex:= 2;

if OpenDialog1.Execute and

FileExists(OpenDialog1.FileName) then

begin

AssignFile(F, OpenDialog1.FileName);

Reset(F);

Memo1.Lines.Clear;

while not EOF(F) do

Begin

ReadLn(F, S);

Memo1.Lines.Add(S);

end;

CloseFile(F);

end;

end;

Существует альтернативный вариант загрузки содержимого файла в поле Memo1:

 

if OpenDialog1.Execute and

FileExists(OpenDialog1.FileName) then

Memo1.Lines.LoadFromFile(OpenDialog1.Filename);

 

Диалог сохранения файла (компонент TSaveDialog) практически ничем не отличается от компонента TOpenDialog за исключением некоторых настроек, специфичных для процесса сохранения файла.

Компонент TSaveDialog находится на вкладке Dialogs и выбирается щелчком мыши по кнопке .

Пример.

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

Решение. На форму помещают компонент Memo, компонент OpenDialog, компонет Label и две кнопки Button.

Затем создают следующие процедуры обработки событий.

Процедура связана с событием OnCreate формы (процедура задает фильтр и очищает поле Memo1)

procedure TForm1.FormCreate(Sender: TObject);

Begin

// Определение фильтра для отбора открываемых файлов

OpenDialog1.Filter:= 'Текст|*.txt';

Memo1.Clear;

end;

 

Для кнопки Button1 («Открыть») следует прописать обработчик события OnClick.

procedure TForm1.Button1Click(Sender: TObject);

Var

FName: String;

Begin

if (OpenDialog1.Execute) and

(FileExists(OpenDialog1.FileName)) then

Begin

FName:= OpenDialog1.FileName;

Form1.Caption:= FName;

Memo1.Lines.LoadFromFile(FName)

Label1.Caption:='Количество строк= '

+IntToStr(Memo1.Lines.Count);

end;

 

Для кнопки Button2 («Закрыть») следует прописать обработчик события OnClick.

procedure TForm1.Button2Click(Sender: TObject);

Begin

Form1.Close;

end;

 

3.10. Работа со строковыми таблицами

 

Строковыми считаются те таблицы, в ячейках которых располагаются произвольные слова или текстовые строки. Для создания таких таблиц предназначен компонент TStringGrid.

Компонент TStringGrid находится на вкладке Additional и выбирается щелчком мыши по кнопке .

Таблица делится на две части – фиксированную и рабочую. Фиксированная служит для показа заголовков столбцов/рядов и для ручного управления их размерами. Обычно фиксированная часть занимает крайний левый столбец и самый верхний ряд таблицы, однако с помощью свойств FixedCols и FixedRows можно задать другое количество фиксированных столбцов и рядов (если эти свойства имеют 0, таблица не содержит фиксированной зоны). Рабочая часть – эта остальная часть таблицы. Она может содержать произвольное количество столбцов и рядов, более того, эти величины могут изменяться программно. Рабочая часть может не умещаться целиком в пределах окна компонента, в этом случае в него автоматически помещаются нужные полосы прокрутки. При прокрутке рабочей области фиксированная область не исчезает, но меняется ее содержимое – заголовки строк и рядов.

Центральным свойством компонента является Cells – двумерный массив ячеек, каждая из которых может содержать произвольный текст. Конкретная ячейка определяется парой чисел – номером столбца и номером строки (именно в такой последовательности), на пересечении которых она находится (нумерация начинается с нуля). Свойство Cells имеет тип string, поэтому программа может легко прочитать или записать содержимое нужной ячейки. Напримep:

Cells [1,1]:= 'Левая верхняя ячейка рабочей зоны';

Количество ячеек по каждому измерению хранит пара свойств ColCount (количество столбцов) и RowCount (количество рядов). Значения этих свойств и, следовательно, размеры таблицы могут меняться как на этапе разработки программы, так и в ходе ее работы, однако их значения должны быть как минимум на единицу больше соответственно значений в свойства FixedCols и FixedRows, определяющих размеры фиксированной зоны.

Основные свойства компонента приведены в табл. 11.

 

Таблица 11

Основные свойства компонента TStringGrid

Свойство Описание
property Cells[ACol, ARow: Integer]: String; Определяет содержимое ячейки с табличными координатами (ACol, ARow)
property Col: LongInt; Содержит номер столбца ячейки, имеющей фокус ввода
property ColCount: LongInt; Содержит количество столбцов таблицы
property ColWidths [Index: LongInt]: Integer; Содержит ширину столбца с индексом Index

 

Продолжение табл. 11

property FixedColor: TColor; Определяет цвет фиксированной зоны
property FixedCols: Integer; Определяет количество столбцов фиксированной зоны
property FixedRows: Integer; Определяет количество строк фиксированной зоны
property Row: LongInt; Содержит номер ряда ячейки, имеющей фокус ввода
property RowCount: LongInt; Содержит количество рядов таблицы
property RowHeights[Index: LongInt]: Integer; Содержит высоту ряда с индексом Index

 

Для компонента определен тип TGridOptions (в инспекторе объектов свойства этого множества сформированы в группу Options).

TGridOptions = set of TGridOptions;

Наиболее важные элементы множества TGridOptions имеют следующий смысл:

goRangeSelect – разрешено выделение нескольких ячеек;

goRowSizing –разрешено ручное (мышью) изменение высоты строк;

goColSizing – разрешено ручное изменение ширины рядов;

goEditing – разрешено редактирование ячейки (редактирование начинается после щелчка мыши или нажатия клавиши F2 и завершается при щелчке по другой ячейке или нажатию клавиши Enter);

goTabs – разрешено обходить ячейки клавишей Tab.

Рассмотрим пример работы с данным компонентом.

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

– ФИО;

– паспорт (серия и номер);

– дата рождения;

– адрес;

– телефон.

На экран должна выдаваться таблица примерно следующего вида (рис. 32).

 

 

Рис. 32. Пример компонента TStringGrid

 

Сначала программно зададим заголовки столбцов таблицы через обработчик события создания формы:

procedure TForm1.FormCreate(Sender: TObject);

Begin

{Создание шапки таблицы}

StringGrid1.Cells[0, 0]:= '№ п/п';

StringGrid1.Cells[1, 0]:= 'ФИО';

StringGrid1.Cells[2, 0]:= 'Паспорт';

StringGrid1.Cells[3, 0]:= 'Дата рождения';

StringGrid1.Cells[4, 0]:= 'Адрес';

StringGrid1.Cells[5, 0]:= 'Телефон';

{Задание ширины столбцов таблицы}

StringGrid1.ColWidths[0]:= 50;

StringGrid1.ColWidths[1]:= 120;

StringGrid1.ColWidths[2]:= 100;

StringGrid1.ColWidths[3]:= 90;

StringGrid1.ColWidths[4]:= 120;

StringGrid1.ColWidths[5]:= 60;

end;

 

Следует предусмотреть возможность добавления новой пустой строки по нажатию кнопки Button3 («Добавить» на рис. 32):

procedure TForm1.Button3Click(Sender: TObject);

Begin

StringGrid1.RowCount:= StringGrid1.RowCount + 1;

StringGrid1.Cells[0, StringGrid1.RowCount - 1]:=

IntToStr(StringGrid1.RowCount - 1);

end;

 

Кнопка Button1 («Сохранить» на рис. 32) служит для записи содержимого таблицы в файл:

procedure TForm1.Button1Click(Sender: TObject);

Begin

AssignFile(F, 'file.dat');

Rewrite(F);

for i:=1 to StringGrid1.RowCount - 1 do

Begin

with StringGrid1 do

Begin

z.FIO:= Cells[1, i];

z.pasp:= Cells[2, i];

z.data:= Cells[3, i];

z.adress:= Cells[4, i];

z.tel:= StrToInt(Cells[5, i]);

end;

Write(F, z);

end;

CloseFile(F);

end;

 

Кнопка Button2 («Загрузить» на рис. 32) служит для вывода в таблице содержимого файла:

procedure TForm1.Button2Click(Sender: TObject);

Begin

{Удаление старых данных из таблицы}

for i:=1 to StringGrid1.RowCount - 1 do

Begin

StringGrid1.Cells[1, i]:= '';

StringGrid1.Cells[2, i]:= '';

StringGrid1.Cells[3, i]:= '';

StringGrid1.Cells[4, i]:= '';

StringGrid1.Cells[5, i]:= '';

end;

{Удаление лишних пустых строк из таблицы}

StringGrid1.RowCount:= 2;

{Открытие файла}

AssignFile(F, 'file.dat');

Reset(F);

i:= 1;

{Добавление записей в таблицу}

while not EOF(F) do

Begin

Read(F, z);

StringGrid1.Cells[0, i]:= IntToStr(i);

StringGrid1.Cells[1, i]:= z.FIO;

StringGrid1.Cells[2, i]:= z.pasp;

StringGrid1.Cells[3, i]:= z.data;

StringGrid1.Cells[4, i]:= z.adress;

StringGrid1.Cells[5, i]:= IntToStr(z.tel);

if not EOF(F) then

Begin

i:= i+1;

StringGrid1.RowCount:=

StringGrid1.RowCount + 1;

end;

end;

end;

Замечание: оператор

StringGrid1.RowCount:= StringGrid1.RowCount + 1;

служит для добавления в таблицу новой пустой строки, в которую будут записана следующая запись.

 

Деревья и списки

 



Поделиться:


Последнее изменение этой страницы: 2017-02-05; просмотров: 291; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.5.68 (0.045 с.)