- •Министерство образования российской федерации
- •Северо-западный государственный заочный технический университет
- •В. Л. Макаров
- •Прикладное программирование
- •Конспект лекций с. Петербург 2003г
- •Окно формы. Форма является основой большинства приложений , так как на ней размещаются другие управляющие компоненты. Внешний вид окна формы показан на рисунке 1.3.
- •3.Основные свойства, методы и события формы
- •Компоненты vcl
- •5.1. Кнопки управления
- •5.2. Окно редактирования Edit
- •5.3 Многострочные окна редактирования Memo и RichEdit
- •5.4 Компоненты выбора из списков – ListBox, CheckListBox, ComboBox
- •5.5 Элемент управления Label (надпись или метка)
- •5.6 Элемент управления RadioButton (Радиокнопка)
- •5.7 Полосы прокрутки (ScrollBar)
- •5.9 Компонент Timer(Таймер)
- •5.10 Компонент StringGrid ( таблица строк)
- •5.11 Компонент Chart – графики и диаграммы
- •5.12 Компонент f1Book
- •6. Создание меню
- •7. Системные диалоги
- •7.1 Диалоги открытия и сохранения файлов
- •7.2 Диалог выбора шрифта(компонент FontDialog )
- •7.3 Диалог выбора цвета(компонент ColorDialog )
- •7.4Диалоги поиска и замены текста(компоненты FindDialog и ReplaceDialog )
- •8.1 Структура головного файла проекта
- •8.2 Структура файлов модулей форм
5.9 Компонент Timer(Таймер)
Это компонент позволяет задавать в приложении временные интервалы и может размещаться в любом месте формы ,т.к. относится к не визуальным компонентам. . Таймер имеет два свойства :
Interval – свойство, которое определяет период срабатывания таймера в миллисекундах.
Enabled – свойство с помощью которого управляют запуском и остановом таймера.
По истечении заданного интервала времени таймер срабатывает , вызывая событие OnTimer, а в обработчике этого события записываются необходимые операции. Например, если требуется через 5 сек после запуска приложения закрыть форму – заставку , отображающую логотип приложения , на ней надо разместить таймер , задав в нем Interval =5000.Затем в обработчике события OnTimer вставить оператор Close, закрывающий окно формы. В некоторых процедурах необходимо запустить таймер для отсчета заданного временного интервала, после которого необходимо выполнить некоторые операции и отключить таймер. Возможный вариант решения поставленной задачи заключается в следующем. Во время проектирования задается значение
свойства Interval и значение свойства Enabled = false. В момент , когда нужно запустить таймер , выполняется оператор Timer -> Enabled = true;.После чего в обработчике события OnTimer вставляется оператор Timer -> Enabled = false;, который отключает таймер.
5.10 Компонент StringGrid ( таблица строк)
Компонент StringGrid расположен на вкладке Additional и представляет собой таблицу, содержащую строки. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствие некоторый объект. Таблица предназначена в первую очередь для отображения текстовой информации, но в ней можно отображать и графическую информацию.
Основные свойства компонента, определяющие отображаемый текст:
Cells - строка, содержащаяся в ячейке с заданными индексами столбца и строки;
Cols - список строк, содержащихся в столбце с заданным индексом;
Rows - список строк, содержащихся в строке с заданным индексом;
Objects - объект, связанный со строкой, содержащейся в ячейке с заданными индексами столбца и строки. Все эти свойства доступны во время выполнения программы. Из основных свойств доступных во время проектирования следует выделить свойства:
ColCount и RowCount - определяют соответственно число столбцов и строк;
FixedCols и FixedRows - определяют число фиксированных столбцов и строк;
FixedColor – определяет цвет фона фиксированных ячеек ;
ScrollBars - определяет наличие в таблице полос прокрутки. Причем полосы прокрутки появляются и исчезают автоматически в зависимости от того, помещается таблица в соответствующий размер, или нет.
Свойство Options является множеством, определяющим многие свойства таблицы. Наличие разделительных вертикальных и горизонтальных линий в фиксированных
ячейках определяется свойствами(goFixedVertLine и goFixedHorzLine), а в не фиксированных ячейках - свойствами (goVertLine и goHorzLine).Свойства (goColSizing и goRowSizing), определяют возможность изменения с помощью мыши размеров столбцов и строк, а свойства (goColMoving и goRowMoving) определяют возможность перемещения столбцов и строк и многое другое. Важным элементом в свойстве Options является goEditing - возможность редактировать содержимое таблицы.
Из методов компонента StringGrid следует отметить метод MouseCoord, который возвращает индексы строки и столбца ячейки, содержащей точку с заданными координатами экрана. Используется для идентификации ячейки под курсором мыши.
События компонента ,в основном ,связаны с процессом редактирования таблицы. Наиболее важными из них являются:
Cобытия OnColumnMoved и OnRowMoved происходят после изменения позиций колонки и ряда;
Cобытие OnSelectCell происходит перед выделением ячейки;
Событие OnSetEditText происходит, когда пользователь редактирует значение ячейки таблицы.
Основные свойства таблицы StringGrid демонстрирует приложение , приведенное на рисунках 5.19 и 5.20. На первом рисунке показан интерфейс приложения , а на втором –программный код. В интерфейсе приложения(Рис.5.19) используется форма, на которой размещены : компонент StringGrid ,многострочное окно редактирования Memo1 , метка Label1 и восемь кнопок типа Button. Окно редактирования используется для демонстрации операторов кода при выполнении программы . Назначение других компонентов и их свойства, установленные во время проектирования, поясняются в таблице 5.11.
Таблица 5.11
-
Компонент
Свойство
Значение
Форма
Caption
Таблица StringGrid
Кнопки
Caption
Считывание информации (Button1)
Caption
Ввод информации (Button2)
Caption
Ввод одномерного массива (Button3)
Caption
Вывод одномерного массива (Button4)
Caption
Ввод двумерного массива (Button5)
Caption
Вывод двумерного массива (Button6)
Caption
Ввод текста в 3-ю строку(Button8)
Caption
Ввод текста в 3-й столбец (Button7)
Метка
Caption
Текст кода
Таблица
Name
StringGrid
Окно редактиров.
Name
Memo1
Другие свойства компонентов принимаются по умолчанию.
Рис.5.19 Интерфейс приложения, характеризующего основные свойства таблицы
StringGrid
// Программный код приложения , демонстрирующего ряд свойств таблицы
StringGrid
#include <vcl.h>
#pragma hdrstop
#include "iostream.h"
#include "Unit1_Grid.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Занесение надписей в ячейки таблицы по указанным адресам
StringGrid1->Cells[1][0]= "Исходные данные";
StringGrid1->Cells[0][1]="Первое слагаемое ";
StringGrid1->Cells[0][2]="Второе слагаемое ";
StringGrid1->Cells[0][3]="Сумма ";
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add( "StringGrid1->Cells[1][0]=Исходные данные");
Memo1->Lines->Add( "StringGrid1->Cells[0][1]=Первое слагаемое");
Memo1->Lines->Add( "StringGrid1->Cells[0][2]=Второе слагаемое ");
Memo1->Lines->Add( "StringGrid1->Cells[0][3]=Сумма ");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int X,Y,Z;
//Преобразование строковых переменных в целочисленные
X=StrToInt( StringGrid1->Cells[1][1] );
Y=StrToInt( StringGrid1->Cells[1][2]);
Z= X+Y;
//Преобразование целочисленной переменной Z в строковую и запись ее в ячейку по //указанному адресу
StringGrid1->Cells[1][3]=IntToStr(Z);
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add(" int X,Y,Z");
Memo1->Lines->Add(" X=StrToInt( StringGrid1->Cells[1][1] )");
Memo1->Lines->Add(" Y=StrToInt( StringGrid1->Cells[1][2])");
Memo1->Lines->Add("Z= X+Y; StringGrid1->Cells[1][3]=IntToStr(Z)");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//Занесение надписи в ячейку таблицы по указанному адресу
StringGrid1->Cells[2][0]= "Одном.массив ввод";
//Ввод в ячейки таблицы элементов одномерного массива
for(int i=1;i<10;i++)
{
int y =i*i;
StringGrid1->Cells[2][i]= IntToStr(y);
}
//Занесение операторов кода в поле Memo1
Memo1->Clear();
Memo1->Lines->Add(" StringGrid1->Cells[2][0]= Одном.массив ввод");
Memo1->Lines->Add("for(int i=1;i<10;i++)");
Memo1->Lines->Add( "{ int y =i*i; StringGrid1->Cells[2][i]= IntToStr(y);");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
//Вывод в ячейки таблицы элементов одномерного массива
StringGrid1->Cells[3][0]= "Одном.массив вывод";
for(int i=1;i<10;i++)
{
int y ;
y=StrToInt(StringGrid1->Cells[2][i]);
StringGrid1->Cells[3][i]= IntToStr(++y);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//Ввод в ячейки таблицы элементов двумерного массива
StringGrid1->Cells[4][0]= "Двум.массив ";
StringGrid1->Cells[5][0]= "размерностью [3][3]";
StringGrid1->Cells[6][0]= "ввод";
for(int i=1;i<4;i++)
for(int j=1;j<4;j++)
{
int y =i*i+j;
StringGrid1->Cells[j+3][i]= IntToStr(y);
}
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add(" StringGrid1->Cells[4][0]= Двум.массив ;");
Memo1->Lines->Add(" StringGrid1->Cells[5][0]= размерностью [3][3];");
Memo1->Lines->Add(" StringGrid1->Cells[6][0]= ввод;");
Memo1->Lines->Add(" for(int i=1;i<4;i++) ");
Memo1->Lines->Add(" for(int j=1;j<4;j++) ");
Memo1->Lines->Add("{ int y =i*i+j; ");
Memo1->Lines->Add("StringGrid1->Cells[j+3][i]= IntToStr(y);");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button6Click(TObject *Sender)
{
//Вывод в ячейки таблицы элементов двумерного массива
StringGrid1->Cells[7][0]= "Двум.массив ";
StringGrid1->Cells[8][0]= "размерностью [3][3]";
StringGrid1->Cells[9][0]= "Вывод";
for(int i=1;i<4;i++)
for(int j=1;j<4;j++)
{
int y ;
y=StrToInt(StringGrid1->Cells[j+3][i]);
StringGrid1->Cells[j+6][i]= IntToStr(y);
}
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add(" StringGrid1->Cells[7][0]= Двум.массив ;");
Memo1->Lines->Add(" StringGrid1->Cells[8][0]= размерностью [3][3];");
Memo1->Lines->Add(" StringGrid1->Cells[9][0]= Вывод;");
Memo1->Lines->Add(" for(int i=1;i<4;i++) ");
Memo1->Lines->Add(" for(int j=1;j<4;j++) ");
Memo1->Lines->Add("{ int y ;y=StrToInt(StringGrid1->Cells[j+3][i]); ");
Memo1->Lines->Add(" StringGrid1->Cells[j+6][i]= IntToStr(y);");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
//Ввод текста в третий столбец
StringGrid1->Cols[3]->Add("Ввод текста в столбец");
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add("StringGrid1->Cols[3]->Add(Ввод текста в столбец); ");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{
//Ввод текста в третью строку
StringGrid1->Rows[3]->Add("Ввод текста в строку");
Memo1->Clear();
//Занесение операторов кода в поле Memo1
Memo1->Lines->Add(" StringGrid1->Rows[3]->Add(Ввод текста в строку);");
}
//---------------------------------------------------------------------------
Рис.5.20 Программный код приложения, характеризующего основные свойства таблицы StringGrid
В программном коде( Рис.5.20) показано, что свойства компонента StringGrid реализуются при включении радио кнопок Button1 – Button8 . Изменяемые свойства непосредственно отображаются на самом компоненте ,а соответствующий программный код заносится в окно редактора Memo1. Программа позволяет заносить в указанные ячейки таблицы текстовую и числовую информацию, вводить и выводить одномерные и двумерные массивы, вводить текстовую информацию в указанный столбец или строку. Назначение операторов программного кода поясняется подробными комментариями.