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

Вид материалаДокументы
2.3 Текстовый редактор Memo.
Удалить строки
2.4 Использование компонента ListBox
2.5 Использование панели переключателей Radio Group
2.6 Использование компонента StringGrid
Подобный материал:
1   2   3

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 : k0.4059;

1 : k0.453592;

2 : k0.56001;

3..5, 7 : k0.5;

6 : k0.31762

end;

funtStrToFloat(Edit1.Text);

kgk  funt;

Label4.CaptionEdit1.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. Найти сумму элементов целочисленной матрицы размера 44.

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



В следующей таблице приведены значения основных свойств компонента StringGrid для проекта вычисления суммы элементов целочисленной матрицы размера 44.

Свойство

Значение

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. Дана целочисленная матрица размера 44. Получить квадрат этой матрицы.





2
3. Дан двумерный целочисленный массив размера 44. Подсчитать сумму элементов, стоящих над главной диагональю. Для отображения массива использовать компонент StringGrid.