Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рабочая тетрадь по ООП.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
320 Кб
Скачать

Лекция 6. Библиотека визуальных компонентов. Описание компонентов vcl (продолжение)

Внутренний интерфейс Drag & Drop.

Ввод и редактирование текста. Оформление приложений.

ИНТЕРФЕЙС Drag$Drop

Интерфейс этот внутренний, т.к. передавать и принимать можно любые управляющие элементы только внутри формы (кроме самой формы).

Нажав левую кнопку мыши над элементом управления, мы можем перетащить его на любой другой элемент.

С точки зрения программиста это означает,

что в моменты перетаскивания и отпускания клавиши мыши генерируются определенные события, которым передается вся необходимая информация:

указатель на перетаскиваемый объект,

текущие координаты курсора и др.

Получателем событий является тот элемент, на котором в данный момент находится курсор.

Обработчик такого события должен сообщить системе, принимает ли данный элемент «посылку» или нет.

При перетаскивании рассматривают основных действия:

начало перетаскивания,

определение возможности принятия перетаскиваемых элементов,

«бросание»элемента,

конец перетаскивания.

1. Способ работы с этим интерфейсом определяется свойством DragMode :

TDragMode = (dmManual, dmAutomatic);

Для автоматического включения механизмов интерфейса необходимо, чтобы это свойство у перетаскиваемого компонента было установлено в значение dmAutomatic.

Это означает, что на всех стадиях перетаскивания нужные функции вызываются без участия программиста.

Его задача - определить методы событий.

2. Во время перетаскивания при перемещении курсора мыши с перетаскиваемым элементом над другим элементом управления, а также при опускании кнопки у компонента, на который опускается другой компонент, например, у формы, возникает событие:

OnDragOver : TDragEvent;

TDragEvent = procedure (Sender, Source : TObject; X,Y : Integer; State : TDragState; var Accept : Boolean) of object;

Параметры события:

Sender – указатель на объект, вызвавший данный метод (элемент, над которым находится курсор),

Source – параметр-приемник сообщения (перетаскиваемый элемент),

X,Y – координаты курсора (в системе клиентской области Sender),

State – одно из трех состояний:

dsDragEnter – курсор мыши появился над элементом,

dsDragMove – курсор мыши переместился над элементом,

dsDragLeave – курсор мыши ушел с элемента или была опущена кнопка

Обработчик этого события должен возвратить в булевскую переменную Accept решение, примет ли данный элемент объект Source или нет.

Если обработчик этого события отсутствует, то элемент управления не может работать приемником, т.е. на него нельзя перетащить.

Во время перетаскивания над элементом управления обработчик может изменить вид курсора, сигнализируя о готовности приема.

Это свойство курсора DragCursor.

Если компонент не является приемником Drag & Drop,

или обработчик события OnDragOver отсутствует,

или возвращает значение False,

то появляется другой курсор crNoDrop .

3. Событие

OnDragDrop : TDragDropEvent;

TDragDropEvent = procedure (Sender, Source : TObject; X,Y : Integer) of object;

возникает во время перетаскивания при опускании левой кнопки мыши над элементом, готовым к приему (когда «бросают» элемент).

События OnEndDrag и OnStartDrag – это события, предназначенные для перетаскиваемого компонента, а

OnDragOver и OnDragDrop – предназначены для компонента, на который опускается другой компонент.

Пример. На форму установить компонент (например, Shape1), который будем перетаскивать.

Алгоритм работы:

у компонента установить свойство DragMode = dmAutomatic,

так как перетаскивать будем по форме, то необходимо оформить ее «согласие»,

написать обработчик OnDragDrop формы для перемещения по ней компонента.

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept:= True;

end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);

begin

With Source as TShape do

begin

Left := x;

Top := y;

end;

end;

as - оператор преобразования типа (компилятору указывается, что объект следует рассматривать как экземпляр указанного класса).

Если свойство DragMode находится режиме dmManual (принимаемом по умолчанию), то все необходимые вызовы функций нужно делать самому программисту.

(пример рассмотрен в пособии гл.11).

ВВОД И РЕДАКТИРОВАНИЕ ТЕКСТА

В палитру компонентов входят следующие компоненты, позволяющие вводить и редактировать текст:

TEdit – строка ввода,

TMaskEdit - шаблон для ввода данных,

TMemo - многострочный редактор,

TRichEdit - многострочный редактор (*.rtf).

Класс TCustomEdit – их общий предок.

Класс TCustomEdit

В этой группе компонентов текст содержится в основном, в свойстве Text : TCaption;

TCaption = string [255];

Часть текста может быть выделена. Свойства

SelStart : Integer;

SelLength : Integer;

определяют начало и длину (в символах) выделенного в редакторе текста.

SelText : String; - свойство содержит сам выделенный текст

ClearSelection - метод исключает из текста выделенный фрагмент,

SelectAll – метод выделяет весь текст в свойстве.

Методы для работы с буфером обмена

CopyToClipboard;

CutToClipboard;

PasteToClipboard;

рассмотрены в работе 8 пособия.

Clear; - метод очистки от текста редактора.

Компонент TEdit

BorderStyle - стиль обрамления компонента (по умолчанию равен bsSingle).

AutoSize : Boolean;- подгонка размера компонента под шрифт (при = True и стиле bsSingle).

CharCase - символы можно преобразовывать в верхний либо нижний регистр (ecNormal, ecUpperCase, ecLowerCase).

По умолчанию установлен стиль ecNormal и преобразований нет.

AutoSelect :Boolean; - если установлено в True, то при получении фокуса ввода, весь текст выделяется независимо от состояния свойства SelText.

ReadOnly : Boolean; - можно запретить изменение текста

Компонент TMaskEdit

Этот специальный редактор допускает лишь ввод текста по шаблону: пароли, регистрационные номера, даты и др.

Шаблон ввода в виде строки содержится в свойстве

EditMask : String;

Если он не определен, то компонент работает как обычный редактор.

Компонент TMemo

Компонент представляет собой многострочный редактор.

Lines : TStrings; - хранит текст в виде набора строк {при двойном щелчке в поле значения свойства появляется Редактор строк}

Текст в редакторе может выравниваться по левому краю, правому и центру:

Alignment : TAlignment; ( taLeftJustify, taRightJustify, taCenter);

ScrollBars–устанавливает полосы прокрутки.

На стадии проектирования компонент TMemo можно заполнить исходным текстом через Редактор строк, либо загрузить из буфера обмена (см. работу 8), либо из файла:

Memo1.Lines.LoadFromFile('e:\zp\a.edi');

Записать в файл:

Memo1.Lines.SaveToFile('e:\zp\a.txt');

Компонент RichEdit

Текстовый процессор без излишеств, создающий текст в универсальном формате .rtf.

Разработаем текстовый редактор с пунктами меню New, Open, Save as, Exit, разработка которых рассмотрена в пособии.

Расположим следующие компоненты:

procedure TForm1.New1Click(Sender: TObject);

begin

RichEdit1.Clear;

end;

procedure TForm1.Open1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);

end;

end;

procedure TForm1.SaveAs1Click(Sender: TObject);

begin

If SaveDialog1.Execute then

begin RichEdit1.Lines.SaveToFile(SaveDialog1.FileName);

end;

end;

procedure TForm1.Exit1Click(Sender: TObject);

begin

Close;

end;

ОФОРМЛЕНИЕ ПРИЛОЖЕНИЯ

Основное назначение этих компонентов – обеспечить форме нужный вид.

Компоненты предназначены для отображения информации для пользователя : рисунок, текст, таблицы.

Все они являются потомками класса TGraphicControl

Мы говорили, что компонент – объект + программная его визуализация, т.е.

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

Он называется холстом и оформлен в виде объекта Canvas.

Canvas имеет пять главных свойств:

Pen – объект для рисования линий и контуров геометрических фигур, это составное свойство:

Pen.Color – цвет линии,

Pen.Style – стиль линии,

Pen.Width – толщина линии.

Brush – объект для заполнения фигур, это составное свойство:

Brush.Color – цвет заполнения,

Brush.Style – стиль заполнения.

Font – объект для вывода текста ,

PenPos – объект для хранения текущей позиции рисования, и используется при рисовании прямых.

PenPos.X возвращает горизонтальную позицию,

а PenPos.Y – вертикальную.

Pixels[X,Y: Integer] – массив для записи и считывания пикселов холста.

Благодаря свойству Pixels холст интерпретируется как двумерная матрица пикселов.

Вывод графических примитивов выполняется с помощью методов объекта Canvas.

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

Компонент PaintBox генерирует событие OnPaint, в ответ на которое можно рисовать что угодно.

Методы рисования графических примитивов приведены в пособии.

Например, нарисуем пунктирную прямую красного цвета.

Напишем обработчик события OnPaint формы:

procedure TForm1.FormPaint(Sender : Object);

begin

with Canvas do

begin

Pen.Style := psDot; //пунктирная линия

Pen.Color :=clRed; //линия красного цвета

MoveTo(50,50); //ставим курсор в точку

LineTo(150,200); //проводим линию

end;

end;

Компонент TShape

Компонент рисует и показывает простейшую геометрическую фигуру.

Shape : TShapeType;

(stRectangle, stSquare, stRoundRect, stRoundSquare,stEllipse, stCircle);

Размеры фигур соответствуют размерам компонента.

Имеет свойства Brush и Pen.

Компонент TBevel (Additional)

Компонент рельефа, позволяет создавать на поверхности формы эффекты: углубления, выпуклости, бордюры, канавки.

Выполняет роль украшения, не имеет событий.

Внешний вид регулируется свойствами:

Align – способ выравнивая в пределах владельца,

Shape – рамка, прямоугольник, линия,

Style – определяет, является ли рельефный элемент выпуклым или вдавленным.

Компонент TImage (Additional)

Служит надстройкой над классом TPicture и замыкает всю иерархию графических объектов VCL.

Предназначен для показа на форме изображения: битовой карты (TBitmap), метафайла (TMetafile), значка (TIcon).

Свойство Picture : TPicture; служит контейнером для графического объекта.

AutoSize : Boolean; – означает, что размеры компонента настраиваются под размеры рисунка, устанавливать True нужно перед загрузкой картинки.

Stretch : Boolean; если это свойство равно True, то изображение подгоняется под компонент. Если оно равно False, то играет роль свойство

Center : Boolean; - если это свойство равно True, изображение центрируется по центу, иначе располагается в ее верхнем левом углу.

Компонент TLabel

С помощью этого компонента на поверхности формы можно отобразить информацию, сделать пояснения.

Caption – содержит с строку с выводимым текстом,

Alignment – устанавливает правила выравнивания по клиентской области,

AutoSize :Boolean; – при True, происходит автоматическое приведение размеров компонента к размерам текста и шрифта.

Transparent : Boolean; – прозрачность фона компонента. Если равно True, то при перерисовке элемента управления не происходит закрашивания клиентской области.

WordWrap :Boolean: – определяет возможность разрыва слов в случае, если длина выводимого текста превышает ширину компонента.

Компонент TPanel

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

Свойство Caption может использоваться для вывода сообщений.