РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В. Лабораторная работа № 5 Блокнот Класс TStrings содержит достаточно много свойств и методов для работы со строками. Создадим программу “Блокнот” с использованием классов – потомков TStrings. Блокнот будет содержать 8 страничек, соответствующих первым буквам записи (АБВ, ГДЕЖ, и т.д.). Создайте новое приложение в среде Delphi. Измените заголовок формы на “Блокнот”. Поместите на форму компонент NoteBook (блокнот) со страницы Win3.1 палитры компонентов. Создадим страницы компонента NoteBook, используя свойство Pages (страницы) в инспекторе объектов. При выборе этого свойства, на экране появится диалоговое окно. Создайте в нём список страниц (для этого воспользуйтесь кнопкой Add диалогового окна). После того, как список создан, нажмите ни кнопку Close. Поместите компонент TabSet (список закладок) со страницы Win3.1 под компонентом NoteBook. Сделайте эти компоненты одинаковой ширины. Положим на каждую страницу компонента NoteBook компонент ListBox (окно списка) для размещения записей на каждой странице. Для этого выполните действия: 1. У компонента NoteBook выберите свойство ActivePage (активная страница) и установите значение равное ‘АБВ’. В палитре компонентов на странице Standard выберите компонент ListBox и поместите в компонент NoteBook. 2. Повторите те же действия для всех остальных страниц NoteBook, изменяя свойство ActivePage. 3. Выберите все 8 компонентов ListBox с помощью Active TreeView (окно, расположенное выше окна инспектора объектов) и установите для них свойство Align в alClient. Итак, сейчас для каждой страницы блокнота существует свой компонент ListBox: для АБВ – ListBox1, для ГДЕЖ – ListBox2 и т. д. В левой части формы поместим компоненты, позволяющие вводить информацию на страницы блокнота. Со страницы Standard палитры компонентов выберите компонент Panel, на который положите один компонент Label, один компонент Edit и три компонента Button. Установите свойства компонентов следующим образом: Компонент Panel Label Edit Button1 Button2 Button3 Свойство Caption Caption Name Text Name Caption Name Caption Name Caption Значение ‘Введите сообщение’ RecordEdt AddBtn Добавить ChangeBtn Изменить DeleteBtn Удалить Поместите еще 2 компонента Button в правой нижней части формы и измените свойства следующим образом: Компонент Button1 Свойство Name Значение ClearBtn РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В. Button2 Caption Name Caption Очистить CloseBtn Закрыть В результате форма должна выглядеть так. Далее необходимо сохранить проект. Для этого создайте каталог NoteBook. Сохраните в нём файл модуля под именем MainF.pas, файл проекта - NoteBook.Dpr. Перейдём к написанию кода. Во-первых, необходимо закладки в TabSet сделать доступными и синхронизировать их с блокнотом. Для этого воспользуемся свойством Tabs (закладки) компонента TabSet, которое представляет список имен закладок. В нашем примере список закладок соответствует списку страниц (Pages) блокнота. Создайте следующий обработчик события: Procedure TForm1.FormCreate(Sender: TObject); Begin TabSet1.Tabs:=NoteBook1.Pages; {копируем содержимое свойства Pages компонента NoteBook в свойство Tabs компонента TabSet} TabSet1.TabIndex:=NoteBook1.PageIndex; {Независимо от того, какая страница блокнота активна во время проектирования (свойство ActivePage) будет выбрана соответствующая этой странице закладка} End; Запустите проект. Далее создадим обработчик события OnClick для кнопки ‘Добавить’, в котором будем помещать строки (компонент Edit) на страницы блокнота. Для операций со строками у компонента ListBox имеется свойство Items класса TStrings. Для того чтобы добавить строку, воспользуемся свойством Add этого класса. Обработчик события при этом может выглядеть следующим образом: procedure TForm1.AddBtnClick(Sender: TObject); Begin If RecordEdt.Text <>'' Then Begin {Для того чтобы поместить запись на нужную страницу блокнота выбираем компонент ListBox по номеру страницы блокнота} Case NoteBook1.PageIndex Of 0: ListBox1.Items.Add(RecordEdt.Text); 1: ListBox2.Items.Add(RecordEdt.Text); 2: ListBox3.Items.Add(RecordEdt.Text); 3: ListBox4.Items.Add(RecordEdt.Text); 4: ListBox5.Items.Add(RecordEdt.Text); 5: ListBox6.Items.Add(RecordEdt.Text); 6: ListBox7.Items.Add(RecordEdt.Text); 7: ListBox8.Items.Add(RecordEdt.Text); 8: ListBox9.Items.Add(RecordEdt.Text); 9: ListBox10.Items.Add(RecordEdt.Text); 10: ListBox11.Items.Add(RecordEdt.Text); 11: ListBox12.Items.Add(RecordEdt.Text); End; RecordEdt.Text:=''; {введенный текст затираем} End; End; РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В. Процедура получилась довольно громоздкой. Опишем её по-другому. Для этого нам придётся воспользоваться функцией FindComponent (‘<имя компонента>’), которая возвращает имя компонента из списка компонент с заданным именем. Новый обработчик события: Procedure TForm1.AddBtnClick(Sender: TObject); Var TempComponent: TListBox; {введем вспомогательную переменную} Begin TempComponent:=TListBox(FindComponent('ListBox'+IntToStr(Notebook1.PageInd ex+1))); {TListBox(<компонент>) используется для преобразования к типу TListBox} If RecordEdt.Text<>'' Then TempComponent.Items.Add(RecordEdt.Text); RecordEdt.Text:=''; End; Запустите проект. Все строки у вас записываются только на страницу “АБВ”. Это происходит потому, что закладки не синхронизированы со страницами блокнота, т.е. при выборе закладки в блокноте не отображается соответствующая страница. Исправить это нетрудно. procedure TForm1.TabSet1Click(Sender: TObject); begin NoteBook1.PageIndex:=TabSet1.TabIndex; end; Запустите проект. Задания по доработке приложения «Блокнот» 1. Написать код программы реагирования нажатия на кнопки ‘Изменить’, ’Удалить’, ’Очистить’ (для этого воспользуйтесь свойствами Items и ItemIndex компонента ListBox). 2. Модифицировать программу следующим образом: при выборе записи на странице блокнота соответствующая запись отображается в окне редактирования. при удалении записи в окне редактирования отображается следующая запись станицы блокнота. добавление записи из окна редактирования происходит при нажатии клавиши ввода 3. При повторном запуске программы данные, введенные в предыдущем сеансе, не сохраняются. Напишем процедуру, в которой все странички блокнота будут сохраняться в отдельных файлах на диске C. При нажатии на кнопку ‘Закрыть’, если были внесены изменения в блокноте, появляется диалоговое окно с текстом ‘Сохранить изменения?’ и двумя кнопками ‘Yes’ и ‘No’. При нажатии на ‘Yes’, данные сохраняются в файлах, при нажатии на ‘No’ - приложение закрывается без сохранения изменений. Procedure SaveAll; Var i: Integer; TempComponent: TListBox; Begin With Form1 Do For i:=0 To 11 Do Begin NoteBook1.PageIndex:=i; TempComponent:=TListBox(FindComponent('ListBox'+IntToStr(i+1))); TempComponent.Items.SaveToFile('b:\Page'+intToStr(i+1)); {Строки компонента ListBox сохраняются в соответствующем файле} End;End; Изменить программу так, чтобы при запуске страницы блокнота могли загружаться из файлов. 4. РГГУ, ПИ-21. 2009-2010 уч.г. преподаватель: Утёмов В.В. Исследуйте компонент DirectoryListBox (co страницы Win3.1) и модифицируйте программу так, чтобы можно было выбрать директорий, из которого считывать файлы (в который записывать файлы). 5.