- •1.Тип данных “класс”. Объекты и классы.
- •Классы и объекты, понятие экземпляра класса, понятие членов класса
- •Виды классов
- •Классы в языке Object Pascal (среда Delphi)
- •2.Методы класса
- •3.Свойства класса и поля. Отличие свойства класса от полей записи.
- •4. Конструктор и деструктор класса.
- •Назначение конструктора
- •Виды конструкторов
- •Конструктор по умолчанию
- •Конструктор копирования
- •Конструктор преобразования
- •Виртуальный конструктор
- •Деструктор в Delphi
- •5.Использование разделов класса public, protected, published.
- •6. Использование наследования при создании класса.
- •Простое наследование
- •Множественное наследование
- •Delphi (Object Pascal)
- •7. Определение инкапсуляции.
- •8. Определение полиморфизма.
- •Примеры
- •В объектно-ориентированных языках
- •9. Динамическое создание объектов на форме с помощью классов.
- •10-13. Классы
- •14-16 StringGrid.
- •17. Процедуры работы с памятью. Приведите примеры.
- •18. Особенности работы процедур GetMem, BlockRead, функция FileSize .
- •19. Особенности работы процедуры new
- •20. Особенности работы процедуры FreeMem.
- •21. Стек. Локальные переменные и стек. Параметры процедуры и стек.
- •22. Списки. Динамическое создание очереди. Приведите примеры.
- •23. Компоненты работы с базами данных Table, Query, dbGrid, DataSource.
- •25. Занесение информации из базы данных в StringGrid.
- •Interface
- •Implementation
- •Implementation
- •26. Иерархические структуры. Деревья.
- •27. Использование компоненты TeeView для построения деревьев.
- •28. Рекурсия. Рекурсивные функции и процедуры. Рекурсия в программировании Функции
- •29. Выдача сообщений и отладка
- •Место отладки в цикле разработки программы
- •Инструменты
- •Инструменты, снижающие потребность в отладке
- •Оператор try...OnException..._try
- •31. Типы файлов. Операторы последовательного метода доступа.
- •32. Особенности обработки текстовых файлов.
- •33. Особенности работы с файлами с помощью прямого метода доступа.(!хз!)
- •34. Организуется диалогового поиска файлов. Компонента OpenDialog.
Interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
StringGridl: TStringGrid;
Button1: TButton;
Label2: TLabel;
procedure ButtonlClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForml ;
Implementation
{$R *.dfm}
procedure TForml.ButtonlClick(Sender: TObject); var
a : array[1..5] of integer; // массив
summ: integer; // сумма элементов
sr: real; // среднее арифметическое
i: integer; // индекс
begin
// ввод массива
// считаем, что если ячейка пустая, то соответствующий
// ей элемент массива равен нулю
for i:= 1 to 5 do
if Length(StringGridl.Cells[i-1, 0]) <>0
then a[i] := StrToInt(StringGridl.Cells[i-1,0])
else a[i] := 0;
// обработка массива
summ := 0;
for i :=1 to 5 do
summ := summ + a[i]; sr := summ / 5;
У вывод результата Label2.Caption :=
'Сумма элементов: ' + IntToStr(summ)
+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr);
end;
end.
После пробных запусков программы возникает желание внести изменения в процесс ввода массива. Так, было бы неплохо, чтобы курсор автоматически переходил в следующую ячейку таблицы, например, в результате нажатия клавиши <Enter>. Сделать это можно при помощи процедуры обработки события onKeyPress. На эту же процедуру можно возложить задачу фильтрации вводимых в ячейку таблицы данных. В нашем случае надо разрешить ввод в ячейку только цифр.
Текст процедуры обработки события OnKeyPress приведен в листинге 5.3. Следует обратить внимание на свойство Col, которое во время работы программы содержит номер колонки таблицы, в которой находится курсор. Это свойство можно также использовать для перемещения курсора в нужную ячейку таблицы. Однако нужно учитывать, что колонки таблицы, впрочем, как и строки, нумеруются с нуля.
Листинг 5.3. Процедура обработки события OnKeyPress
procedure TForm1.StringGridlKeyPress(Sender: TObject;
var Key: Char);
begin
case Key of
#8,'0'..'9' : ; // цифры и клавиша <Backspace>
#13: // клавиша <Enter>
if StringGridl.Col < StringGridl.ColCount — 1
then StringGridl.Col := StringGridl.Col + 1;
else key := Chr(0); // остальные символы запрещены
end;
end;
Если нужно ввести массив дробных чисел (a: array [1. .5] of real), то процедура обработки события OnKeyPress несколько усложнится, т. к. помимо цифр допустимыми символами являются символ-разделитель (запятая или точка — зависит от настройки Windows) и минус. С целью обеспечения некоторой дружественности программы по отношению к пользователю можно применить трюк: подменить вводимый пользователем неверный разделитель верным. Определить, какой символ-разделитель допустим в текущей настройке Windows, можно, обратившись к глобальной переменной Decimaiseparator.
В листинге 5.4 приведен текст модуля приложения ввода и обработки массива дробных чисел. Процедура обработки события OnKeyPress обеспечивает ввод в ячейку таблицы только допустимых при записи дробного числа символов.
Листинг 5.4. Ввод и обработка массива дробных чисел
unit. getar_1; interface
uses
Windows, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type
TForm1= class(TForm)
Label1: TLabel;
StringGrid1: TStringGrid;
Button1: TButton;
Label2: TLabel;
procedure Button1ClicktSender: TObject);
procedure StringGridlKeyPress(Sender: TObject; varKey: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;