Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LYeKTsII_GURSKOGO_1.doc
Скачиваний:
10
Добавлен:
16.11.2019
Размер:
3.31 Mб
Скачать

7. Табличное представление данных

Таблица – двухмерное представление данных, упорядоченное по столбцам и строкам. Таблицы, как правило, имеют заголовки. В связи с этим таблицы делятся на две части: фиксированную и рабочую. Рабочая часть может содержать произвольное количество строк и столбцов. Если она не помещается в пределах компонента, то в него автоматически встраиваются полосы прокрутки.

Табличное представление можно использовать для ввода и вывода данных, т.е. содержимое ячеек можно редактировать.

В Delphi используются два компонента для представления данных в виде таблицы: TStringGrid и TDrawGrid.

Компонент tStringGrid

TStringGrid

Этот компонент предназначен для создания таблицы, содержащей произвольные текстовые строки. Свойства компонента TStringGrid:

BorderStyle: TBorderStyle;

- определяет наличие внешней рамки таблицы: (bsNone, bsSingle);

ColCount : LongInt;

RowCount : LongInt;

- определяют количество столбцов и строк таблицы;

FixedCols : Integer;

FixedRows : Integer;

- определяют количество столбцов и строк фиксированной части;

Color : TColor;

- определяет цвет рабочей части таблицы;

FixedColor : TColor;

- определяет цвет фиксированной части таблицы;

GridLineWidth : Integer;

- определяет толщину расчерчиваемых линий;

Col : LongInt;

Row : LongInt;

- определяют номер столбца и строки сфокусированной ячейки;

Options : TGridOptions;

Могут быть выбраны значения опций:

[goEditing] – для редактирования ячеек;

[goVertLine] – для рисования вертикальных линий;

[goHorLine] – для рисования горизонтальных линий и др.;

Cells[ACol, ARow: Integer] : String;

- определяет содержимое ячейки с табличными координатами ACol и ARow

Cols[Index: Integer] : TStrings;

Rows[Index: Integer] : TStrings;

- определяют все стринговые значения столбца или строки.

Пример.

Вычислить y=Asin(wt), 0  t  10 с, w = 2 с-1, А = 0.01 м, h = 0.1 c. Результаты вывести в виде таблицы.

В секции public класса TForm1 описать переменные:

a, w, tk, h, y : extended;

N : integer;

В обработчике FormCreate записываем следующее:

Procedure TForm1.FormCreate( );

var

i : integer;

begin

A := 0.01; tk := 10; w := 2; h := 0.1;

N := round(tk/h)+2;

StringGrid1.RowCount := N;

StringGrid1.ColCount := 3;

StringGrid1.Cells[0, 0] := ’N’;

StringGrid1.Cells[1, 0] := ’Время, с’;

StringGrid1.Cells[2, 0] := ’Функция, y’;

StringGrid1.Options := [goVertLine, goHorLine];

t := 0;

y := A * sin (w*t);

for i:=1 to N do

begin //где разместить дальнейшие операторы?

StringGrid1.Cells[0, i] := IntToStr(i);

StringGrid1.Cells[1, i] := FloatToStrF(t, fffixed, 8, 3);

StringGrid1.Cells[2, f] := FloatToStrF(f, fffixed, 8, 3);

y := A * sin (w*t);

t := := t + h;

until t < tk;

end;

end;

Компонент tDrawGrid

TDrawGrid

Как и TStringGrid компонент TDrawGrid предназначен для отображения информации в виде таблицы и, в дополнение можно расположить в ячейках графическую информацию. Свойства компонента аналогичны TStringGrid. У данного компонента имеются следующие методы:

function CellRect (ACol, ARow: LongInt): TRect;

- возвращает координаты ячейки ACol, ARow;

procedure MouseToCell (x,y: Integer; var ACol, ARow: LongInt);

- возвращает табличные координаты ячейки ACol, ARow по экранным координатам;

С данным компонентом связаны события:

OnDrawCell

- возникает при необходимости перерисовать ячейку с табличными координатами ACol, ARow;

OnGetEditText

- возникает при редактировании текста в ячейке ACol, ARow;

OnSetEditText

- возникает при завершении редактирования ячейки ACol, ARow;

П ример. Рассмотрим пример, как показать текст и картинки одновременно, причем чтобы текст можно редактировать.

В секции public введем переменную ListMap типа TStringList. В этой переменной будем хранить список имен файлов с картинками. В обработчике FormCreate создадим и наполним список ListMap.

Procedure TForm1.FormCreat( );

const

FNames : array[0..3] of String = (‘1.bmp’, ‘2.bmp’, ‘3.bmp’,

‘4.bmp’);

Var

k : Integer;

begin

//создадим список строк

ListMap := TStringList.Create;

//вставим в список названия файлов и сами картинки

for k:=0 to 3 do

begin

ListMap.Add(FNames[k]);

ListMap.Objects[k] := TBitmap.Create;

(ListMap.Objects[k] as TBitmap).LoadFromFile(FNames[k]);

end;

end;

Далее поместим на форму компонент DrawGrid1 и установим следующие его свойства:

ColCount = 2;

RowCount = 2;

FixedCols = 0;

FixedRows = 0;

Options.Editing = true;

Создадим для компонента DrawGrid обработчики:

Procedure TForm1.DrawGrid1GetEditText (Sender: TObject; ACol,

ARow: Integer; var Value: String);

//передает для редактирования текст из ячейки

begin

Value := ListMap[2*ACol + ARow];

end;

Procedure TForm1.DrawGrid1SetEditText (Sender: TObject; ACol,

ARow: Integer; Value: String);

//процедура получает текст из редактора и сохраняет его в списке ListMap

begin

ListMap[2*ACol + ARow] := Value;

end;

Procedure TForm1.DrawGrid1DrawCell(Col, Row: Integer; Rect: TRect);

//рисует картинку из списка ListMap.Objects и текст из ListMap

var

k : integer;

begin

//пересчитываем координаты ячейки Col, Row в индекс списка

k := 2*Col + Row;

//уменьшаем размер ячейки таблицы с возможностью вывода в нее текста

Rect.Bottom:=Rect.Bottom-DrawGrid1.Canvas.TextHeight(‘1’)-1;

//рисуем картинку

DrawGrid1.Canvas.StretchDraw(Rect, ListMap.Objects[k] as

TBitmap);

//выводим текст

DrawGrid1.Canvas.TextOut(Rect.Left, Rect.Bottom - 1,

ListMap[k]);

end;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]