В себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части
Вид материала | Документы |
2.3 Текстовый редактор Memo. Удалить строки 2.4 Использование компонента ListBox 2.5 Использование панели переключателей Radio Group 2.6 Использование компонента StringGrid |
- Учитель информатики Батракова, 79.15kb.
- Понятие типа данных. Переменные и константы. Основные типы данных в языке Си: общая, 143.1kb.
- Анализировать и сравнивать, 157.08kb.
- Специальная часть, 103.31kb.
- Вопросы к экзамену по курсу Языки программирования и методы трансляции, 21.62kb.
- «создание и использование формул в excel», 202.32kb.
- Язык Си: историческая справка, общая характеристика, основные достоинства. Подготовка, 69.63kb.
- 2. Построение математических моделей по экспериментальным данным, 96.53kb.
- Яние проекта по созданию лингвистической онтологии специального информационно-поискового, 446.19kb.
- Арифметические выражения в бейсике. Основные операторы языка бейсик, 308.91kb.
2.3 Текстовый редактор Memo.
Текстовый редактор Memo в отличие от строки ввода Edit может содержать не одну, а любое число строк. Основным свойством компонента Memo является property Lines, которое задаёт список строк, помещённых в редактор. Это свойство имеет тип TStrings. Класс TStrings используется для определения свойств соответствующего типа во многих компонентах Delphi. Объекты этого класса представляют собой списки строк. Познакомимся с некоторыми свойствами и методами, определёнными в классе TStrings.
property Count : integer;
Определяет число элементов в списке.
property Strings[index:integer]:string;
Определяет строку списка с индексом index. Индекс первой строки – 0.
property Text : string;
Содержит все строки списка, включая разделители – символы возврата каретки и перевода строки (#13#10)
function Add(const s:string) : integer;
Добавляет строку S в список и возвращает порядковый номер этой строки в списке.
procedure Clear;
Удаляет все строки и указатели на объекты из списка.
procedure Delete(index:integer);
Удаляет из списка элемент с индексом index.
procedure Exchange(index1, index2:integer);
Меняет местами два элемента списка с индексами index1 и index2.
procedure Insert(index:integer; const S:string);
Вставляет в список строку S под индексом index.
procedure Move(Curindex, Newindex:integer);
Перемещает элемент списка из позиции Curindex в позицию Newindex.
procedure LoadFromFile(const FileName:string);
Загружает список из файла с именем FileName.
procedure SaveToFile(const FileName:string);
Помещает список в файл с именем FileName.
Пример 1. Создать оконное приложение, позволяющее вводить с клавиатуры список строк в поле редактора Memo, а затем нажатием кнопки удалять все строки, содержащие более 4 символов.
Окно работающего приложения:
Процедура обработки события щелчка на кнопке Удалить строки:
type TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to memo1.Lines.count-1 do
if length(memo1.Lines.Strings[i])>4 then memo1.Lines.Delete(i);
end;
end.
Пример 2. Создать оконное приложение, вычисляющее первые 20 элементов арифметической прогрессии, для которой заданы первый элемент и разность. Окно работающего приложения:
Процедура обработки события щелчка по кнопке Заполнить:
procedure TForm1.Button1Click(Sender: TObject);
var a,d,an,i:integer;
begin
a:=strtoint(edit1.Text);
d:=strtoint(edit2.Text);
memo1.Lines.Add(edit1.Text);
an:=a;
for i:=2 to 20 do
begin
an:=an+d;
memo1.Lines.Add(inttostr(an))
end;
end;
Процедура обработки события щелчка по кнопке Очистить:
procedure TForm1.Button2Click(Sender: TObject);
begin
memo1.Lines.Clear;
end;
Задачи
7. Заполнить одномерный целочисленный массив a числами, введёнными с клавиатуры в поле Memo1. Получить новый массив b, удвоив нечётные элементы массива a, чётные оставить без изменения. Полученный массив b отобразить в поле Memo2. Окно работающего приложения:
8. Создать оконное приложение, позволяющее вводить с клавиатуры список строк в поле редактора Memo, а затем, используя процедуру Exchange, переставить строки в обратном порядке. Окно работающего приложения:
9. Заполнить одномерный целочисленный массив a числами, введёнными с клавиатуры в поле Memo1. Получить новый массив b, каждый элемент которого равен сумме цифр соответствующего элемента массива a. Полученный массив b отобразить в поле Memo2. Окно работающего приложения:
10. Найти все трёхзначные числа, каждое из которых удовлетворяет условию: сумма кубов цифр числа равняется самому числу. Найденные числа отобразить в поле редактора Memo, подсчитать их количество. Окно работающего приложения:
11. Дан одномерный целочисленный массив из 20 элементов. Ввести его элементы с клавиатуры в поле Memo и удалить последний максимальный элемент массива. Окно приложения:
12*. Дан одномерный целочисленный массив a из 20 элементов. Ввести его элементы с клавиатуры в поле Memo, а затем, используя методы класса TStrings, переставить элементы массива a так, чтобы они расположились в следующем порядке
a1, a11, a2, a12, … , a10, a20 .
Окно приложения:
2.4 Использование компонента ListBox
Использование компонента ListBox
на этапе конструирования формы
Рассмотрим следующую задачу.
Пример 3. Написать программу, которая пересчитывает вес из фунтов в килограммы с учётом того, что в разных странах фунт “весит” по-разному.
Россия 0.4059
Англия 0.453592
Австрия 0.56001
Германия 0.5
Дания 0.5
Исландия 0.5
Италия 0.31762
Нидерланды 0.5
В диалоговом окне программы для выбора страны используется список (ListBox). Для разрабатываемой программы наибольший интерес представляют два свойства компонента ListBox: Items и Item Index.
Свойство Items содержит элементы списка. Список, выводимый в поле ListBox, может быть сформирован во время создания формы или динамически, во время работы программы. Для формирования списка во время создания формы приложения надо после добавления в форму компонента ListBox в окне Object Inspector выбрать свойство Items и щёлкнуть на кнопке редактора списка строк, на которой изображены три точки. В появившемся диалоговом окне String list editor (редактор списка строк) следует набрать список, поместив каждый элемент списка на отдельной строке. Ввод очередного элемента списка должен заканчиваться нажатием клавиши Enter. После ввода всех элементов списка нужно щёлкнуть на кнопке Ok.
Свойство Item Index во время работы программы содержит номер выбранного элемента списка. Если ни один из элементов списка не выбран, то значение Item Index равно минус единице. Ниже перечислены компоненты формы с указанием предназначения.
-
Компонент (свойство Name)
Предназначение
List Box 1
Выбор страны
Edit 1
Ввод веса в фунтах
Label 1,Label 2, Label 3
Вывод пояснительного текста
Label 4
Вывод результата пересчёта
Button 1
Активизация процедуры пересчёта.
procedure TForm1.Button1Click( Sender : TObject);
var funt , kg, k : real;
begin
case List Box1.Item Index of
0 : k0.4059;
1 : k0.453592;
2 : k0.56001;
3..5, 7 : k0.5;
6 : k0.31762
end;
funtStrToFloat(Edit1.Text);
kgk funt;
Label4.CaptionEdit1.Text + фунт(а/ов) – это +
FloatToStrF(kg, ffFixed,6,3) + кг ;
end;
Задачи.
13. Написать программу, выполняющую работу арифметического калькулятора с четырьмя арифметическими действиями над действительными числами.
14. Написать программу для вычисления значения тригонометрической функции (sin, cos, tg, ctg) для данного действительного числа x.
Окно работающего приложения:
Использование компонента ListBox
на этапе выполнения программы
Формирование списка ListBox может происходить не только на этапе конструирования формы приложения, но и динамически, то есть на этапе выполнения программы. Проиллюстрируем это на примере решения следующей задачи.
Пример 4. В целочисленном массиве из 10 элементов (все элементы различны) найти максимальный и минимальный элементы и поменять их местами. (Для отображения массивов в форме использовать компонент ListBox)
Форма приложения должна выглядеть следующим образом:
Для ввода целых чисел используется поле редактирования Edit1. Ввод каждого числа завершается щелчком мыши по кнопке Ввод. Введённый массив отображается в поле ListBox1. После щелчка на кнопке Решение преобразованный массив отображается в поле ListBox2.
В разделе Interface (в разделе описания переменных var) вставим описание массива и используемых переменных:
a : array[1..10] of integer;
i, min, max, imax, imin : integer;
Выполним щелчок по форме Form1. В окне Object Inspector откроем вкладку Events и в поле имени события OnCreate (создание формы) сделаем двойной щелчок. В открывшемся редакторе кода впечатаем инструкции в предложенной заготовке процедуры:
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ListBox1.Clear;
ListBox2.Clear;
end;
Задано начальное значения индекса i массива. Метод Clear удаляет все элементы списка ListBox (очищает поле ListBox).
Выделим кнопку Ввод. На вкладке Events окна Object Inspector сделаем двойной щелчок в поле имени события OnClick и в появившейся заготовке процедуры впечатаем необходимые инструкции:
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus
end;
Функция Add формирует список ListBox1, заполняя его числами, вводимыми в поле Edit1. Одновременно этими же числами заполняется массив a. Процедура SetFocus устанавливает фокус ввода в поле Edit1. Это означает, что после ввода очередного числа и занесения его в список ListBox1 щелчком по кнопке Ввод поле Edit1 снова будет активным (там будет мигать курсор).
Выделим кнопку Решение. На вкладке Events окна Object Inspector сделаем двойной щелчок в поле имени события OnClick и в появившейся заготовке процедуры впечатаем необходимые инструкции:
procedure TForm1.Button2Click(Sender: TObject);
var k : integer;
begin
max:=a[1]; imax:=1; min:=a[1]; imin:=1;
for k:=2 to 10 do
begin if max
if min>a[k] then begin min:=a[k]; imin:=k end;
end;
a[imax]:=min; a[imin]:=max;
for k:=1 to 10 do ListBox2.Items.Add(IntToStr(a[k]));
end;
После сохранения проекта и компиляции можно запускать его на выполнение. Полный текст сформированного модуля:
unit mm_;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a:array[1..10] of integer; i, min, max, imax, imin : integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
ListBox1.Clear; ListBox2.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(Edit1.Text);
i:=i+1;
a[i]:=StrToInt(Edit1.Text);
Edit1.SetFocus
end;
procedure TForm1.Button2Click(Sender: TObject);
var k:integer;
begin
max:=a[1]; imax:=1; min:=a[1]; imin:=1;
for k:=2 to 10 do
begin if max
if min>a[k] then begin min:=a[k]; imin:=k end;
end;
a[imax]:=min; a[imin]:=max;
for k:=1 to 10 do ListBox2.Items.Add(IntToStr(a[k]));
end;
end.
Задачи
1
5. Заполнить одномерный целочисленный массив из 10 элементов числами Фибоначчи. Для отображения массива в форме использовать компонент ListBox.
16. Дан одномерный целочисленный массив a из 10 элементов. Все элементы этого массива, предшествующие первому по порядку элементу со значением max(a1,…,a10) домножить на max (a1,…,a10 ). Для отображения массивов в форме использовать компонент ListBox.
17. Дана строка, содержащая не более 30 символов, являющихся строчными русскими буквами и запятыми. Последний символ – точка. Последовательность букв между двумя соседними знаками препинания назовём словом. Вывести в поле компонента ListBox в столбец все слова, меняя местами в каждом слове первую и последнюю буквы.
2.5 Использование панели переключателей Radio Group
П
ример 5. Создадим приложение, позволяющее менять цвет текста, набранного в строке ввода Edit. Окно работающего приложения должно выглядеть следующим образом:
Свойству Caption компонента RadioGroup1 присвоим значение Цвет. Выделим свойство Items и щелкнем по кнопке с тремя точками. В появившемся окне StringListEditor введём имена переключателей. Для каждого переключателя выделяется одна строка:
Чёрный
Зелёный
Красный
Синий
После завершения ввода нажимаем кнопку Ok.
Свойство ItemIndex установим равным 0. Это означает, что в начале работы выделенным переключателем будет первый.
Для компонента Edit1 установим свойство Text равным Delphi 5. (Значение этого свойства можно менять в ходе работы приложения.)
Выполним двойной щелчок на компоненте RadioGroup1. В появившемся окне Редактора Кода запишем операторы для обработчика события OnClick, которое возникает при выделении нового переключателя.
Приведём полный текст сформированного модуля.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
Edit1: TEdit;
procedure RadioGroup1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
if radiogroup1.itemindex=0 then edit1.font.color:=clblack;
if radiogroup1.itemindex=1 then edit1.font.color:=clgreen;
if radiogroup1.itemindex=2 then edit1.font.color:=clred;
if radiogroup1.itemindex=3 then edit1.font.color:=clblue;
end;
end.
Задачи
18. Создать оконное приложение, позволяющее менять цвет формы. Выбор цвета осуществлять с помощью компонента radiogroup.
19. Создать оконное приложение, позволяющее для натурального числа n, введённого в поле edit, выполнить действие, которое можно выбрать с помощью компонента radiogroup.
20. Написать программу для преобразования введённой в поле редактирования строки. Вид преобразования
удалить первую запятую
добавить в конце строки точку
первый знак ; заменить на ,
должен быть выбран с помощью компонента radiogroup.
2.6 Использование компонента StringGrid
Для работы с массивами удобно использовать компонент StringGrid (строковая таблица), значок которого находится на дополнительной (Additional) странице палитры компонентов.
В следующей таблице описаны некоторые свойства компонента StringGrid.
Свойство | Обозначение |
Количество колонок таблицы | ColCount |
Количество строк таблицы | RowCount |
Соответствующий таблице двумерный строковый массив (индексы нумерованы от 0) | Cells |
Количество зафиксированных колонок таблицы | FixedCols |
Количество зафиксированных строк таблицы | FixedRows |
Признак допустимости редактирования содержимого ячеек таблицы | Options.goEditing |
Ширина колонок таблицы | DefaultColWidth |
Высота строк таблицы | DefaultRowHeight |
Толщина линий таблицы | GridLineWidth |
Рассмотрим решение следующей задачи.
Пример 6. Найти сумму элементов целочисленной матрицы размера 44.
Окно приложения должно выглядеть следующим образом:
В следующей таблице приведены значения основных свойств компонента StringGrid для проекта вычисления суммы элементов целочисленной матрицы размера 44.
-
Свойство
Значение
ColCount
4
RowCount
4
FixedCols
0
FixedRows
0
Options.goEditing
True
DefaultColWidth
30
DefaultRowHeight
25
GridLineWidth
1
Маркируем командную кнопку Вычислить и создаём следующую процедуру обработки события OnClick:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,s:integer;
begin
s:=0;
for i:=0 to stringgrid1.colcount-1 do
for j:=0 to stringgrid1.rowcount-1 do
s:=s + strtoint(stringgrid1.cells[i,j]);
label3.caption:=inttostr(s)
end;
Следует обратить внимание, что нумерация строк и столбцов начинается с 0, а в свойстве Cells[i,j] первый индекс обозначает номер столбца, а второй – номер строки.
Задачи
21. Заполнить квадратную целочисленную матрицу порядка n (n=6) следующим образом :
22. Дана целочисленная матрица размера 44. Получить квадрат этой матрицы.
2
3. Дан двумерный целочисленный массив размера 44. Подсчитать сумму элементов, стоящих над главной диагональю. Для отображения массива использовать компонент StringGrid.