ТАБЛИЦЫ (Методичка С++), страница 2

2013-09-07СтудИзба

Описание файла

Файл "ТАБЛИЦЫ" внутри архива находится в папке "METODY". Документ из архива "Методичка С++", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика" в общих файлах.

Онлайн просмотр документа "ТАБЛИЦЫ"

Текст 2 страницы из документа "ТАБЛИЦЫ"

j:=random(10);

begin

Rect:=DrawGrid1.CellRect(j,0); {размеры прямоугольника, занимаемого ячейкой с индексами (j,0)}

c:=Random(clWhite);

DrawGrid1.Canvas.Brush.Color:=c; {задание цвета фона}

DrawGrid1.Canvas.FillRect(Rect); (заполнение прямоугольника цветом)

end;

{цикл , в котором осуществляется «падение»}

for i:=1 to 11 do

begin

for k:=1 to 100000000 do; {задержка}

{Перерисовка ячеек}

DrawGrid1.Canvas.Brush.Color:=clWhite;

DrawGrid1.Canvas.FillRect(Rect);

Rect:=DrawGrid1.CellRect(j,i);

DrawGrid1.Canvas.Brush.Color:=c;

DrawGrid1.Canvas.FillRect(Rect);

end;

end;

Прежде чем заполнить ячейку цветом мы должны определить координаты прямоугольника, который занимает ячейка. Такие координаты определяются при помощи метода CellRect(Col, Row). В этой процедуре используется переменная Rect типа TRect. Тип TRect имеет следующий вид

TRect = record

case Integer of

0: (Left, Top, Right, Bottom: Integer);

1: (TopLeft, BottomRight: TPoint);

end;

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

Теперь запустим программу. На экране появится форма с пустой таблицей. Если теперь нажать на кнопку «Пуск», то с верхней строки таблицы начнет падать цветной квадратик (см. рис. 2).

3Таблица StringGrid

Таблица TStringGrid является потомком класса TDrawGrid. Таблица класса TStringGrid удобна если нужно работать с текстовой информацией. Также в этой таблице можно хранить и графические объекты. Кроме наследуемых класс TStringGrid обладает собственными характеристиками. Отметим следующие свойства этого класса.

Cell[Col,Row] – свойство-массив типа string. Col и Row - индексы целого типа, представляющими собой индексы столбцов и строк. Определяет ячейку, находящуюся в столбце Col и строке Row.

Cols[Index] – свойство-массив типа string с индексами целого типа. Определяет столбец таблицы с индексом Index.

Rows[Index] – свойство-массив типа string с индексами целого типа. Определяет cтроку таблицы с индексом Index.

Objects[Col, Row] – свойство-массив типа TObject с индексами целого типа. Содержит указатель на объект, находящейся в столбце Col и строке Row. Например, оператор

StringGrid1.Objects[2, 3] := MyIcon;

определяет, что в ячейке с индексами (2, 3) будет находиться объект с именем MyIcon. Заметим, что сначала нужно создать объект нужного типа. Например, если MyIcon имеет тип ТIcon, то нужно использовать опеатор

StringGrid1.Objects[2, 3] := ТIcon.Create;

Наиболее просто работать с такими таблицами в случае, когда ячейки должны содержать только текстовую информацию. В этом случае следует установить свойству DefoultDrawing значение true и задать для каждой ячейки соответствующий текст, используя свойство Cell (это свойство доступно только на этапе выполнения программы).

Пример. Создадим таблицу, в которую занесем фамилии студентов, их экзаменационные оценки по трем предметам и средний балл.

Используя страницу Additional палитры компонент, разместим на форме компоненту StringGrid. Она получит имя StringGrid1. С помощью инспектора объектов удалим горизонтальную линейку прокрутки таблицы строк (нам потребуется только вертикальная), для чего зададим свойству ScrollBars значение ssVertical.

П
усть наша таблица будет рассчитана на 20 человек. Зададим свойству RowCount значение 21 (одна строка нам понадобится для заголовков столбцов таблицы), а свойству ColCount – значение 6. Теперь таблица имеет вид, изображенный на рисунке 3.

В разделе описания типов опишем два новых типа. Тип s15 задает строку из 15 символов, которая будет предназначена для хранения фамилии студента. Тип zap представляет собой запись, которая состоит из фамилии студента и целочисленного массива для хранения оценок по трем предметам.

s15=string[15];

zap= record

fam: s15; {фамилия студента}


ball:array [1..3] of integer; {массив оценок по трем предметам}

end;

На странице Events инспектора объектов для кнопки StringGrid1активизируем мышью (двумя щелчками) событие OnShow и в заготовку обработчика события поместим текст программы, при помощи которого информация о студентах, хранящаяся в файле text.txt, разместиться в таблице.

Сначала, при помощи метода Cell зададим название столбцов таблицы. Затем откроем файл text.txt и, используя цикл, будем читать по одной записи из файла и заносить эти данные в таблицу. Параллельно будет производиться подсчет среднего балла.

procedure TForm1.FormShow(Sender: TObject);

var i,j,size:integer;

begin

{Названия столбцов}

StringGrid1.Cells[1,0]:='Фамилия';

StringGrid1.Cells[2,0]:='Математика';

StringGrid1.Cells[3,0]:='Физика';

StringGrid1.Cells[4,0]:='Химия';

StringGrid1.Cells[5,0]:='Средний балл';

assignFile(f,'text.txt');

reset(f);

{заполнение таблицы}

i:=0;

while not eof(f) do

begin

i:=i+1;

StringGrid1.Cells[0,i]:=IntToStr(i); {вывод порядкового номера записи}

read(f,z); {чтение записи}

StringGrid1.Cells[1,i]:=z.fam; {вывод фамилии}

mid:=0;

for j:=1 to 3 do {вывод оценок}

begin

mid:=Mid+z.ball[j];

StringGrid1.Cells[j+1,i]:=IntToStr(z.ball[j]);

end;

mid:=mid/3;

StringGrid1.Cells[5,i]:=FloatToStr(mid); {вывод среднего балла}

end;

end;

Если теперь запустить проект, то в результате на экране появится таблица, изображенная на рисунке 4. Мы можем просматривать все записи, используя вертикальную линейку прокрутки.

Если кроме текста необходимо отображать изображение, то придется дополнительно создать объекты, содержащие необходимые изображения, поместить указатель на них в свойство Object и написать обработчик события OnDrawCell, который будет отображать эти изображения.

Заметим, что если значение свойства DefoultDrawing имеет значение true, то вначале в верхней части таблице прорисовывается текст, заданный свойством Cell, а затем вызывается обработчик события OnDrawCell, если этот обработчик назначен. Как правило, обработчик помещает в ячейку изображение, определяемое свойством Object. Если свойство DefoultDrawing имеет значение false, то отображение ячейки полностью определяется обработчиком события OnDrawCell.

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

Прежде чем заносить изображение в ячейку таблицы следует сначала создать объект нужного класса. В зависимости от вида изображения, это может быть объект типа TIcon для файлов с расширением ico, TBitmap для файлов с расширением bmp и TMetafile для файлов с расширением emf или wmf. После того, как объект создан, можно загружать графический файл. Например, если мы хотим в ячейке с индексом (1, 1) изобразить картинку, которая сохранена в файле с расширением bmp, то можно использовать следующую последовательность команд.

Objects[1,1]:=TBitmap.Create;

with StringGrid1.Objects[1,1] as TBitmap do

LoadFromFile(‘Имя_файла’);

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

procedure TForm1.LoadPic(k,l:integer);

var i,j:integer;

begin

with StringGrid1 do

begin

for i:=0 to 2 do

for j:=0 to 2 do

begin

Objects[i,j]:=TBitmap.Create; {Создание объекта типа TBitmap}

with StringGrid1.Objects[i,j] as TBitmap do

if (i=k) and (j=l) then LoadFromFile('U.bmp'

else LoadFromFile('g.bmp'); {Загрузка изображения}

end;

end;

end;

В методе LoadPic для каждой ячейки создается объект типа TBitmap, а затем загружается изображение для ячейки с индексами (i,j) из файла u.bmp, а для всех остальных из файла g.bmp.

Теперь нужно написать обработчик события OnDrawCell, который будет состоять только из одного оператора, вызывающего метод StringGrid1DrawCell, который размешает изображение в ячейках. Параметры метода – это координаты левого верхнего угла изображения относительно ячейки и объект, который должен быть изображен. Активизируем мышью событие OnDrawCell для таблицы StringGrid1 на странице Events инспектора объектов и запишем следующий текст.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

begin

StringGrid1.Canvas.Draw(Rect.Left+12,Rect.Top+12,

TBitmap(StringGrid1.Objects[ACol,ARow]));

end;

Выделим форму и в странице Events инспектора объектов активизируем мышью событие OnActivate формы. Здесь мы вызовем метод LoadPic c параметрами (1,1) для того, чтобы задать начальное изображение таблицы (отличная картинка будет находиться в ячейке с индексами (1,1)).

procedure TForm1.FormActivate(Sender: TObject);

begin

LoadPic(1,1);

end;

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

procedure TForm1.StringGrid1MouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var i,j:integer;

begin

StringGrid1.MouseToCell(x,y,i,j); {Определяем индексы ячейки}

LoadPic(i,j); {Создаем объекты и загружаем файлы}

{Перерисовываем содержимое ячеек}

StringGrid1.OnDrawCell:=StringGrid1DrawCell;

end;

4Компонента TListView

Компоненту ListView тоже можно отнести к таблицам, т.к. она тоже позволяет отображать двумерную информацию. Но в отличии от других, рассмотренных таблиц, эта компонента позволяет отображать информацию несколькими способами. Опишем некоторые из свойств компоненты TlistView.

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5183
Авторов
на СтудИзбе
435
Средний доход
с одного платного файла
Обучение Подробнее