
- •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
- •Главное меню
Delphi. Визуальное программирование–2 Класс tStrings
Очень часто при создании приложений необходимо отображать на экране не одну строку, а несколько. В Delphi для этого используются такие компоненты, как TComboBox (комбинированный список), TListBox (простой список – список строк), TRichEdit (средство редактирования текстов, позволяющее работать с форматом .rtf), TNotebook (блокнот), TTabSet (закладки), THeader и другие. Каждый из этих компонентов содержит свойство, принадлежащее типу TStrings.
TStrings является абстрактным классом и предназначен для работы с наборами строк. Набор строк технически реализуется в виде массива указателей. С помощью свойств и методов данного класса можно добавлять и удалять строки, сортировать строки, считывать и записывать строки в файл или поток и т. д. Кроме того, элементами набора могут быть пары строка-объект, в которых строка является собственно строкой символов, а объектом может быть объект любого класса Delphi (в том числе и потомок от TStrings). Эта особенность позволяет сохранять в TStrings объекты с текстовыми примечаниями, сортировать объекты, отыскивать нужный объект по его описанию, создавать многомерные наборы строк и т. д.
Разработка программы «Блокнот» для хранения информации по месяцам года
Создайте новый проект. Сохраните новое приложение в текущей папке: файл модуля под именем Main.pas, файл проекта —Notebook.dpr.
1-й этап. Создание визуального интерфейса приложения
1.1. Задайте значения свойств формы следующим образом:
Name – NotebookF;
Caption – Блокнот.
1.2. Поместите на форму компонент Notebook(блокнот) со страницыWin3.1палитры компонентов.
1.3. Создайте страницы компонента NoteBookl. Для этого в инспекторе объектов найдите свойствоPages (страницы); щелкните на кнопке с тремя точками для открытия диалогового окна редактирования значений выбранного свойства (рис. 1).
Используя диалоговое окно, создайте 12 страниц, каждая из которых называется именем, соответствующим месяцу года (Январь, Февраль и т. д.). Для редактирования названия первой страницы воспользуйтесь кнопкой Edit, для добавления очередной страницы — кнопкойAdd.
Рис. 1
Значение Helpcontextможно оставить без изменения (это свойство используется при вызове контекстно-зависимой справочной системы приложения), так как приложение не содержит справочной системы. Для завершения создания списка страниц нажмите на кнопкуClose.
1.4. Поместите компонент TabSet(список закладок) со страницыWin3.1под компонентомNoteBookl. Сделайте эти компоненты одинаковыми по ширине.
1.5. Положите на каждую из 12 страниц компонента NoteBooklкомпонентListBox(окно списка) для размещения записей на каждый месяц. Для этого выполните такую последовательность действий.
Установите свойство ActivePage(активная страница) компонентаNoteBookв значение, равное'Январь'. Щелкните на выбранной странице объектаNoteBookl. В палитре компонентов на страницеStandardвыберите компонентListBoxи поместите его (щелкните) в компонентNoteBookl. Для свойстваAlignкомпонентаListBox1установите значениеAlClient (способ выравнивания компонента во весь контейнер).
Повторите эту операцию для оставшихся 11 страниц блокнота.
1.6. В правую часть формы поместите компонент Panel(страницаStandardпалитры компонентов), на него положите один компонентLabel, один компонентEditи три компонентаButton. Поместите еще 2 компонентаButtonв правой нижней части формы (рис. 2).
Рис. 2
Установите следующие свойства компонентов:
1.7. Сохраните проект. Убедитесь, что после запуска приложения форма ничем не отличается от режима проектирования.
2-й этап. Создание программного кода
2.1. Создание закладок в TabSetlи синхронизация их со страницами блокнота.
Для этого используется свойство TabsкомпонентаTabSet, представляющее список имен закладок. В примере список закладок соответствует списку страниц блокнота (Pages). Создайте следующий обработчик события:
Procedure TNoteBookF.FormCreate1(Sender: TObject);
begin
TabSet1.Tabs:=NoteBook1.Pages;
{копирование содержимого свойства Pages компонента NoteBook в свойство Tabs компонента TabSet, т. е. создание закладок в TabSet}
TabSet1.TabIndex:=NoteBook1.PageIndex;
{В соответствии с тем, какая страница блокнота активна во время проектирования (свойство ActivePage), активной будет закладка с тем же именем (номером)}
// TabSet1.TabIndex:=0;
end;
2.2. Сохраните и запустите проект. Проверьте, имеют ли закладки на форме названия, соответствующие страницам блокнота.
2.3. Используя свойства UnSelectedColor,SelectedColor,BackgroundColor,DitherBackground,StartMargin,EndMarginкомпонентаTabSetl, измените внешний вид закладок.
2.4. Создание обработчика события OnClickдля кнопки'Добавить'.
После щелчка на кнопке содержимое окна редактирования (RecordEdt) должно добавляться в список на выбранной странице блокнота. Для операций со строками у компонентаListBoxимеется свойствоItems, принадлежащее классуTStrings. Чтобы добавить строку в список, используется методAddэтого класса (см. список методов классаTStrings). Текст обработчика события может быть создан двумя способами.
1-й способ
procedure TNoteBookF.AddBtnClick(Sender: TObject);
begin
if RecordEdt.Text <>’’ then begin
case NoteBookl.PageIndex of
{Для того чтобы поместить запись в список на страницу блокнота, выбираем компонент ListBox по номеру страницы блокнота}
0: ListBoxl.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: ListBoxll.Items.Add(RecordEdt.Text);
11: ListBoxl2.Items.Add(RecordEdt.Text);
end;
RecordEdt.Text:=’’; {введенный текст затираем}
end;
end;
2-й способ
В Object Pascalимеется функция:
function FindComponent(const AName: string): TComponent;
Функция возвращает ссылку на компонент, имя которого задано параметром AName.
Эту функцию можно использовать в коде обработчика события OnClickкнопки ‘Добавить'следующим образом:
procedure TNoteBookF.AddBtnClick(Sender: TObject);
var TempComponent: TListBox; {вспомогательная переменная}
begin
TempComponent:=TListBox(FindComponent('ListBox'+
IntToStr(NoteBook1.PageIndex+1)));
{TListBox(<компонент>) используется для преобразования к типу TListBox}
if RecordEdt.Text <>’’ then
TempComponent.Items.Add(RecordEdt.Text);
RecordEdt.Text:=’’;
end;
2.5. Сохраните, запустите проект и добавьте строки на разные страницы блокнота. В данном варианте программы они должны записываться только на страницу, которая была открыта при запуске приложения. Это объясняется тем, что закладки Tabset1не синхронизированы со страницамиNoteBook1, т. е. при выборе закладки соответствующая страница блокнота не активизируется.
Чтобы устранить этот недостаток, следует создать обработчик события OnClickдля закладокTabset1:
procedure TNoteBookF.TabSetlClick(Sender: TObject);
begin
NoteBook1.PageIndex:=TabSet1.TabIndex;
{страница блокнота и страница набора закладок должны совпадать}
end;
2.6. Сохраните проект и проверьте правильность работы приложения, т. е внесение записей на различные страницы блокнота.