Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Делфи 2-3 / 1. Delphi-2.doc
Скачиваний:
57
Добавлен:
30.03.2015
Размер:
486.4 Кб
Скачать

InputQuery('Введите полное имя каталога ', ‘’ , dir);

if dir[length(dir)]<>'\' then dir:=dir+'\';

{в конец строки добавляется разделитель подкаталогов}

for i:=1 to 12 do

begin

TempComponent:=

TListBox(FindComponent('ListBox'+IntToStr(i)));

Try

TempComponent.Items.SaveToFile(dir+'Месяц'+intToStr(i));

{Строки компонента ListBox сохраняются в соответствующем файле}

except on EFCreateError do begin

{класс исключений, возникающих при неудачных попытках создания файла}

// MakeDir (dir); {процедура создания каталога (смотри ниже), дожна быть описана}

ForceDirectories (dir) 2;

TempComponent.Items.SaveToFile(dir+'Месяц'+intToStr(i));

end;

end;

{Строки компонента ListBox сохраняются в соответствующем файле}

end;

end;

procedure TForm1.MakeDir(dir: string);

var d: string; k: byte;

begin

k:=pos('\',dir); {выделяем название корневого каталога из dir}

d:=copy(dir,1,k); {запоминаем в переменной d}

delete(dir,1,k);

while DirectoryExists(d) do begin {пока каталог с именем,}

k:=pos ( '\',dir) ; {указанным в переменной d, существует}

d:=d+copy(dir,1,k); {выделяем имя очередного подкаталога}

delete(dir,1,k); {из переменной dir}

end;

{в переменной d хранится имя несуществующего каталога}

CreateDir (d);

{стандартная функция создания подкаталога с именем d}

while (pos('\',dir)<>0) do begin

k:=pos('\',dir);

d:=d+copy(dir,1,k);

delete(dir,1,k);

CreateDir(d);

end;

end;

2.1.4. Запустите приложение. Убедитесь, что при вводе неправильного имени каталога происходит обработка исключительной ситуации, в результате которой программа выдает сообщение об ошибке и создается каталог с заданным именем. Чтобы исключить сообщение об ошибке, выполните командуTools|DebuggerOptions. Затем в открывшемся диалоговом окне надо выбрать страницуLanguageExceptionsи на ней выключить опциюStopOnDelphiExceptions.

Задания для самостоятельного выполнения

1. Считывание данных в блокнот. При запуске приложения страницы заполняются данными из файлов (см. методы записи и чтения в файл).

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

procedure TNoteBookF.LoadAll;

var i:Integer; TempComponent:TListBox; f:Boolean;

begin

If SelectDirectory3 ('Выберите каталог', 'd:',dir) then begin

If dir[length(dir)]<>'\' then dir:=dir+'\'; {в конец строки добавляется разделитель подкаталогов}

i:=1; f:=true;

While (i<=3) and f do begin

TempComponent:= TListBox (FindComponent ('ListBox'+ IntToStr(i)));

try

TempComponent.Items.LoadFromFile(dir+'Месяц'+IntToStr(i));

except on EFOpenError do begin

f:=false;

ShowMessage('Файлов в выбранном каталоге нет');

end

end;

inc(i);

end;

end;

end;

3. При нажатии кнопки 'Закрыть', если были внесены изменения в блокноте, появляется диалоговое окно с текстом 'Сохранить изменения?' и двумя кнопками 'Да' и 'Нет'. При нажатии на 'Да' данные сохраняются в файлах, при нажатии на 'Нет' — приложение закрывается без сохранения изменений.

procedure TNoteBookF.CloseBtnClick(Sender: TObject);

begin

If MessageDlg(‘ Сохранить изменения', mtConfirmation, [mbOK,mbCancel], 0) = mrOK

then SaveAll;

close;

end;

4. Модифицируйте код приложения так, чтобы вопрос «Сохранить изменения?» появлялся только, если данные блокнота были изменены.

5. После щелчка на системной кнопке закрытия формы (крестик в правом верхнем углу формы), форма закрывается без предупреждения о необходимости сохранить данные блокнота. Исправьте этот недостаток.4

procedure TNoteBookF.CloseBtnClick(Sender: TObject);

begin

close;

end;

procedure TNoteBookF.FormCloseQuery(Sender: TObject;

var CanClose: Boolean);

begin

If MessageDlg ('Сохранить изменения?', mtConfirmation, [mbOK,mbCancel], 0)=mrOK

then SaveAll;

end;