
- •Delphi. Визуальное программирование–2 Класс tStrings
- •Разработка программы «Блокнот» для хранения информации по месяцам года
- •Задания для самостоятельного выполнения
- •If MessageDlg ('Вы уверены, что хотите очистить?',
- •Модификация программы блокнот
- •InputQuery('Введите полное имя каталога ' , ‘’,dir);
- •InputQuery('Введите полное имя каталога ', ‘’ , dir);
- •Задания для самостоятельного выполнения
- •If SelectDirectory3 ('Выберите каталог', 'd:',dir) then begin
- •Класс tList
- •Inc (yk) ; {увеличиваем значение указателя}
- •Задание для самостоятельного выполнения
- •Исключительная ситуация
- •Методы класса Tstrings
- •Компонент ListBox
- •Методы добавления строк в компонент Delphi ListBox
- •Cвойство ItemIndex — выбранный в списке элемент
- •Свойство MultiSelect — возможность выбора одновременно более 1 элемента списка
- •Другие свойства
- •Диалоговые окна вDelphi
- •Компонент Delphi UpDown
- •Главное меню
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;