ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.05.2021
Просмотров: 859
Скачиваний: 3
СОДЕРЖАНИЕ
Работа с переменными и массивами
Настройка компонента TStringGrid
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
Nmax=10; // Максимальная размерность массива
A : Mas2; // Объявление двумерного массива
B,Y : Mas1; // Объявление одномерных массивов
procedure TForm1.FormActivate(Sender: TObject);
{Процедура подготовки к началу работы}
N:=3; // Задание размерности массива
Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1
{Задание числа строк и столбцов в таблицах}
{Ввод в левую верхнюю ячейку таблицы названия массива}
StringGrid1.Cells[0,0]:='Массив A:';
StringGrid2.Cells[0,0]:='Массив B:';
StringGrid3.Cells[0,0]:='Массив Y:';
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.Button1Click(Sender: TObject);
{Процедура изменения размерности массива}
ShowMessage('Ошибочная запись числа '+Edit1.Text);
{Задание числа строк и столбцов в таблицах}
{Заполнение верхнего и левого столбцов поясняющими подписями}
StringGrid1.Cells[0,i]:=' i= '+IntToStr(i);
StringGrid1.Cells[i,0]:=' j= '+IntToStr(i);
procedure TForm1.BitBtn1Click(Sender: TObject);
{Заполнение массива А элементами из таблицы StringGrid1}
if StringGrid1.Cells[j,i]=' ' then
ShowMessage('Ошибка заполнения массива А');
A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]);
{Заполнение массива B элементами из таблицы StringGrid2}
if StringGrid2.Cells[0,i]=' ' then
ShowMessage('Ошибка заполнения массива В!');
B[i]:=StrToFloat (StringGrid2.Cells[0,i]);
ShowMessage ('Ошибочная запись числа '+StringGrid2.Cells[0,i]);
{Умножение массива А на массив В}
{Вывод результата в таблицу StringGrid3}
StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2);
procedure TForm1.BitBtn2Click(Sender: TObject);
{Очищение всех ячеек таблиц перед очередным прогоном программы}
Создание приложений для работы с базами данных На ОСНОВЕ ТЕХНОЛОГИИ bde
Рис. 9.- Расположение компонентов на форме
Рис. 10.- Рабочее окно программы
Свойство SQL имеет тип TStrings, который означает что это ряд строк, сохраняемых в списке. Список действует так же, как и массив, но, фактически, это специальный класс с собственными уникальными возможностями. В следующих нескольких абзацах будут рассмотрены наиболее часто используемые свойства.
Создание простого запроса
При программном использовании TQuery, рекомендуется сначала закрыть текущий запрос и очистить список строк в свойстве SQL:
Query1.Close;
Query1.SQL.Clear;
Обратите внимание, что всегда можно “безопасно” вызвать Close. Даже в том случае, если запрос уже закрыт, исключительная ситуация генерироваться не будет.
Следующий шаг - добавление новых строк в запрос:
Query1.SQL.Add(‘Select * from Country’);
Query1.SQL.Add(‘where Name = ’’Argentina’’’);
Метод Add используется для добавления одной или нескольких строк к запросу SQL. Общий объем ограничен только количеством памяти на вашей машине.
Чтобы Delphi отработал запрос и возвратил курсор, содержащий результат в виде таблицы, можно вызвать метод:
Query1.Open;
или
Query1.Active:=True;
TQuery и параметры
Delphi позволяет составить “гибкую” форму запроса, называемую параметризованным запросом. Такие запросы позволяют подставить значение переменной вместо отдельных слов в выражениях “where” или “insert”. Эта переменная может быть изменена практически в любое время. (Если используется локальный SQL, то можно сделать замену почти любого слова в утверждении SQL, но при этом та же самая возможность не поддерживается большинством серверов.)
Перед тем, как начать использовать параметризованные запросы, рассмотрим снова одно из простых вышеупомянутых предложений SQL:
Select * from Country where Name = ’’Argentina’’
Можно превратить это утверждение в параметризованный запрос заменив правую часть переменной NameStr:
select * from County where Name = :NameStr
В этом предложении SQL, NameStr не является предопределенной константой и может изменяться либо во время дизайна, либо во время выполнения. SQL parser (программа, которая разбирает текст запроса) понимает, что он имеет дело с параметром, а не константой потому, что параметру предшествует двоеточие ":NameStr". Это двоеточие сообщает Delphi о необходимости заменить переменную NameStr некоторой величиной, которая будет известна позже.
Обратите внимание, слово NameStr было выбрано абсолютно случайно. Использовать можно любое допустимое имя переменной, точно так же, как выбирается идентификатор переменной в программе.
Есть два пути присвоить значение переменной в параметризованном запросе SQL. Один способ состоит в том, чтобы использовать свойство Params объекта TQuery. Второй - использовать свойство DataSource для получения информации из другого DataSet. Вот ключевые свойства для достижения этих целей:
property Params[Index: Word];
function ParamByName(const Value: string);
property DataSource;
Если подставлять значение параметра в параметризованный запрос через свойство Params, то обычно нужно сделать четыре шага:
-
Закрыть TQuery
-
Подготовить объект TQuery, вызвав метод Prepare
-
Присвоить необходимые значения свойству Params
-
Открыть TQuery
Второй шаг выполняется в том случае, если данный текст запроса выполняется впервые, в дальнейшем его можно опустить.
Вот фрагмент кода, показывающий как это может быть выполнено практически:
Query1.Close;
Query1.Prepare;
Query1.Params[0].AsString := ‘Argentina’;
Query1.Open;
Params - это индексированное свойство, с помощью которого можно получить доступ к переменным в SQL запросе. Например, первой переменной в SQL запросе, можно присвоить определенное значение, адресуя нулевой элемент в массиве Params:
Query1.Params[0].AsString := ‘Argentina’;
Если параметризованный SQL запрос выглядит так:
select * from Country where Name = :NameStr,
то конечный результат (т.е. то, что выполнится на самом деле) - это следующее предложение SQL:
select * from Country where Name = “Argentina”
Все, что произошло, это переменной :NameStr было присвоено значение "Аргентина" через свойство Params. Таким образом, Вы закончили построение простого утверждения SQL.
Графический инструментарий
С помощью класса TFont создается объект-шрифт для любого графического устройства (экрана, принтера, плоттера и т. п.). Основные свойства класса представлены в табл. П7.1.
Таблица П7.1.
Свойства класса TFont
Свойство |
Описание |
property Color: TColor; |
Цвет шрифта |
property FontAdapter: IChangeNotifier; |
Поставляет информацию о шрифте в компоненте ActveX |
property Height: Integer; |
Высота шрифта в пикселях экрана |
property Name: TFontName; |
Имя шрифта. По умолчанию имеет значение MS Sans Serif |
property Size: Integer; |
Высота шрифта в пунктах (1/72 дюйма). Изменение этого свойства автоматически изменяет свойство Height и наоборот. |
property Style: TFontStyles; |
Стиль шрифта. Может принимать значение как комбинация следующих признаков: fsBold (жирный), fsltalic (курсив), fsUnderline (подчеркнутый), fsStrikeOut (перечеркнутый) |
С помощью класса TPеп создается объект-перо, служащий для вычерчивания линий. Основные свойства класса представлены в табл. П7.2.
Таблица П7.2.
Свойства класса ТРеn
Свойство |
Описание |
property Color: TColor; |
Цвет вычерчиваемых пером линий |
property Mode: TPenMode; |
Определяет способ взаимодействия линий с фоном (см.ниже) |
property Style: TPenStyle; |
Определяет стиль линий (см. рис. П7.1). Учитывается только для толщины линий 1 пиксель. Для толстых линий стиль всегда ps Solid (сплошная) |
property Width: Integer; |
Толщина линий в пикселях экрана |
Свойство Mode может принимать одно из следующих значений: |
|
pmBlack |
Линии всегда черные. Свойства Color и Style игнорируются |
pmWhite |
Линии всегда белые. Свойства Color и Style игнорируются |
pmNop |
Цвет фона не меняется (линии не видны) |
pmNot |
Инверсия цвета фона. Свойства Color и Style игнорируются |
pmCopy |
Цвет линий определяется свойством Color пера |
pmNotCopy |
Инверсия цвета пера. Свойство Style игнорируется |
pmMergePenNot |
Комбинация цвета пера и инверсионного цвета фона |
pmMaskPenNot |
Комбинация общих цветов для пера и инверсионного цвета фона. Свойство Style игнорируется |
pmMergeNotPen |
Комбинация инверсионного цвета пера и фона |
pmMaskNotPen |
Комбинация общих цветов для инверсионного цвета пера и фона. Свойство Style игнорируется |
pmMerge |
Комбинация цветов пера и фона |
pmNotMerge |
Инверсия цветов пера и фона. Свойство Style игнорируется |
pmMask |
Общие цвета пера и фона |
pmNotMask |
Инверсия общих цветов пера и фона |
pmXor |
Объединение цветов пера и фона операцией XOR |
pinNotXor |
Инверсия объединения цветов пера и фона операцией XOR |
Стили линий показаны на рис. П7.1.
Рис. П7.1. Стили линий
3. Класс TBrush
Объекты класса TBrush (кисти) служат для заполнения внутреннего пространства замкнутых фигур. Основные свойства класса представлены в табл. П7.3.
Таблица П7.3.
Свойства класса TBrush
Свойство |
Описание |
property Bitmap: TBitmap; |
Содержит растровое изображение, которое будет использоваться кистью для заполнения. Если это свойство определено, свойства Color и Style игнорируются |
property Color: TColor; |
Цвет кисти |
property Style: TBrushStyle; |
Стиль кисти |
4. Класс TCanvas
Этот класс создает “канву”, на которой можно рисовать чертежными инструментами - пером, кистью и шрифтом. Объекты класса TСаnvas автоматически создаются для всех видимых компонентов, которые должны уметь нарисовать себя. Они инкапсулируют объекты Font, Pen, Brush, а также многочисленные методы, использующие эти объекты. Основные свойства класса представлены в табл. П7.4.
Таблица П7.4.
Свойства класса TCanvas
Свойство |
Описание |
|
property Brush: TBrush; property ClipRect: TRect; |
Объект-кисть. Определяет текущие размеры области, нуждающейся в прорисовке |
|
property CopyMode: TCopyMode; |
Устанавливает способ взаимодействия растрового изображения с цветом фона |
|
property Font: TFont; |
Объект-шрифт |
|
property Pen: TPen; |
Объект-перо |
|
property PenPos:TPoint; |
Определяет текущее положение пера в пикселях относительно левого верхнего угла канвы |
|
property Pixels[X,Y:Integer]: TColor; |
Массив пикселей канвы
|
|
Свойство СopyMode может принимать одно из следующих значений (свойство используется при копировании части одной канвы (источника) в другую (приемник) методом copyRect). |
||
Свойство |
Описание |
|
cmBlackness |
Заполняет область рисования черным цветом |
|
cmDestInvert |
Заполняет область рисования инверсным цветом фона |
|
cmMergeCopy |
Объединяет изображение на канве и копируемое изображение операцией and |
|
cmMergePaint |
Объединяет изображение на канве и копируемое изображение операцией OR |
|
cmNotSrcCopy |
Копирует на канву инверсное изображение источника |
|
cmNotSrcErase |
Объединяет изображение на канве и копируемое изображение операцией OR и инвертирует полученное |
|
cmPatCopy |
Копирует образец источника |
|
cmPatInvert
|
Комбинирует образец источника с изображением на канве с помощью операции XOR |
|
cmPatPaint |
Комбинирует изображение источника с его образцом с помощью операции OR, затем полученное объединяется с изображением на канве также с помощью OR |
|
cmSrcAnd |
Объединяет изображение источника и канвы с помощью операции AND |
|
cmSrcCopy |
Копирует изображение источника на канву |
|
cmSrcErase |
Инвертирует изображение на канве и объединяет результат с изображением источника операцией AND |
|
cmSrcInvert |
Объединяет изображение на канве и источник операцией XOR |
|
cmSrcPaint |
Объединяет изображение на канве и источник операцией OR |
|
cmWhitness |
Заполняет область рисования белым цветом |
С помощью свойства pixels все пиксели канвы представляются в виде двухмерного массива точек. Изменяя цвет пикселей, можно прорисовывать изображение по отдельным точкам.
Методы класса представлены в табл. П7.5.
Таблица П7.5.
Методы класса TCanvas
Метод |
Описание |
procedure Arc(X1, Y1, X2, Y2, ХЗ, Y3, Х4, Y4: Integer); |
Чертит дугу эллипса в охватывающем прямо-угольнике (Xl,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведенного из его центра в точку (ХЗ,Y3), а конец-на пересечении с лучом из центра в точку (Х4,Y4). Дуга чертится против часовой стрелки. |
procedure BrushCopy (const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor); |
Копирует часть изображения Source на участок канвы Dest. Color указывает цвет в Dest, который должен заменяться на цвет кисти канвы. Метод введен для совместимости с ранними версиями Delphi. Вместо него следует пользоваться класс-сом Т Image List |
procedure Chord(XI, Yl, X2, Y2, X3, Y3, |
Чертит сегмент эллипса в охватывающем прямо-угольнике (XI,У1)-(X2,Y2). Начало дуги сегмента лежит на пересечении эллипса и луча, проведен-ного из его центра в точку (X3,Y3), а конец-на пересечении с лучом из центра в точку (X4,Y4). Дуга сегмента чертится против часовой стрелки, а начальная и конечная точки дуги соединяются прямой. |
procedure CopyRect (Dest: TRect; Canvas: TCanvas;Source: TRect) ; |
Копирует изображение Source канвы Canvas в участок Dest текущей канвы. При этом разнооб-разные специальные эффекты достигаются с по-мощью свойства CopyMode |
procedure Draw(X,Y:Integer; Graphic:TGraphic) ; |
Осуществляет прорисовку графического объекта Graphic так, чтобы левый верхний угол объекта расположился в точке (X, Y) |
procedure DrawFocusRect (const Rect:TRect) ; |
Прорисовывает прямоугольник с помощью операции XOR, поэтому повторная прорисовка уничтожает ранее вычерченный прямоугольник. Используется в основном для прорисовки нестандартных интерфейсных элементов при получении ими фокуса ввода и при потере его |
procedure Ellipse(XI, Yl, X2, Y2: Integers; |
Чертит эллипс в охватывающем прямоугольнике (XI,Yl)-(X2,Y2). Заполняет внутреннее простран-ство эллипса текущей кистью |
procedure FillRect(const Rect: TRect); |
Заполняет текущей кистью прямоугольную об-ласть Rect, включая ее левую и верхнюю грани-цы, но не затрагивая правую и нижнюю границы |
procedure Flood- Fill(X, Y: Integer; Color: TColor; Fill Style: TFillStyle); |
Производит заливку канвы текущей кистью. Заливка начинается с точки (X,Y) и распрост-раняется вовсе стороны от нее. Если FillStyle= fsSurface, заливка распространяется на все сосе-дние точки с цветом Color. Если FillStyle= fsBorder, наоборот, заливка прекращается на точ-ках с этим цветом |
procedure FrameRect(const Rect: TRect); |
Очерчивает границы прямоугольника Rect теку-щей кистью толщиной в 1пиксель без заполнения внутренней части прямоугольника |
procedure LineTo(X, Y: Integer); |
Чертит линию от текущего положения пера до точки (X,Y) |
procedure Lock;
|
Блокирует канву в многопоточных приложениях для предотвращения использования канвы в других по токах команд |
procedure MoveTo(X,Y: Integer); |
Перемещает перо в положение (X,Y) без вычер-чивания линий |
procedure Pie(XI, Yl, X2, Y2, X3, Y3, X4, Y4: Longint);
|
Рисует сектор эллипса в охватывающем прямоугольнике (XI,Yl)-(X2,Y2). Начало дуги лежит на пересечении эллипса и луча, проведен-ного из его центра в точку (X3,Y3), а конец - на пересечении случом из центра в точку (X4,Y4). Дуга чертится против часовой стрелки. Начало и конец дуги соединяются прямыми с ее центром |
procedure Polygon. (Points: array of TPoint) ;
|
Вычерчивает пером многоугольник по точкам, за-данным в массиве Points. Конечная точка соеди-няется с начальной и многоугольник заполняется кистью. Без заполнения используйте -Polyline |
procedure Polyline (Points: array of TPoint); |
Вычерчивает пером ломаную прямую по точкам, заданным в массиве Points |
procedure Rectan gle(XI, Yl, X2, Y2: Integer); |
Вычерчивает и заполняет прямоугольник (XI,Yl)-S(X2,Y2). Для вычерчивания без заполнения используйте FrameRect или Polyline |
procedure Refresh; |
Устанавливает в канве умалчиваемые шрифт и кисть |
procedure RoundRect(Xl, Yl, X2,Y2, X3, Y3: Inte ger) ; |
Вычерчивает и заполняет прямоугольник (XI,Yl)- (X2,Y2) со скругленными углами. Прямоугольник (XI,Yl)-(X3,Y3) определяет дугу эллипса для округления углов |
procedure Stretch Draw (const Rect:TRect; Graphic: TGraphic ); |
Вычерчивает и при необходимости масштабирует графический объект Graphic так, чтобы он полностью занял прямоугольник Rect |
function TextExtent (const Text:String): TSize; |
Возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text |
function TextHeight (const Text: String): Integer; |
Возвращает высоту прямоугольника, охватыва-ющего текстовую строку Text |
procedure TextOut(X, Y: Integer; const Text: String) ; |
Выводит текстовую строку Text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (X, Y) |
procedure TextRect(Rect: TRect; X, Y: Integer; const Text: String) ; |
Выводит текстовую строку Text так, чтобы левый верхний угол прямоугольника, охватывающего текст, располагался в точке (х, Y). Если при этом какая-либо часть надписи выходит из границ прямоугольника Rect, она отсекается и не будет видна |
function TextWidth (const Text:String): Integer; |
Возвращает ширину прямоугольника, охватываю-щего текстовую строку Text |
function TryLock: Boolean; |
Пытается заблокировать канву. Если она не заб-локирована другим потоком команд,-True, в про-тивном случае ничего не делает и возвращает False |
procedure Unlock; |
Уменьшает на 1 счетчик блокировок канвы |