Работа со строками с помощью компонентов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа со строками с помощью компонентов



TListBox и TComboBox

Компонент TListBox (Список выбора) находится на панели Standard. Списки выбора дают пользователям возможность выбирать один или несколько параметров из списка.

Основным свойством компонента TListBox является свойство Items (Список строк). С помощью него можно получить доступ к строкам списка. Это свойство имеет тип TString. Такой же тип и у свойства Lines объекта TMemo, поэтому все свойства и методы Lines можно перенести на свойство Items объекта TListBox.

 

Пример.Создать программу, в которой в компоненте Edit отображается выбранная строка из списка.

 

Разместим на форме компоненты TListBox и TEdit. Для создания списка выбора дважды щёлкнем по свойству Items. В открывшемся окне наберем названия основных цветов:

 

Рис. 35 Создание списка выбора с помощью свойства Items

 

После нажатия кнопки ОК должна получиться следующая форма:

 

Рис. 36 Окно выбора цвета

 

Создадим обработчик события OnClick для списка выбора. В нём напишем следующее:

 

procedureTForm1.ListBox1Click(Sender: TObject);
begin
Edit1.Text:=ListBox1.Items.Strings[ListBox1.ItemIndex];
end;

Свойство ItemIndex объекта ListBox1 указывает на выделенную строку списка выбора. С помощью ListBox1.Items.Strings мы можем получить доступ ко всем строкам списка. В результате получается, что мы присваиваем в Edit1 текст выделенной строки в списке выбора.

 

Рис. 37 Работающее приложение.

Работа компонента TComboBox (Выпадающий список) аналогична работе со списком выбора.

 

Задания

1. Составить программу с Текстовой областью, в которой при исполнении программы изменяется текущая строка и в первую строчку выводится надпись: Текст изменен. Продумать графический интерфейс окна.

2. Составить программу, в которой выводится сообщение, в какой строке Текстовой области расположен курсор. Продумать графический интерфейс окна.

3. Создать проект «Работа со строками», позволяющий добавлять, изменять, удалять строки, а также очищать всю текстовую область.

 

Рис. 38 Окно проекта «Работа со строками»

 

4. Создать проект «Текстовый редактор» по образцу:

 

Рис. 39 Окно проекта «Текстовый редактор»

 

5. Создать программу ввода пользователем своей фамилии, имени и даты рождения с помощью окна ввода (использовать конструкцию: Переменная:= InputBox(Заголовок, Подсказка, Значение).

 

Рис. 40 Образец окна ввода

 

6. Создать программу подсчета количества строк, введенных в список выбора.

7. Создать программу со Списком выбора, с помощью которого можно добавлять, удалять, изменять строки и очищать весь список.

8. Создать проект «Текстовый редактор», дополнив его списком выбора и выпадающим списком.

 

Рис. 41 Окно проекта «Текстовый редактор»

Массивы

В Delphi массив рассматривается как переменная структурированного типа. Массив объединяет элементы одного типа данных. Более формально массив можно определить как одномерную (последовательную) упорядоченную совокупность элементов некоторого типа, которые адресуются с помощью индекса. В качестве иллюстрации можно представить себе шкаф, имеющий множество пронумерованных ящиков. Доступ к содержимому конкретного ящика (элемента данных) осуществляется после выбора ящика по его номеру (индексу). Индексная переменная, служащая для указания отдельного элемента массива должна быть простого типа (например, тип Byte, Integer).

В литературе, наряду с термином «массив», часто можно встретить термины «матрица», «таблица» или «вектор». Суть всех этих типов одна и та же.

Кроме одномерного массива (шкафа с ящиками в один ряд) в Delphi используются также двумерные массивы данных, которые можно представить как шкаф с множеством ящиков, положение которых определяется двумя координатами – по горизонтали и вертикали. В двумерных массивах координата по горизонтали соответствует номеру строки, а координата по вертикали – номеру столбца.

 

Одномерные массивы

В математике и информатике массив называется одномерным, если для получения доступа к его элементам достаточно одной индексной переменной. Так, чтобы найти в шкафу с одним рядом ящиков нужный нам ящик, достаточно знать его номер и точку отсчета.

Одномерный массив можно объявить следующим образом:

Var Имя массива: ARRAY [начальный индекс..конечный индекс] of Тип данных.

При объявлении массива необходимо указать, каким образом производится нумерация элементов, указав начальное и конечное значение для индексной переменной (например, 1..5 или 2..6). Тем самым указывается и число элементов в массиве – его размер. Кроме того, необходимо указать идентификатор (имя) массива и тип данных элементов массива.

Например:

Var Matrix: ARRAY [1..5] of Real;

Var Index: Array[2..7] of Integer;

Var Name: Array[1..5] of string[25];

Величины в квадратных скобках разделяются двумя точками. Причем перед этими двумя точками и после них допускаются пробелы.

 

Доступ к элементам массива

Массивы не могут обрабатываться целиком. Но можно получить доступ к каждому элементу-ячейке массива. Это выполняется путем указания значения индекса в квадратных скобках. Например, с помощью оператора

Index[2]:=34;

Элементу массива с индексом 2 (ячейки с номером 2) присваивается значение 34. Наряду с конкретным значением (константой) в качестве индекса может использоваться переменная, например, при поэлементной обработке массива в рамках цикла For..to..do. Так, с помощью фрагмента

For i:=2 to 7 do

Index[i]:=0;

Всем элементам массива Index присваивается значение 0.

Для заполнения массивов используются следующие конструкции:

For i:=1 to 5 do

Begin

A[i]:= Random(10);

Edit1.Text:= Edit1.Text +' '+ IntToStr(a[i]);

End;

Здесь массив заполняется случайными числами из диапазона [0..9].

Рассмотрим пример программы, в которой требуется ввести одномерный массив.

 

Пример.Создать проект “Сумма элементов массива”, предусматривающий заполнение массива случайными числами и возможность вывода в текстовое поле сумму всех элементов в массиве

 

Поместим на форму два текстовых поля: одно для ввода числовых данных, второе – для вывода суммы и две кнопки для реализации событийных процедур: заполнения массива и вычисления суммы.

 

Рис. 42 Графический интерфейс окна

 

Обработчик события заполнения массива для кнопки Button1 будет следующим:

 

VarForm1: TForm1;
A:array[1..100] of integer; I:integer; s:integer;
procedure TForm1.Button1Click(Sender: TObject);
Begin
Randomize;
Edit1.Clear;
For I:= 1 To 10 Do
begin
A[I]:= Random(10);
Edit1.Text:= Edit1.Text +' '+ IntToStr(a[i]);
end;
end;

 

Теперь создадим процедуру для вычисления суммы элементов в заполненном массиве:

 

procedure TForm1.Button2Click(Sender: TObject);
Begin
s:= 0;
ForI:= 1 To 10 Do
begin
s:=s + a[i];
end;
Edit2.Text:= Edit2.Text +' ' + IntToStr(s)
end;

Задания

1. Создать проект “Произведение элементов массива”, предусматривающий заполнение массива случайными числами и возможность вывода в текстовое поле произведение всех элементов в массиве.

2. Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-10,20]. Найти сумму элементов, имеющих нечетные индексы.

3. Подсчитать количество элементов массива, значения которых больше заданного числа А и кратных 5.

4. Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.

 

Многомерные массивы.

Пример создания проекта с границами типа «Лабиринт»

 

Массивы могут иметь и более одного измерения. В таких случаях говорят о многомерных массивах. Многомерные массивы широко используются в математике, статистике и некоторых других прикладных науках (например, для матричных вычислений). Объявление двумерного массива выглядит следующим образом:

Var TwoDimensionalArray: Array [1..80,1..25] of Integer;

Переменной TwoDimensionalArray соответствует некоторая матрица или двумерный массив, причем каждому элементу донного массива может быть поставлена в соответствие некоторая позиция на экране компьютера (на экране помещается 80 столбцов с номерами от 1 до 80 и 25 строк с номерами от 1 до 25). Таким образом, каждый элемент массива может быть использован для хранения одного символа, отображенного в соответствующей позиции экрана.

Двумерные массивы часто используются в проектах с ограничением пространства. Примером такого проекта с границами является приложение «Лабиринт».

 

Пример.Создать проект “Лабиринт”, в котором объект может перемещаться только по свободному пространству лабиринта.

 

Создадим графический интерфейс проекта, подобно тому, как изображено на рис. 42. Здесь на форме помещено пятьдесят семь компонентов TImage. Сами границы лабиринта (кирпичики) располагаются последовательно в объектах Image1-Image56. В компоненте Image57 находится изображение перемещаемого объекта.

 

Рис. 43 Графический интерфейс проекта

 

Каждому квадрату лабиринта (пустому или с кирпичиком) можно поставить в соответствие номер строки и столбца, в котором он находится, т.е. описать его с помощью двумерного массива.

Если объект может свободно перемещаться в квадрате, то значение массива равно 0, границам соответствует значение массива, равное единице. Например, для двух верхних границ строк обработчик события OnCreate у формы будет следующим:

 

var
Form1: TForm1;
M:array[0..9,0..9] of integer;
procedure TForm1.FormCreate(Sender: TObject);
Begin
m[0,0]:=1
m[0,1]:=1
m[0,2]:=1
m[0,3]:=1
m[0,4]:=1
m[0,5]:=1
m[0,6]:=1
m[0,7]:=1
m[0,8]:=1
m[0,9]:=1
 
m[1,0]:=1
m[1,1]:=0
m[1,2]:=0
m[1,3]:=0
m[1,4]:=1
m[1,5]:=0
m[1,6]:=0
m[1,7]:=0
m[1,8]:=0
m[1,9]:=1
end;

 

Для остальных строчек будет подобное описание.

Движение объекта управляется с помощью клавиатуры и проверки значения массива:

 

Procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Begin
x:=round(image57.Left/45)
y:=round(image57.Top/45)
if (key=37)and (m[y,x-1]=0)then image57.Left:=image57.Left-45
if (key=39)and (m[y,x+1]=0)then image57.Left:=image57.Left+45
if (key=38)and (m[y-1,x]=0)then image57.top:=image57.top-45
if (key=40)and (m[y+1,x]=0)then image57.top:=image57.top+45
end;

 

Задания

  1. Добавить в лабиринт еще два движущихся объекта, при встрече с которыми начальный объект погибает.

 

Создание меню

 

Главное и вложенное меню

 

Практически все приложения Windows имеют меню. Меню представляет собой список объединенных по функциональному признаку пунктов, каждый из которых обозначает команду или вложенное меню (подменю). Выбор пункта меню равносилен выполнению соответствующей команды или раскрытию подменю.

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

Чтобы добавить к разрабатываемой программе меню, надо выбрать на панели компонентов Standard компонент TMainMenu и поместить его на форме в произвольном месте. Компонент TMainMenu невизуальный, т.е. при запуске программы он виден не будет.

 

Рис. 44 Форма с компонентом TMainMenu

 

Рассмотрим основные свойства компонента TMainMenu:

- AutoHotkeys означает, будут ли создаваться автоматически клавиши быстрого вызова. Если выбрать maAutomatic, то Delphi будет автоматически создавать клавиши. При maManual придётся это делать вручную.

- Images – сюда можно подключать списки картинок, которые смогут отображаться на пунктах меню.

- Items – здесь описываются пункты меню.

Чтобы начать создавать меню, нужно вызвать Редактор меню двойным щелчком на объекте TMainMenu или по команде Menu Designer. Первоначально меню пустое, но имеет один выделенный элемент:

 

Рис. 45 Окно редактора меню

 

Для создания первой опции (как правило, это опция Файл) нужно перейти в Инспектор объектов и свойству Caption присвоить нужное название. В Windows опции меню, как правило, имеют возможность быстрого вызова при помощи сочетания клавиш ALT+< Key >, где Key – первая буква в названии данной опции. Первую букву следует сделать подчеркнутой, для создания такого подчеркивания перед буквой ставится символ &. После нажатия Enter созданный пункт меню появляется на Форме:

 

Рис. 46 Окно Редактора меню с опцией Файл

 

Следует обратить внимание на то, что Delphi автоматически создаёт следующий пустой пункт меню верхнего уровня. А щёлкнув в редакторе меню по синему прямоугольничку Ф айл, можно сразу получить пустой пункт меню второго уровня. Заголовки новых опций меню устанавливаются аналогично с помощью свойства Caption.

Когда меню приготовлено редактор следует закрыть. При этом на форме появится меню, в точности соответствующее тому, как оно будет выглядеть в будущей программе.

 

Рис. 47 Окно формы с меню

 

Пример. Разработать проект, в котором меню служит для загрузки на форму графических изображений.

 

Рис. 48 Образец окна будущего проекта

 

Поместим на форму компоненты Image (Графическое изображение) и MainMenu (Меню). С помощью Редактора меню создадим опции главного меню подобно тому, как изображено на рис. Для создания вложенного меню (опции Облака и Лес) следует выбрать в Редакторе меню пункт Рисунки и нажать комбинацию клавиш Ctrl + Вправо. При этом командам меню среда Delphi автоматически дает имена: N1 – опции Файл, N2 – опции Выход, N3 – опции Рисунки, N4 – опции Выход (в меню Файл), N5 – опции Облака, N6 – опции Лес.

 

Рис. 49 Окно Редактора меню

 

При выборе команды меню Лес в компонент Image1 должен загрузиться рисунок с изображением леса. Данный рисунок предварительно следует поместить в ту же папку, в которой находится весь проект.

Обработчик события для команд меню вызывается щелчком по выбранной команде. Текст обработчика события для опции Лес будет выглядеть следующим образом:

 

procedure TForm1.N6Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile('wood.bmp');
end;

 

Рис. 50 Работающее приложение

 

Аналогично создается обработчик события для команды Лес.

Текст процедуры, описывающей работу опции меню Выход будет включать в себя только метод Close.

 

procedure TForm1.N2Click(Sender: TObject);
begin
Close;
end;

 



Поделиться:


Последнее изменение этой страницы: 2017-01-25; просмотров: 255; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.251.154 (0.059 с.)