фывфыв. Практикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей
Скачать 1.39 Mb.
|
ЛАБОРАТОРНАЯ РАБОТА 5Разработка приложения обработки строковой информацииЦель лабораторной работы:изучить методы программирования с использованием строк и правила работы с компонентами TListBox и TComboBox. Написать программу работы со строками. 1. Краткие сведения1.1. Типы данных для работы со строками Короткие строки типа ShortString и String[N] Короткие строки имеют фиксированное количество символов. Строка ShortString может содержать 255 символов. Строка String[N] может содержать N символов, но не более 255. Первый байт этих переменных содержит длину строки. Длинная строка типа String При работе с этим типом данных память выделяется по мере необходимости (динамически) и может занимать всю доступную программе память. Вначале компилятор выделяет для переменной 4 байта, в которых размещается номер ячейки памяти, начиная с которой будет располагаться символьная строка. На этапе выполнения программа определяет необходимую длину цепочки символов и обращается к ядру операционной системы с требованием выделить необходимую память. Процедуры и функции для работы с короткими и длинными строками представлены в приложении. Широкая строка типа WideString Введена для обеспечения совместимости с компонентами, основанными на OLE-технологии. От типа String отличается только тем, что для представления каждого символа используется не один, а два байта. Нуль-терминальная строка типа PСhar Представляет собой цепочку символов, ограниченную символом #0. Максимальная длина строки ограничена только доступной программе памятью. Нуль-терминальные строки широко используются при обращениях к API-функциям Windows (API -ApplicationProgramInterface - интерфейс прикладных программ). Представление строки в виде массива символов Строка может быть описана как массив символов. Если массив имеет нулевую границу, он совместим с типом PChar. Var MasS : array[1..100] of Char; В отличие от нуль-терминальной строки здесь длина имеет фиксированное значение и не может меняться в процессе выполнения программы. 1.2. Компонент TListBox Компонент TListBox представляет собой список, элементы которого выбираются при помощи клавиатуры или мыши. Список элементов задается свойством Items, методы Add, Delete и Insert которого используются для добавления, удаления и вставки строк. Объект Items (TString) хранит строки, находящиеся в списке. Для определения номера выделенного элемента используется свойство ItemIndex. 1.3. Компонент TComboBox Комбинированный список TComboBox представляет собой комбинацию списка TListBox и редактора TEdit, поэтому практически все свойства заимствованы у этих компонентов. Для работы с окном редактирования используется свойство Text как в TEdit, а для работы со списком выбора - свойство Items как в TListBox. Существует. Пять модификаций компонента, определяемых его свойством Style. В модификации csSimple список всегда раскрыт, в остальных он раскрывается после нажатия кнопки справа от редактора. 1.4. Компонент TBitBtn Компонент TBitBtn расположен на странице Additional палитры компонентов и представляет собой разновидность стандартной кнопки TButton. Его отличительная особенность - наличие растрового изображения на поверхности кнопки, которое определяется свойством Glyph. Кроме того, имеется свойство Kind, которое задает одну из 11 стандартных разновидностей кнопок. Нажатие любой из них, кроме bkCustom и bkHelp закрывает модальное окно и возвращает в программу результат mr*** (например, bkOk - mrOk). Кнопка bkClose закрывает главное окно и завершает работу npoграммы. 1.5. Обработка событий Обо всех происходящих в системе событиях таких, как создание формы, нажатие кнопки мыши или клавиатуры и т. д., ядро Windowsинформирует окна путем посылки соответствующих сообщений. Среда Delphi позволяет принимать и обрабатывать большинство таких сообщений. Каждый компонент содержит обработчики сообщений на странице Events инспектора объектов. Для создания обработчика события необходимо раскрыть список компонентов в верхней части окна инспектора объектов и выбрать необходимый компонент. Затем, на странице Events, нажатием левой клавиши мыши выбрать обработчик и дважды щелкнуть по его левой (белой) части. В ответ Delphi активизирует окно текста программы и покажет заготовку процедуры обработки выбранного события. Каждый компонент имеет свой набор обработчиков событий, однако некоторые из них присущи большинству компонентов. Наиболее часто применяемые события представлены в таблице 1.1. Таблица 1.1 – Наиболее часто генерируемые события
1.6. Пример выполнения задания Задание: написать программу подсчета числа слов в произвольной строке. В качестве разделителя может быть любое число пробелов. Для ввода строк и работы с ними использовать компонент типа ТСоmbоВох. Ввод строки заканчивать нажатием Enter. Для выхода из программы использовать кнопку Close. Форма приложения приведена на рисунке 5.1. Рисунок 5.1 – Форма приложения Текст программы: Unit LabRab_5; Interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TUnit_Lab5 = class(TForm) ComboBox1: TComboBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; BitBtn1: TBitBtn; Button1: TButton; Procedure FormActivate(Sender: TObject); Procedure ComboBox1KeyPress(Sender: TObject; var Key: Char); Procedure ComboBox1Click(Sender: TObject); Private { Private declarations } Public { Public declarations } end; var Unit_Lab5: TUnit_Lab5; Implementation {$R *.dfm} // Обработка события активизации формы Procedure TUnit_Lab5.FormActivate(Sender: TObject); begin ComboBox1.SetFocus; //Передача фокуса ComboBox1 end; // Обработка события нажатия левой клавиши мыши Procedure TUnit_Lab5.ComboBox1KeyPress(Sender: TObject; var Key: Char); begin if Key =#13 then //Если нажата клавиша Enter то... begin // Строка из окна редактирования заносится в список выборa ComboBox1.Items.Add(ComboBox1.Text); ComboBox1.Text := ''; //Очистка окна редактирования end; end; Procedure TUnit_Lab5.ComboBox1Click(Sender: TObject); var St : string; n, i, nst, ind : integer; begin n := 0; //Содержит число слов выбранной строки ind := 0; //Содержит число слов //Определение номера выбранной строки nSt := ComboBox1.ItemIndex; //Занесение выбранной строки в переменную st St := ComboBox1.Items[nst]; //Просмотр всех символов строки st for i := 1 to Length(St) do begin Case ind of 0: if St[i] <>'' then begin //Если встретился символ после пробела //число слов увеличивается на единицу ind := 1; inc(n); end; // Если встретился пробел после символов 1: if St[i] ='' then ind := 0; end; //Case Label3.Caption := IntToStr(n); //Вывод числа слов в Label3 end; end. |