Материал: Технологии разработки приложений в средах Delphi и C++ Builder. Минаева Ю.В

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

Готовая форма с отредактированной таблицей и навигатором изображена на рис. 28.

  1. Пример таблицы с измененными свойствами

Чтобы не занимать БД в процессе проектирования приложения, можно присвоить свойству Active компонента Table1 значение false и устанавливать соединение с БД в момент запуска приложения, а при закрытии формы разрывать его:

// - - - - Object Pascal - - - -

procedure TForm1.FormCreate(Sender: TObject);

begin

Table1.Open;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Table1.Close;

end;

// - - - - - - - C++ - - - - - - -

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Table1->Open();

}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

Table1->Close();

}

В примерах показано использование методов Open и Close, назначение которых аналогично присвоению свойству Active значений true и false.

Компонент Table позволяет не только отображать, редактировать и упорядочивать данные, но и отфильтровывать записи по определенным критериям. Для задания фильтра используются свойства Filter, Filtered и FilterOptions.

Свойство Filtered включает или выключает использование фильтра, а сами фильтр записывается в свойство Filter в виде ограничений на значения полей. Например, можно задать в свойстве Filter значение

Surname = 'Павлов'

и в таблице отобразятся только записи, поле Surname которых равно указанному значению.

При записи условий можно использовать операции отношения (=, >, <, >=, <=, <>), а также логические операции and, or и not. Кроме того, в условиях сравнения строк можно использовать символ *, который обозначает, что на его месте могут находиться любые символы в любом количестве.

Например, при задании фильтра

Surname = 'C*'

в таблице отобразятся все записи, в которых фамилия начинается с буквы C.

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

// - - - - Object Pascal - - - -

Table1.Filtered := false;

Table1.Filter := 'Surname = ''' + Edit.Text + '''';

Table1.Filtered := true;

// - - - - - - - C++ - - - - - - -

Table1->Filtered = false;

Table1->Filter = "Surname = '" + Edit1->Text + "'";

Table1->Filtered = true;

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

  • First – перемещение к первой записи;

  • Last – перемещение к последней записи;

  • Next – перемещение к следующей записи;

  • Prior – перемещение к предыдущей записи.

Как и в случае файлов, компонент Table имеет функцию Eof, возвращающую true, если достигнут конец таблицы и false в противном случае.

Для того чтобы узнать значения какого-либо поля для текущей записи, можно использовать свойство FieldByName, но при этом необходимо обеспечить преобразование типов с помощью свойств AsString, AsInteger, AsFloat и др.

Например, перенесем все значения из поля Surname в расположенный на форме компонент Memo1:

// - - - - Object Pascal - - - -

Table1.First;

while not Table1.Eof do

begin

Memo1.Lines.Add(

Table1.FieldByName('Surname').AsString);

Table1.Next;

end;

// - - - - - - - C++ - - - - - - -

Table1->First();

while (!Table1->Eof)

{

Memo1->Lines->Add(

Table1->FieldByName("Surname")->AsString);

Table1->Next();

}

  1. Лабораторное задание

Написать программу для работы с БД, реализующую следующие функции:

  • добавление, изменение, удаление записей;

  • фильтрация по всем полям;

  • проверка вводимых значений;

  • сохранение всех полей БД в текстовый файл.

  1. Указания по оформлению отчета

Отчет должен содержать:

  • наименование и цель работы;

  • краткие теоретические сведения;

  • задание на лабораторную работу;

  • результаты выполнения лабораторной работы.

  1. контрольные вопросы

  1. На какие группы можно разделить компоненты Delphi, предназначенные для работы с БД?

  2. Как связать визуальный компонент с таблицей БД?

  3. С помощью каких свойств таблицы можно осуществить фильтрацию данных?

  4. Какие методы компонента Table позволяют перемещаться по записям таблицы?

Работа с графикой

  1. Общие указания по выполнению лабораторной работы

    1. Цель работы

Изучение основных принципов рисования на поверхности компонентов.

    1. Используемое оборудование и программное обеспечение

Для выполнения лабораторной работы требуется ПЭВМ типа IBM PC с ОС Windows 2000 и выше, среда разработки Borland Delphi 7 или Borland C++ Builder.

  1. Домашнее задание и методические указания по его выполнению

    1. Поверхность рисования

Основной класс для связанных с рисованием графических операций – это TCanvas. С помощью его свойств и методов можно рисовать на поверхности визуальных объектов, которые включают в себя этот класс и, соответственно, имеют свойство Canvas. К ним относятся, например, такие объекты, как форма Form, надпись Lable, графический образ Image. Наиболее часто рисование производится на поверхности формы.

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

Любая поверхность рисования включает в себя объекты пера TPen, кисти TBrush и шрифта TFont. Объекты пера и кисти используются для прорисовки и заполнения геометрических фигур, а объект шрифта позволяет управлять атрибутами текста, выводимого на поверхности.

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

Для перемещения текущего указателя в новую позицию можно использовать метод MoveTo(x, y: integer), перемещающий перо в новую позицию холста с координатами x и y. При таком перемещении на холсте ничего не рисуется. Положение текущего указателя также изменяют методы, связанные с выводом на холст фигур и текста: при их выполнении текущий указатель остается в позиции, где завершается процесс вывода.

При выполнении различных графических операций используются типы TPoint и TRect, которые описаны следующим образом:

TPoint = record

x: LongInt;

x: LongInt;

end;

TRect = record

Case integer of

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

1: (TopLeft, RightBottom: TPoint);

end;

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

Для рисования геометрических фигур используются следующие методы:

  • Arc(x1, y1, x2, y2, x3, y3, x4, y4: integer) – дуга;

  • Chord(x1, y1, x2, y2, x3, y3, x4, y4: integer) – хорда;

  • Ellipse(x1, y1, x2, y2: integer) – эллипс с заполнением;

  • FillRect(const Rect: TRect) – прямоугольник с заполнением;

  • FrameRect(const Rect: TRect) – незаполненный прямоугольник (рамка);

  • LineTo(x, y: integer) – линия от указателя до точки с координатами x и y;

  • Polygon(const Points: array of TPoint) – многоугольник с заполнением;

  • PolyLine(const Points: array of TPoint) – незаполненный многоугольник;

  • Rectangle(x1, y1, x2, y2: integer) – заполненный прямоугольник;

  • RoundRect(x1, y1, x2, y2, x3, y3: integer) – заполненный прямоугольник со скругленными краями.

У методов Arc, Chord и Ellipse параметры x1 и y1 задают координаты левого верхнего угла, а параметры x2 и y2 – правого нижнего угла прямоугольника, ограничивающего дугу, хорду или эллипс, соответственно. Параметры x3 и y3, x4 и y4 определяют координаты начальной и конечной точек дуги или хорды.

У методов Rectangle и RoundRect параметры x1 и y1 задают координаты левого верхнего угла, а параметры x2 и y2 – координаты правого нижнего угла прорисовываемого прямоугольника.

У методов Polygon и PolyLine параметр Points представляет собой массив с координатами вершин многоугольника.

Параметры линий фигур и их заполнение определяют текущие значения свойств пера и кисти поверхности рисования.

Для операций с выводимой на поверхность рисования текстовой информацией предназначены следующие методы и свойства.

Для отображения текстовой информации на поверхность рисования предназначен метод TextOut(x, y: integer; test: string). Эта процедура выводит строку текста, заданную параметром text, при этом координаты x и y устанавливают левый верхний угол области вывода. Параметры шрифта определяются текущим значением свойства Font поверхности, на которой отображается текст.

Важным свойством объекта класса TCanvas является свойство Pixels(x, y: integer) типа TColor, которое определяет цвет пиксела в точке, указанной индексами x и y двумерного массива координат. Это свойство доступно как для чтения, так и для записи.

Объекты класса TCanvas включают в себя объекта TFont, TPen и TBrush и, соответственно, имеют свойства Font, Pen и Brush.

Свойство Font устанавливает параметры шрифта, применяемого для отображения текста на поверхности рисования. Управление параметрами шрифта осуществляется через его свойства Name, Size, Style и др.

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

  • Color – цвет пера;

  • Style – стиль рисуемой линии; может принимать следующие значения: psSolid – сплошная линия (по умолчанию), psDash – штриховая линия, psDot – пунктирная линия, psDashDot – штрихпунктирная линия, psDashDotDot – линия вида штрих-точка-точка, psClear – невидимая линия, psInsideFrame – линия внутри прямоугольника поверхности рисования;

  • Mode – способ, в соответствии с которым перо при рисовании линии взаимодействует с имеющимися на холсте пикселами.

Свойство Brush определяет узор, используемый для заполнения геометрических фигур, например, прямоугольника или эллипса. Управление заполнением фигур осуществляется через свойства кисти, основными из которых являются следующие:

  • Color – цвет кисти;

  • Style – стиль кисти: bsSolid – сплошная заливка, bsClear – заливка отсутствует, bsHorixontal – параллельные горизонтальные линии, bsVertical – параллельные вертикальные линии, bsFDiagonal – параллельные диагональные линии, направленные вверх, bsBDiagonal – параллельные диагональные линии, направленные вниз, bsCross – прямая решетка, bsDiagCross – диагональная решетка;

  • Bitmap – растровое изображение, используемое в качестве стиля кисти.

Для определения текущего положения пера используется свойство PenPos типа TPoint.

При изменении содержимого поверхности рисования генерируются события OnChanging и OnChange. Первое из них возникает перед модификацией поверхности, а второе – после.

Т.к. свойство Canvas на этапе проектирования недоступно, то обработчики его событий программируются вручную.

Для примера нарисуем на форме несколько вложенных друг в друга квадратов:

// - - - - Object Pascal - - - -

var

i: integer;

x1, y1, x2, y2: integer;

brush_color: TColor;

begin

x1 := 100;

y1 := 100;

x2 := 300;

y2 := 300;

brush_color := 400;

for i := 1 to 5 do

begin

Canvas.Brush.Color := brush_color;

Canvas.Rectangle(x1, y1, x2, y2);

x1 := x1 + 10;

y1 := y1 + 10;

x2 := x2 - 10;

y2 := y2 - 10;

brush_color := brush_color + 25;

end;

// - - - - - - - C++ - - - - - - -

int x1 = 100, y1 = 100, x2 = 300, y2 = 300;

TColor brush_color = 400;

for (int i = 0; i < 5; i++)

{

Canvas->Brush->Color = brush_color;

Canvas->Rectangle(x1, y1, x2, y2);

x1 += 10;

x2 -= 10;

y1 += 10;

y2 -= 10;

brush_color += 25;

}

Результат работы программы приведен на рис. 29

Источник: https://studfile.net/preview/16569085/